经典C语言源代码.doc
《经典C语言源代码.doc》由会员分享,可在线阅读,更多相关《经典C语言源代码.doc(35页珍藏版)》请在咨信网上搜索。
(完整word版)经典C语言源代码 经典C语言源代码 1、(1)某年某月某日是星期几 #include<stdio.h> 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<B,如 A:4,7,9 B:1,3,5,8,9 变换后 A:1,3,5 B:4,7,8,9,9 #include <stdio.h> 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<n && B[j]<x) 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 <stdio.h> 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 <stdio.h> 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<stdio.h> int isprime(int n) { if (n<2) return 0; for (int i = 2; i<n / 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<stdio.h> #include<math.h> void main() { int m, i, k; printf("请输入一个整数:"); scanf_s("%d", &m); k = (int)sqrt(m); for (i = 2; i <= k; i++) if (m%i == 0) break; if (i>k) printf("%d 是素数。\n", m); else printf("%d 不是素数。\n", m); } 14、一个数是否含有数字5 #include <stdio.h> #include <stdbool.h> bool is5Num(int num) { int temp = num % 10; while (temp != 5 && num > 10) { num = num / 10; temp = num % 10; } if (temp != 5) return false; else return true; } void main() { int num; printf("输入一个数:\n"); scanf_s("%d", &num); if (is5Num(num)) printf("含5\n"); else printf("不含5\n"); } 15、一个排好序的数组,插入一个数 #include <stdio.h> void main() { int a[11] = { 1,2,3,4,5,6,7,8,9,10 }; int num; printf("插入前数组为:\n"); for (int i = 0; i<10; i++) printf("%3d", a[i]); printf("\n"); printf("请输入一个数:\n"); scanf_s("%d", &num); if (num > a[9]) a[10] = num; else { for (int i = 0; i < 10;i++) if (num < a[i]) { for (int j = 9; j >= i; j--) a[j + 1] = a[j]; a[i] = num; break; } } printf("插入后数组为:\n"); for (int i = 0; i <= 10; i++) printf("%3d", a[i]); printf("\n"); } 16、牛顿迭代法: #include <stdio.h> #include <math.h> 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);//进行牛顿迭代计算 while (!(func1(x1 - x0) < precision || fabs(func(x1)) < precision)) { x0 = x1;//准备下一次迭代 if (func1(x0) == 0.0)//若通过初值,函数返回值为0 printf("迭代过程中倒数为0!\n"); x1 = x0 - func(x0) / func1(x0);//进行牛顿迭代计算 } } void main() { double x, precision; printf("输入初始迭代值x0:\n"); scanf_s("%lf", &x); printf("迭代要求的精度:\n"); scanf_s("%lf", &precision); Newton(x, precision);//若函数返回值为1 printf("该值附近的跟为:%lf\n", x); getchar(); getchar(); } 17、起始时间到终止时间天数 #include "stdio.h" void main() { int start[3], end[3]; printf("请输入开始日期,如1964.2.19:\n"); scanf_s("%d.%d.%d", &start[0], &start[1], &start[2]); printf("请输入结束日期,如2001.10.20:\n"); scanf_s("%d.%d.%d", &end[0], &end[1], &end[2]); int sum = 0; for (int mid = start[0]; mid < end[0]; mid++) { if ((mid % 400 == 0) || (mid % 4 == 0 && mid % 100 != 0)) { sum = sum + 366; } else sum = sum + 365; } sum = sum - indexday(start[0],start[1],start[2]) + indexday(end[0],end[1],end[2]); printf("在%d.%d.%d-%d.%d.%d之间有%d天\n", start[0],start[1],start[2],end[0],end[1],end[2], sum); } int indexday(int year, int month, int day) { int i, flag, dayth; int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; 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]; return 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("所求值为%d\n", Element(n)); } 19、最大公约数(辗转相除) #include<stdio.h> 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:%d\n", a); printf("The least common multiple:%d\n", m*n / a); } 20、杨辉三角 #include<stdio.h> void main() { int i, j, n, k; printf("Enter n:"); scanf_s("%d", &n); for (i = 1; i <= n; i++) { k = 1; for (j = 1; j<i; j++) { printf("%3d", k); k = k*(i - j) / j; }//每次要打印的下一个数等于前一个数乘以其所在行数和列数的差再除以其列数 printf("%3d", k); printf("\n"); } } 21、约瑟夫 #include <stdio.h> void main() {int n, m, i, s=0; printf ("Enter n: m: "); scanf("%d%d", &n, &m); for (i=2; i<=n; i++) s=(s+m)%i; printf ("The winner is %d\n", s+1); } 22、斐波拉契 #include<stdio.h> 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) printf("\n"); } } 23、海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子? #include<stdio.h> main() { int i, m, j, k, count; for (i = 4; i<10000; i += 4) { count = 0; m = i; for (k = 0; k<5; k++) { j = i / 4 * 5 + 1; i = j; if (j % 4 == 0) count++; else break; } i = m; if (count == 4) { printf("%d\n", j); break; } } } 24、验证哥德巴赫猜想,即任一个偶数都可以分解为两个素数之和。 #include <stdio.h> int isprime(int); void even(int); void main() { int a; printf("请输入一个偶数:"); scanf_s("%d", &a); if (a % 2 == 0) even(a); else printf("%d 不是偶数!\n"); } void even(int x) { int i; for (i = 2; i <= x / 2; i++) if (isprime(i) && isprime(x - i)) { printf("%d=%d+%d\n", 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; } 25、魔方阵 #include <stdio.h> #define N 20 void main() { int a[N][N] = { 0 }, i, j, k, n; do { printf("请输入魔幻方的阶数n(n<%d):", N); scanf_s("%d", &n); } while (n <= 0 || n >= N || n % 2 == 0); i = n + 1; j = n / 2 + 1; a[1][j] = 1; //将1放在第一行中间一列 for (k = 2; k <= n*n; k++)/*从2开始直到n*n各数依次按一下规则存放:每一个数存放的行比前一个数的行数减1,列数加1*/ { i--; j++; if (i<1 && j>n) { i += 2; j--; } else { if (i < 1) i = n; //如果上一个数的行数为1,则下一个数的行数为n if (j > n) j = 1; }//当上一个数的列数为n时,下一个数的列数应为1,行数减去1 if (a[i][j] == 0)a[i][j] = k;/*如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。*/ else { i += 2; j--; a[i][j] = k; } } for (i = 1; i <= n; i++) { for (j = 1; j <= n; j++) printf("%-4d", a[i][j]); printf("\n"); } } 26、国际象棋棋盘 #include <stdio.h> #include <windows.h> 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); else printf(" "); } printf("\n"); } } .- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 经典 语言 源代码
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文