《2022年2022年经典C语言源代码 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年经典C语言源代码 .pdf(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、. . 经典 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) +
2、day - 1; while (week0) week += 7; week %= 7; switch (week) case 1:printf(Mondayn); break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 36 页 - - - - - - - - - . . case 2:printf(Tuesdayn); break; case 3:printf(Wednesdayn); break; case 4:printf(Thursdayn); break
3、; case 5:printf(Fridayn); break; case 6:printf(Saturdayn); break; case 0:printf(Sundayn); 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, &m
4、onth, &day); dayth = day; flag = (year % 400 = 0) | (year % 4 = 0 & year % 100 != 0); if (flag) month_day2 = 29; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 36 页 - - - - - - - - - . . for (i = 1; i month; i+) dayth = dayth + month_dayi; printf(%d/%d/%d 是第%d
5、天n, year, month, day, dayth); 2、30 个数中找最小的数及其位置#include stdio.h # define SIZE 30 void main() int i; float dataSIZE; int min; printf( 请输入 %d 个浮点数: n,SIZE); for (i = 0; i SIZE; i+) /scanf_s(%f, &datai); datai = rand() % 30 + 1; printf(%f 、, datai); min = 0; for (i = 1; i SIZE; i+) if (datai datamin) 名
6、师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 36 页 - - - - - - - - - . . min = i; printf( 最小值是 %5.2f,位置是 %5dn, datamin, min); 3、30 个数从小到大排序(1)#include stdio.h # define SIZE 30 void main() int i,j; float dataSIZE,temp; int min; printf( 请输入 %d 个整型数: n,SIZE); for
7、(i = 0; i SIZE; i+) scanf_s(%f, &datai); for (i = 0; i SIZE; i+) min = i; for (j = i + 1; j SIZE; j+) if (dataj datamin) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 36 页 - - - - - - - - - . . min = j; temp = datamin; datamin = datai; datai = temp; printf(n 排
8、序后的结果是: n); for (i = 0; i SIZE; i+) printf(%5.2f, datai); (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 scoreSIZE; accept_array(score, SIZE); printf( 排序前: ); show_array(sco
9、re, SIZE); sort(score, SIZE); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 36 页 - - - - - - - - - . . 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, &ai); v
10、oid show_array(float a, int size) int i; for (i = 0; i size; i+) printf( %5.2f, ai); 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 (aj amin) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
11、 - 第 6 页,共 36 页 - - - - - - - - - . . min = j; temp = amin; amin = ai; ai = temp; 4、 (1)指针加减:#include stdio.h #define SIZE 10 void main() int aSIZE = 1,2,3,4,5,6,7,8,9,10 ; int *pa, i; pa = &a0; /pa=a; printf(n); for (i = 0; i SIZE; i+) printf( %d, *pa); /printf( %d, *(pa+1); pa+; 名师资料总结 - - -精品资料欢迎
12、下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 36 页 - - - - - - - - - . . (2)指针比较:#include stdio.h #define SIZE 10 void main() int aSIZE = 1,2,3,4,5,6,7,8,9,10 ; int *pa, i; int *qa; pa = qa = &a0; printf( 请输入 %d 整型数: ,SIZE); for (; pa qa + SIZE; pa+) scanf_s(%d, pa); for (pa-;
13、qa = pa; pa-) printf( %d, *pa); 5、两字符串相连:#include stdio.h #include string.h void str_cat(char str1, char str2); void main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 36 页 - - - - - - - - - . . int i, j; char str1160; char str280; printf( 请输入第一个字符串:); gets(
14、str1); printf( 请输入第二个字符串:); gets(str2); str_cat(str1, str2); puts(str1); void str_cat(char str1, char str2) int i, j; i = 0; while (str1i != 0) i+; j = 0; while (str2j != 0) str1i = str2j; i+; j+; str1i = 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 36 页 -
15、 - - - - - - - - . . 6、二维数组( a,b 转置)#include stdio.h void main() int i, j, b23; int a32 = 1,2,3,4,5,6 ; for (i = 0; i 2; i+) for (j = 0; j 3; j+) bij = aji; printf(na:n); for (i = 0; i 3; i+) for (j = 0; j 2; j+) printf(%5d, aij); printf(n); printf(nb:n); for(i = 0; i 2; i+) for (j = 0; j 3; j+) pri
16、ntf(%5d, bij); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 36 页 - - - - - - - - - . . 7、输入一个二维数组并输出(指针)#include stdio.h void main() int x23; 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
17、2; i+) for (j = 0; j 3; j+) printf(%d , *(*(x + i) + j); putchar(n); 8、冒泡法排序一个数组#include stdio.h 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 36 页 - - - - - - - - - . . #define size 10 void maopao(int a); void main() int a10; int i; printf( 请输入 10 个整数: n); f
18、or (i = 0; i 10; i+) scanf_s(%d, &ai); maopao(a); void maopao(int a) int i, j, temp; for (i = 0; i 9; i+) /进行 9 轮排序for (j = 0; j aj + 1) temp = aj; aj = aj + 1;/ 大的沉底,小的上浮aj + 1 = temp; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 36 页 - - - - - - - - - . .
19、printf( 排序结果: n); for (i = 0; i 10; i+) printf(%4d, ai); 9、两数组 A,B,要求 AB,如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 (Am - 1B0) 名师资料总结 - - -精品资料欢迎下载
20、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 36 页 - - - - - - - - - . . x = Am - 1; Am - 1 = B0; / 交换 Am-1和 B0 j = 1; while (jn & Bj= 0 & Aix) Ai + 1 = Ai-; / 寻找 B0的插入位置Ai + 1 = x; void main() / 这里主要介绍算法思想,主函数就简单写了 int A3, B5, i; printf( 输入第一个数组:); for (i = 0; i3; i+) scanf_s(%
21、d, &Ai); printf(n 输入第二个数组: ); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 36 页 - - - - - - - - - . . for (i = 0; i5; i+) scanf_s(%d, &Bi); ReArranger(A, B, 3, 5); printf(n 输出第一个数组: ); for (i = 0; i3; i+) printf(%d , Ai); printf(nn); printf( 输出第二个数组:); for (
22、i = 0; i5; i+) printf(%d , Bi); 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 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 36 页 - - - - - - - - - . . void main() int a, b, c, d, e, f; for (a = 1; a = 6; a+) for (b = 1; b = 6; b+) if
23、(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(
24、 %dn, a); printf(%d %dn, b, c); printf(%d %d %dn, d, e, f); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 36 页 - - - - - - - - - . . 11、输入一串字符,升序排序,折半查找其中一字符#include void *sortString(char unsort, int length) for (int i = 0; i length; i+) for (int j = i + 1; j
25、 unsortj) int temp = unsortj; unsortj = unsorti; unsorti = temp; void main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 36 页 - - - - - - - - - . . char s150; gets(s1); char value; scanf_s(%c, &value); printf(s1 :%sn, s1); printf(value:%cn, value); int leng
26、th = strlen(s1); printf(length:%dn, length); sortString(s1, length); printf(s1 :%sn, s1); int start = 0, end = length - 1; int mid = (end + start) / 2; while (start s1mid) start = mid+1; else end = mid-1; if (mid) printf( 该字符在已知字符串中,即在第%d个n,mid); else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
27、 - - - - 名师精心整理 - - - - - - - 第 18 页,共 36 页 - - - - - - - - - . . printf( 该字符不在已知字符串中n); 12、100-300 和 500-700 直接素数, m 不被 2 到根号 m 直接任一整除#include int isprime(int n) if (n2) return 0; for (int i = 2; in / 2; i+) if (n%i = 0) return 0; return 1; void main() int i, k = 0; for (i = 100; i = 300; i+) if (i
28、sprime(i) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 36 页 - - - - - - - - - . . 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 #incl
29、ude void main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 36 页 - - - - - - - - - . . int m, i, k; printf( 请输入一个整数:); scanf_s(%d, &m); k = (int)sqrt(m); for (i = 2; i k) printf(%d 是素数。 n, m); else printf(%d 不是素数。 n, m); 14、一个数是否含有数字5 #include #include bool
30、 is5Num(int num) int temp = num % 10; while (temp != 5 & num 10) num = num / 10; temp = num % 10; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 36 页 - - - - - - - - - . . if (temp != 5) return false; else return true; void main() int num; printf( 输入一个数: n); s
31、canf_s(%d, &num); if (is5Num(num) printf( 含 5n); else printf( 不含 5n); 15、一个排好序的数组,插入一个数#include void main() int a11 = 1,2,3,4,5,6,7,8,9,10 ; int num; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 36 页 - - - - - - - - - . . printf( 插入前数组为: n); for (int i = 0;
32、i a9) a10 = num; else for (int i = 0; i 10;i+) if (num = i; j-) aj + 1 = aj; ai = num; break; printf( 插入后数组为: n); for (int i = 0; i = 10; i+) printf(%3d, ai); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 36 页 - - - - - - - - - . . 16、牛顿迭代法:#includ
33、e #include double func(double x) / 函数return x*x*x + 2.0*x*x + 3.0*x + 4.0; double func1(double x) / 导函数return 3 * x*x + 4 * x + 3; void Newton(double x0,double precision)/ 迭代次数double x1; int k; if (func1(x0) = 0.0) / 若通过初值,函数返回为0 printf( 迭代过程中倒数为0!n); return; x1 = x0 - func(x0) / func1(x0);/ 进行牛顿迭代计
34、算while (!(func1(x1 - x0) precision | fabs(func(x1) precision) x0 = x1;/准备下一次迭代if (func1(x0) = 0.0)/ 若通过初值,函数返回值为0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 36 页 - - - - - - - - - . . printf( 迭代过程中倒数为0!n); x1 = x0 - func(x0) / func1(x0);/ 进行牛顿迭代计算 void mai
35、n() double x, precision; printf( 输入初始迭代值x0:n); scanf_s(%lf, &x); printf( 迭代要求的精度:n); scanf_s(%lf, &precision); Newton(x, precision);/ 若函数返回值为1 printf( 该值附近的跟为:%lfn, x); getchar(); getchar(); 17、起始时间到终止时间天数#include stdio.h void main() int start3, end3; printf( 请输入开始日期,如1964.2.19:n); 名师资料总结 - - -精品资料欢
36、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 36 页 - - - - - - - - - . . scanf_s(%d.%d.%d, &start0, &start1, &start2); printf( 请输入结束日期,如2001.10.20:n); scanf_s(%d.%d.%d, &end0, &end1, &end2); int sum = 0; for (int mid = start0; mid end0; mid+) if (mid % 400 = 0) | (mid % 4 = 0
37、 & mid % 100 != 0) sum = sum + 366; else sum = sum + 365; sum = sum - indexday(start0,start1,start2) + indexday(end0,end1,end2); printf( 在%d.%d.%d-%d.%d.%d 之间有 %d天n, start0,start1,start2,end0,end1,end2, sum); int indexday(int year, int month, int day) int i, flag, dayth; int month_day = 0,31,28,31,3
38、0,31,30,31,31,30,31,30,31 ; dayth = day; flag = (year % 400 = 0) | (year % 4 = 0 & year % 100 != 0); if (flag) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 36 页 - - - - - - - - - . . month_day2 = 29; for (i = 1; i month; i+) dayth = dayth + month_dayi; retur
39、n dayth; 18、递归求 1*1+2*2+3*3+n*n #include stdio.h long Element(int n) if (n = 1) return 1 * 1; else return Element(n - 1) + n*n; void main() int n; printf( 请输入 n 的值: n); scanf_s(%d, &n); printf( 所求值为 %dn, Element(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页
40、,共 36 页 - - - - - - - - - . . 19、最大公约数(辗转相除)#include void main() /* 辗转相除法求最大公约数*/ int m, n, a, b, t, c; printf(Input two integer numbers:n); scanf_s(%d%d, &a, &b); m = a; n = b; while (b != 0) /* 余数不为 0,继续相除,直到余数为0 */ c = a%b; a = b; b = c; printf(The largest common divisor:%dn, a); printf(The least
41、 common multiple:%dn, m*n / a); 20、杨辉三角#include void main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 36 页 - - - - - - - - - . . int i, j, n, k; printf(Enter n:); scanf_s(%d, &n); for (i = 1; i = n; i+) k = 1; for (j = 1; ji; j+) printf(%3d, k); k = k*(i
42、- j) / j; / 每次要打印的下一个数等于前一个数乘以其所在行数和列数的差再除以其列数printf(%3d, k); printf(n); 21、约瑟夫#include void main() int n, m, i, s=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 29 页,共 36 页 - - - - - - - - - . . printf (Enter n: m: ); scanf(%d%d, &n, &m); for (i=2; i=n; i+) s=(s+
43、m)%i; printf (The winner is %dn, s+1); 22、斐波拉契#include void main() long f, f1, f2; int i, n; printf(Enter n : ); scanf_s(%d, &n); f1 = 1; f2 = 1; printf(%10d%10d, f1, f2); for (i = 1; i = n; i+) f = f1 + f2; printf(%10d, f); f1 = f2; f2 = f; if (i % 10 = 0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
44、 - - - - - - - 名师精心整理 - - - - - - - 第 30 页,共 36 页 - - - - - - - - - . . printf(n); 23、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。 第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?#include main() int i, m, j, k, count; for (i = 4; i10000; i += 4) count = 0;
45、m = i; for (k = 0; k5; k+) j = i / 4 * 5 + 1; i = j; if (j % 4 = 0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 31 页,共 36 页 - - - - - - - - - . . count+; else break; i = m; if (count = 4) printf(%dn, j); break; 24、验证哥德巴赫猜想, 即任一个偶数都可以分解为两个素数之和。#include int isprime(
46、int); void even(int); void main() int a; printf( 请输入一个偶数 :); scanf_s(%d, &a); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 36 页 - - - - - - - - - . . if (a % 2 = 0) even(a); else printf(%d 不是偶数! n); void even(int x) int i; for (i = 2; i = x / 2; i+) if (ispr
47、ime(i) & isprime(x - i) printf(%d=%d+%dn, x, i, x - i); return; int isprime(int a) int i; for (i = 2; i = a / 2; i+) if (a%i = 0) return 0; return 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 33 页,共 36 页 - - - - - - - - - . . 25、魔方阵#include #define N 20 void mai
48、n() int aNN = 0 , i, j, k, n; do printf( 请输入魔幻方的阶数n(n%d):, N); scanf_s(%d, &n); while (n = N | n % 2 = 0); i = n + 1; j = n / 2 + 1; a1j = 1; / 将 1 放在第一行中间一列for (k = 2; k = n*n; k+)/* 从 2开始直到 n*n 各数依次按一下规则存放:每一个数存放的行比前一个数的行数减1,列数加 1*/ i-; j+; if (in) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
49、- - - - 名师精心整理 - - - - - - - 第 34 页,共 36 页 - - - - - - - - - . . i += 2; j-; else if (i n) j = 1; / 当上一个数的列数为n 时,下一个数的列数应为1,行数减去 1 if (aij = 0)aij = k;/* 如果按上面规则确定的位置上已有数,或上一个数是第一行第n 列时,则把下一个数放在上一个数的下面。 */ else i += 2; j-; aij = k; for (i = 1; i = n; i+) for (j = 1; j = n; j+) printf(%-4d, aij); pri
50、ntf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 35 页,共 36 页 - - - - - - - - - . . 26、国际象棋棋盘#include #include void main() int i, j; SetConsoleOutputCP(437); /显示大于 127 的 asc码for (i = 0; i 8; i+) for (j = 0; j 8; j+) if (i + j) % 2 = 0) printf(%c%c, 219, 219); el