经典C语言源代码
1、(1)某年某月某日是星期几
#include
int main()
{
int year, month, day;
while (scanf_s("%d%d%d", &year, &month, &day) != EOF)
{
if (month == 1 || month == 2)//判断month是否为1或2
{
year--;
month += 12;
}
int c = year / 100;
int y = year - c * 100;
int week = (c / 4) - 2 * c + (y + y / 4) + (13 * (month + 1) / 5) + day - 1;
while (week<0) { week += 7; }
week %= 7;
switch (week)
{
case 1:printf("Monday\n"); break;
case 2:printf("Tuesday\n"); break;
case 3:printf("Wednesday\n"); break;
case 4:printf("Thursday\n"); break;
case 5:printf("Friday\n"); break;
case 6:printf("Saturday\n"); break;
case 0:printf("Sunday\n"); break;
}
}
return 0;
}
1、(2)某年某月某日是第几天(一维数组)
#include "stdio.h"
void main() {
int i, flag, year, month, day, dayth;
int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
printf("请输入年/月/日:\n");
scanf_s("%d/%d/%d", &year, &month, &day);
dayth = day;
flag = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
if (flag)
month_day[2] = 29;
for (i = 1; i < month; i++)
dayth = dayth + month_day[i];
printf("%d/%d/%d是第%d天\n", year, month, day, dayth); }
2、30个数中找最小的数及其位置
#include "stdio.h"
# define SIZE 30
void main() {
int i;
float data[SIZE];
int min;
printf("请输入%d个浮点数:\n",SIZE);
for (i = 0; i < SIZE; i++) {
//scanf_s("%f", &data[i]);
data[i] = rand() % 30 + 1;
printf("%f、", data[i]);
}
min = 0;
for (i = 1; i < SIZE; i++) {
if (data[i] < data[min])
min = i;
}
printf("最小值是%5.2f,位置是%5d\n", data[min], min); }
3、30个数从小到大排序
(1)
#include "stdio.h"
# define SIZE 30
void main() {
int i,j;
float data[SIZE],temp;
int min;
printf("请输入%d个整型数:\n",SIZE);
for (i = 0; i < SIZE; i++) {
scanf_s("%f", &data[i]);
}
for (i = 0; i < SIZE; i++) {
min = i;
for (j = i + 1; j < SIZE; j++)
if (data[j] < data[min])
min = j;
temp = data[min];
data[min] = data[i];
data[i] = temp;
}
printf("\n排序后的结果是:\n");
for (i = 0; i < SIZE; i++)
printf("%5.2f", data[i]);
}
(2)模块化程序(数组名作为函数参数)#include "stdio.h"
# define SIZE 5
void accept_array(float a[], int size);
void sort(float a[], int size);
void show_array(float a[], int size);
void main() {
float score[SIZE];
accept_array(score, SIZE);
printf("排序前:");
show_array(score, SIZE);
sort(score, SIZE);
printf("排序后:");
show_array(score, SIZE);
}
void accept_array(float a[], int size) { int i;
printf("请输入%d个分数:", size);
for (i = 0; i < size; i++)
scanf_s("%f", &a[i]);
}
void show_array(float a[], int size) { int i;
for (i = 0; i < size; i++)
printf(" %5.2f", a[i]);
printf("\n");
}
void sort(float a[],int size) {
int i, min, j;
float temp;
for (i = 0; i < SIZE; i++) {
min = i;
for (j = i + 1; j < SIZE; j++)
if (a[j] < a[min])
min = j;
temp = a[min];
a[min] = a[i];
a[i] = temp;
}
}
4、(1)指针加减:
#include "stdio.h"
#define SIZE 10
void main() {
int a[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };
int *pa, i;
pa = &a[0];
//pa=a;
printf("\n");
for (i = 0; i < SIZE; i++) {
printf(" %d", *pa);
//printf(" %d", *(pa+1));
pa++;
}
}
(2)指针比较:
#include "stdio.h"
#define SIZE 10
void main() {
int a[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };
int *pa, i;
int *qa;
pa = qa = &a[0];
printf("请输入%d整型数:",SIZE);
for (; pa < qa + SIZE; pa++)
scanf_s("%d", pa);
for (pa--; qa <= pa; pa--)
printf(" %d", *pa);
}
5、两字符串相连:
#include "stdio.h"
#include "string.h"
void str_cat(char str1[], char str2[]); void main() {
int i, j;
char str1[160];
char str2[80];
printf("请输入第一个字符串:");
gets(str1);
printf("请输入第二个字符串:");
gets(str2);
str_cat(str1, str2);
puts(str1);
}
void str_cat(char str1[], char str2[]) { int i, j;
i = 0;
while (str1[i] != '\0')
i++;
j = 0;
while (str2[j] != '\0') {
str1[i] = str2[j];
i++; j++;
}
str1[i] = '\0';
}
6、二维数组(a,b转置)
#include "stdio.h"
void main() {
int i, j, b[2][3];
int a[3][2] = { {1,2},{3,4},{5,6} };
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
b[i][j] = a[j][i];
}
printf("\na:\n");
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++)
printf("%5d", a[i][j]);
printf("\n");
}
printf("\nb:\n");
for(i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
printf("%5d", b[i][j]);
printf("\n");
}
7、输入一个二维数组并输出(指针)#include "stdio.h"
void main() {
int x[2][3];
int i, j;
for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
scanf_s("%d", *(x + i) + j);
putchar('\n');
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
printf("%d ", *(*(x + i) + j));
putchar('\n');
}
}
8、冒泡法排序一个数组
#include "stdio.h"
#define size 10
void maopao(int a[]);
void main() {
int a[10];
int i;
printf("请输入10个整数:\n");
for (i = 0; i < 10; i++)
scanf_s("%d", &a[i]);
maopao(a);
}
void maopao(int a[]) {
int i, j, temp;
for (i = 0; i < 9; i++) {//进行9轮排序
for (j = 0; j < 9 - i; j++)//每轮进行9-i次交换
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];//大的沉底,小的上浮
a[j + 1] = temp;
}
}
}
printf("排序结果:\n");
for (i = 0; i < 10; i++)
printf("%4d", a[i]);
}
9、两数组A,B,要求A
A:4,7,9
B:1,3,5,8,9
变换后
A:1,3,5
B:4,7,8,9,9
#include
void ReArranger(int* A, int* B, int m, int n) //A和B是各有m个和n 个整数的非降序数组,本算法将B数组元素逐个插入到A中,使A中各元素均不大于B中各元素,且两数组仍保持非降序排列。{
int x, j, i;
while (A[m - 1]>B[0])
{
x = A[m - 1];
A[m - 1] = B[0]; //交换A[m-1]和B[0]
j = 1;
while (j B[j - 1] = B[j++]; //寻找A[m-1]的插入位置 B[j - 1] = x; x = A[m - 1]; i = m - 2; while (i >= 0 && A[i]>x) A[i + 1] = A[i--]; //寻找B[0]的插入位置 A[i + 1] = x; } } void main() //这里主要介绍算法思想,主函数就简单写了{ int A[3], B[5], i; printf("输入第一个数组:"); for (i = 0; i<3; i++) { scanf_s("%d", &A[i]); } printf("\n输入第二个数组:"); for (i = 0; i<5; i++) { scanf_s("%d", &B[i]); } ReArranger(A, B, 3, 5); printf("\n输出第一个数组:"); for (i = 0; i<3; i++) printf("%d ", A[i]); printf("\n\n"); printf("输出第二个数组:"); for (i = 0; i<5; i++) printf("%d ", B[i]); printf("\n"); } 10、符合1+6+3=3+2+5=1+4+5有哪几组 A 1 B C 6 4 D E F到 3 2 5 #include void main() { int a, b, c, d, e, f; for (a = 1; a <= 6; a++) for (b = 1; b <= 6; b++) { if (b == a) continue; for (c = 1; c <= 6; c++) { if ((c == a) || (c == b)) continue; for (d = 1; d <= 6; d++) { if ((d == a) || (d == b) || (d == c)) continue; for (e = 1; e <= 6; e++) { if ((e == a) || (e == b) || (e == c) || (e == d)) continue; f = 21 - (a + b + c + d + e); if ((a + b + d == d + e + f) && (a + b + d == a + c + f)) { printf(" %d\n", a); printf("%d %d\n", b, c); printf("%d %d %d\n", d, e, f); } } } } } } 11、输入一串字符,升序排序,折半查找其中一字符#include void *sortString(char unsort[], int length) { for (int i = 0; i < length; i++) { for (int j = i + 1; j < length; j++) { if (unsort[i] > unsort[j]) { int temp = unsort[j]; unsort[j] = unsort[i]; unsort[i] = temp; } } } } void main() { char s1[50]; gets(s1); char value; scanf_s("%c", &value); printf("s1:%s\n", s1); printf("value:%c\n", value); int length = strlen(s1); printf("length:%d\n", length); sortString(s1, length); printf("s1:%s\n", s1); int start = 0, end = length - 1; int mid = (end + start) / 2; while (start <= end&&s1[mid] != value) { mid = (end + start) / 2; if (value > s1[mid]) start = mid+1; else end = mid-1; } if (mid) printf("该字符在已知字符串中,即在第%d个\n",mid); else printf("该字符不在已知字符串中\n"); } 12、100-300和500-700直接素数,m不被2到根号m直接任一整除 #include int isprime(int n) { if (n<2) return 0; for (int i = 2; i if (n%i == 0) return 0; return 1; } void main() { int i, k = 0; for (i = 100; i <= 300; i++) if (isprime(i)) { printf("%3d ", i); k++; if (k % 10 == 0) printf("\n"); } for (i = 500; i <= 700; i++) if (isprime(i)) { printf("%3d ", i); k++; if (k % 10 == 0) printf("\n"); } printf("\n"); } 13、判断一个数是否是素数 #include #include void main() {