第三章

1 2 3 4 5 6 7 8 9 10
| #include<stdio.h> #include<math.h> int main(void) { double r=0.07 ,p; int n=10; p=pow((1+r),n); printf("十年后我国国民生产总值与现在相比增长了:%f\n",p); return 0; }
|
存款利息计算
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<stdio.h> #include<math.h> int main(void) { float p1,p2,p3,p4,p5,m=1000; float r5=0.03,r3=0.0275,r2=0.021,r1=0.015,r0=0.0035; p1=m*(1+5*r5); printf("定期存5年本息为:%f\n",p1); p2=m*(1+2*r2)*(1+3*r3); printf("定期存2年,本息再存3年为:%f\n",p2); p3=m*(1+3*r3)*(1+2*r2); printf("定期存3年,本息再存2年为:%f\n",p3); p4=m*pow((1+1*r1),5); printf("连续存五次一年定期为:%f\n",p4); p5=m*pow((1+r0/4),20); printf("货期存款本息为:%f\n",p5); return 0; }
|
购房者从银行贷了一笔款,计算多少月能还清
1 2 3 4 5 6 7 8 9 10
| #include<stdio.h> #include<math.h> int main(void) { float d=300000,p=6000,r=0.01,m; m=(log(p)-log(p-d*r))/log(1+r); printf("m=%.1f",m); return 0; }
|
程序分析题
1 2 3 4 5 6 7 8 9 10
| #include<stdio.h> int main(void) { char c1,c2; c1 = 197; c2 = 198; printf("c1=%c,c2=%c\n",c1,c2); printf("c1=%d,c2=%d\n",c1,c2); return 0; }
|


用scanf函数输入元素
1 2 3 4 5 6 7 8 9 10 11 12
| #include<stdio.h> int main(void) { int a,b; float x,y; char c1,c2; scanf("a=%d,b=%d,\n",&a,&b); scanf("%f%e",&x,&y); scanf("%c%c",&c1,&c2); printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%\n",a,b,x,y,c1,c2); return 0; }
|
这样进行输入才能正确执行
将chain译成密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<stdio.h> int main(void) {
char a[5]; printf("请输入需要加密的数据:"); for(int i=0;i<5;++i) { scanf("%c",&a[i]); } printf("加密后的数据为:\n"); for(int i=0;i<5;i++) { a[i]=a[i]+4; printf("%c",a[i]); } return 0; }
|
计算圆周长、圆面积、圆球表面积、圆球体积、圆柱体体积
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h> #define p 3.14 int main(void) { float r,h; printf("请输入圆的半径和高:"); scanf("%f%f",&r,&h); putchar('\n'); printf("圆周长为:%.2f\n",2*p*r); printf("圆面积为:%.2f\n",p*r*r); printf("圆球表面积为:%.2f\n",4*p*r*r); printf("圆球体积为:%.2f\n",(4.0/3.0)*p*r*r*r); printf("圆柱体体积为:%.2f\n",p*r*r*h); return 0; }
|
int与char之间的关系
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h> int main(void) { int c1,c2; c1=getchar(); c2=getchar(); putchar(c1); putchar('\n'); putchar(c2); putchar('\n'); printf("%d\n",c1); printf("%d\n",c2); return 0; }
|

第四章
什么是算数运算、什么是关系关系运算、什么是逻辑运算
算数运算:就指的是四则运算,加减乘除,乘法,开方这些运算统称。C语言中,算数运算包含了一系列的运算:+ - * / % ++ —
关系运算:在C语言中,关系运算也可以称为比较运算,作用是用于进行两个量,或者两个表达式结果之间的关系表示 运算符:< > <= >= == !=
逻辑运算:对表达式进行逻辑与或非上的逻辑真假测试 运算符: && || !
C语言中如何表示“真”和“假”?系统如何判断一个量的“真“和“假”?
对于逻辑表达式,若其值为真,则以1表示,若其值为假,则以0表示。但是在判断一个逻辑量的值时,系统会以0作为假,以非0作为真。例如3&&5的值为真,系统给出3&&5的值是1。
写出下面各逻辑表达式的值。设a=3,b=4,c=5

有三个整数a,b,c,有键盘输入,输出其中最大的数。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include<stdio.h> int main(void) { int a,b,c; printf("请输入三个整数:\n"); scanf("%d%d$d",&a,&b,&c); if(a>b) { if(a>c) printf("最大值是%d",a); else printf("最大值是%d",c); }else if(b>c) printf("最大值是%d",b); else printf("最大值是%d",c); return 0; }
|

从键盘输入一个小于1000的正数,要求输出他的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000的整数。若不是,则要求重新输入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include<stdio.h> #include<math.h> #define M 1000 int main(void) { int a,b; printf("请输入一个小于1000的整数:\n"); scanf("%d",&a); if(a<0||a>M) { printf("输入的数据不符合要求,请重新输入\n"); return 0; } b=sqrt(a); printf("%d的平方根是:%d",a,b); return 0; }
#include <stdio.h>
int main() { int num; while (1) { printf("请输入一个小于1000的正数:"); scanf("%d", &num); if (num < 1000) { break; } else { printf("输入的数不符合要求,请重新输入。\n"); } }
int low = 0, high = num, result = 0; while (low <= high) { int mid = (low + high) / 2; if (mid * mid <= num) { result = mid; low = mid + 1; } else { high = mid - 1; } }
printf("输入的数的平方根为:%d\n", result);
return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h> int main(void) { int x; printf("请输入一个数:\n"); scanf("%d",&x); if(x<1) printf("y=%d",x); if(x>=1&&x<10) printf("y=%d",2*x-1); if(x>=10) printf("y=%d",3*x-11); return 0; }
|
程序分析题


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<stdio.h> int main(void) { int score; printf("请输入你的成绩:"); scanf("%d",&score); if(score<0 || score>100) { printf("成绩输入错误!"); return -1; } score=score/10; switch(score) { case 9: printf("成绩等级为:A\n"); break; case 8: printf("成绩等级为:B\n"); break; case 7: printf("成绩等级为:C\n"); break; case 6: printf("成绩等级为:D\n"); break; default: printf("成绩等级为:E\n"); } return 0; }
|
给一个不多于5位的正整数,要求:
- 求出它是几位数;
- 分别输出每一位数字;
- 按逆序输出各位数字,例如原数为321,应输出123
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include<stdio.h> int main(void) { int num,num_a,num_b,num_c,num_d,num_e; printf("请输入一个0~99999正整数:\n"); scanf("%d",&num); if(num>99999 || num<0) { printf("输入错误!"); return -1; } if(num/10000 != 0) { printf("这是一个五位数\n"); num_a=num/10000; num_b=num%10000/1000; num_c=num%1000/100; num_d=num%100/10; num_e=num%10; printf("分别输出每一位数字:%d,%d,%d,%d,%d\n",num_a,num_b,num_c,num_d,num_e); printf("按逆序输出各位数字:%d",num_e*10000+num_d*1000+num_c*100+num_b*10+num_a); } else if(num/1000 != 0) { printf("这是一个四位数\n"); num_a=num/1000; num_b=num%1000/100; num_c=num%100/10; num_d=num%10; printf("分别输出每一位数字:%d,%d,%d,%d\n",num_a,num_b,num_c,num_d); printf("按逆序输出各位数字:%d",num_d*1000+num_c*100+num_b*10+num_a); } else if(num/100 != 0) { printf("这是一个三位数\n"); num_a=num/100; num_b=num%100/10; num_c=num%10; printf("分别输出每一位数字:%d,%d,%d\n",num_a,num_b,num_c); printf("按逆序输出各位数字:%d",num_c*100+num_b*10+num_a); } else if(num/10 != 0) { printf("这是一个二位数\n"); num_a=num/10; num_b=num%10; printf("分别输出每一位数字:%d,%d\n",num_a,num_b); printf("按逆序输出各位数字:%d",num_b*10+num_a); } else { printf("这是一个一位数\n"); printf("分别输出每一位数字:%d\n",num); printf("按逆序输出各位数字:%d",num); } return 0; }
#include<stdio.h> int main() { int i,j=0,k=0,n; scanf("%d",&n); while(n) { i=n%10; k=k*10+i; j++; n/=10; } printf("%d\n",k); printf("%d位数",j); return 0; }
|




1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| #include<stdio.h> int main(void) { double I,p; printf("请输入当月利润:"); scanf("%lf",&I); if(I<=100000) p=I*0.1; else if(I>100000&&I<=200000) p=100000*0.1+(I-100000)*0.075; else if(I>200000&&I<=400000) p=100000*0.1+100000*0.075+(I-200000)*0.05; else if(I>400000&&I<=600000) p=100000*0.1+100000*0.075+200000*0.05+(I-400000)*0.03; else if(I>600000&&I<=1000000) p=100000*0.1+100000*0.075+200000*0.05+200000*0.03+(I-600000)*0.015; else if(I>1000000) p=100000*0.1+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(I-1000000)*0.01; printf("应发奖金为:%lf",p); return 0; }
#include<stdio.h> int main(void) { double I,bonus,bon1,bon2,bon4,bon6,bon10; int i; printf("请输入当月利润:"); scanf("%lf",&I); bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; i=I/100000; if(i>10)i=10; switch(i) { case 0:bonus=I*0.1;break; case 1:bonus=bon1+(I-100000)*0.075;break; case 2: case 3:bonus=bon2+(I-200000)*0.05;break; case 4: case 5:bonus=bon4+(I-400000)*0.03;break; case 6: case 7: case 8: case 9:bonus=bon6+(I-600000)*0.015;break; case 10:bonus=bon10+(I-1000000)*0.01;break; } printf("应发奖金为:%lf",bonus); return 0; }
|
输入四个整数,要求按从小到大顺序输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #include<stdio.h> int main(void) { int t,a,b,c,d; printf("请输入四个整数:"); scanf("%d%d%d%d",&a,&b,&c,&d); if(a>b) { t=a;a=b;b=t; } if(a>c) { t=a;a=c;c=t; } if(a>d) { t=a;a=d;d=t; } if(b>c) { t=b;b=c;c=t; } if(b>d) { t=b;b=d;d=t; } if(c>d) { t=c;c=d;d=t; } printf("从小到大顺序输出为:%d %d %d %d",a,b,c,d); return 0; }
|
有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,见图4.5.这4个塔的高度为 10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<stdio.h> #include<math.h> int main(void) { double x,y,a,b,c,d; printf("请输入x,y的坐标:"); scanf("%lf,%lf",&x,&y); a=pow((x-2),2)+pow((y-2),2); b=pow((x+2),2)+pow((y-2),2); c=pow((x+2),2)+pow((y+2),2); d=pow((x-2),2)+pow((y+2),2); if(a<=1||b<=1||c<=1||d<=1) printf("该坐标的高度为:10m"); else printf("该坐标的高度为:0m"); return 0; }
|
第五章
请画出三个程序的流程图





输入两个正整数m和n,求其最大公约数和最小公倍数

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
#include<stdio.h> int main(void) { int a,b,x,y; printf("请输入两个正整数:"); scanf("%d%d",&a,&b); for(int i=1;i<=a;++i) { if(a%i==0) if(b%i==0) x=i; } printf("最大公约数是:%d",x); return 0; }
#include<stdio.h> int main(void) { int n,m,p; printf("请输入两个正整数:"); scanf("%d%d",&n,&m); if(n<m) { int temp = m; m = n; n = temp; } p=n*m; while(m!=0) { int r=n%m; n=m; m=r; } printf("最大公约数是:%d",n); printf("最小公倍数是:%d",p/n); return 0; }
|
分解质因数法(求最小公倍数)
先把这几个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积(如果有几个质因数相同,则比较两数中哪个数有该质因数的个数较多,乘较多的次数)。

比如求45和30的最小公倍数。
45=335
30=235
不同的质因数是2。5,3是他们两者都有的质因数,由于45有两个3,30只有一个3,所以计算最小公倍数的时候乘两个3.
最小公倍数等于2335=90
又如计算36和270的最小公倍数
36=2233
270=23335
不同的质因数是5。2这个质因数在36中比较多,为两个,所以乘两次;3这个质因数在270个比较多,为三个,所以乘三次。
最小公倍数等于223335=540
20和40的最小公倍数是40
*公式法
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。即(a,b)×[a,b]=a×b。所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。
例如,求[18,20],即得[18,20]=18×20÷(18,20)=18×20÷2=180。求几个自然数的最小公倍数,可以先求出其中两个数的最小公倍数,再求这个最小公倍数与第三个数的最小公倍数,依次求下去,直到最后一个为止。最后所得的那个最小公倍数,就是所求的几个数的最小公倍数。
输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> int main(void) { int eng_char=0,space_char=0,num_char=0,other_char=0; char c; printf("请输入一行字符:\n"); while((c=getchar())!='\n') { if(c>='a' && c<='z' || c>='A' && c<='Z') eng_char++; else if(c==' ') space_char++; else if(c>='0'&&c<='9') num_char++; else other_char++; } printf("英文字符个数为:%d\n",eng_char); printf("空格个数为:%d\n",space_char); printf("数字个数为:%d\n",num_char); printf("其他个数为:%d\n",other_char); return 0; }
|
求S=a+aa+aaa+·..+aa”a之值,其中a是一个数字,n表示a 的位数n由键盘输人,例如:2+22+222+2222+22222(此时n=5)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h> #include<math.h> int main(void) { int a,n,b=0,S=0; printf("请输入a和n的值:"); scanf("%d%d",&a,&n); for(int i=0;i<n;i++) { b=b+a*pow(10,i); S=S+b; } printf("S的值为:%d",S); return 0; }
|
求1!+2!+3!+4!+…十20!
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h> int main(void) { double b=0; for(int i=1;i<=20;++i) { double a=1; for(int j=1;j<=i;++j) a=a*j; b=b+a; } printf("1!+2!+3!+4!+...十20!=%lf",b); return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h> int main(void) { int k1=0,k2=0; double k3=0,k; for(int i=1;i<=100;++i) k1+=i; for(int i=1;i<=50;++i) k2+=i*i; for(double i=1;i<=10;++i) k3+=1/i; k=k1+k2+k3; printf("所求值为:%lf",k); return 0; }
|
输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h> int main(void) { int a,b,c; for(int i=100;i<1000;++i) { a=i/100; b=i/10%10; c=i%10; if(a*a*a+b*b*b+c*c*c==i) printf("水仙花数为%d\n",i); } return 0; }
|
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6的因子为 1,2,3,而6=1+2+3,因此6是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子: 6 its factors are 1 2 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include<stdio.h> int main(void) { for(int i=1;i<1000;++i) { int a=0; for(int j=1;j<=i/2;++j) { if(i%j==0) a+=j; } if(a==i) { printf("%d its factors are ",i); for(int j=1;j<=i/2;++j) { if(i%j==0) printf("%d ",j); } putchar('\n'); } } return 0; }
|

分析:数列每一项的关系
- 后一项的分子 = 前一项的分子 + 前一项的分母
- 后一项的分母 = 前一项的分子
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include<stdio.h> int main(void) { double a=1,b=2,S=0; for(int i=0;i<20;i++) { double n=b/a; double t=b; b=b+a; a=t; S+=n; } printf("数列前20项之和为:%lf",S); }
|
一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹求它在第10次落地时,共经过多少米,第10次反弹多高。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<stdio.h> int main(void) { double h=100,s=100; for(int i=0;i<10;++i) { h=h/2; s=s+2*h; } printf("第10次反弹高度为:%lf米\n",h); printf("第10次反弹共经过:%lf米",s); return 0; }
|
猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第 2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 10 天早上想再吃时,就只剩一个桃子了。求第1天共摘了多少个
1 2 3 4 5 6 7 8 9 10 11 12
| 第一天:n个桃子 吃了n/2+1个 剩余n/2-1个 #include<stdio.h> int main(void) { double a=1; for(int i=0;i<9;++i) { a=(a+1)*2; } printf("第一天公摘了%lf个桃子",a); return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<stdio.h> #include<math.h> int main(void) { double a,x1,x2; printf("请输入一个数:"); scanf("%lf",&a); x1=a; x2=(x1+a/x1)/2; while(fabs(x1-x2)>=1e-5) { x1=x2; x2=(x1+a/x1)/2; } printf("%lf平方根为:%lf",a,x2); return 0; }
|
牛顿迭代法


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h> #include<math.h> int main() { double x1,x2=1.5,a,f,f1; do { x1=x2; f=2*x1*x1*x1-4*x1*x1+3*x1-6; f1=6*x1*x1-8*x1+3; x2=x1-f/f1; }while(fabs(x2-x1)>=1e-5); printf("方程在1.5附近的根为:%lf",x2); return 0; }
|


输出图案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| #include<stdio.h> int main() { printf(" * \n"); printf(" * * * \n"); printf(" * * * * * \n"); printf("* * * * * * *\n"); printf(" * * * * * \n"); printf(" * * * \n"); printf(" * \n"); return 0; } #include<stdio.h> int main() { int i,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("\n"); } return 0; }
|
两个乒乓球队进行比赛,各出3人。甲队为A,B,C3人,乙队为X,Y,Z3人。已抽签决定比赛名单。有人向队员打听比赛的名单,A 说他不和X比,C说他不和XZ比,请编程序找出3对赛手的名单。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<stdio.h> int main() { int A,B,C; for(char i='X';i<='Z';++i) { A=i; for(char j='X';j<='Z';++j) { if(i!=j) { B=j; for(char k='X';k<='Z';k++) { if(k != i && k!= j) { C=k; if(A!='X'&&C!='X'&&C!='Z') printf("A和%c,B和%c,C和%c比赛\n",A,B,C); } } } } }
return 0; }
|
第六章
用筛选法求100以内的素数


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include<stdio.h> int main(void) { int a[101]; for(int i=1;i<=100;++i) { a[i]=i; } a[1]=0; for(int i=2;i<=100;i++) { for(int j=i;j<=100;j++) { if(a[j+1]%i==0) a[j+1]=0; } } printf("素数分别为:\n"); for(int i=1;i<=100;++i) { if(a[i] != 0) printf("a[%d]=%d\n",i,a[i]); } return 0; }
|
用选择法对10个整数排序

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include<stdio.h> int main(void) { int a[10]; printf("请输入10个数字:\n"); for(int i=0;i<10;i++) { scanf("%d",&a[i]); } for(int j=0;j<10;j++) { for(int i=0;i<10-j;i++) { if(a[i]>a[i+1]) { int b=a[i]; a[i]=a[i+1]; a[i+1]=b; } } } printf("顺序排列为:\n"); for(int i=0;i<10;i++) { printf("%d,",a[i]); } return 0; }
|
求一个3×3的整型矩阵对角线之和
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<stdio.h> int main(void) { int a[3][3]; printf("请输入矩阵元素:\n"); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]); putchar('\n'); } } printf("矩阵对角线之和为:%d",a[0][0]+a[1][1]+a[2][2]); return 0; }
|
有一个排好序的数组,要求输入一个数后,按原来的规律将他插入数组中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include<stdio.h> int main(void) { int b,a[]={7,13,25,37,49},d; d=sizeof(a) printf("请输入一个数字:"); scanf("%d",b); for(int i=0;i<d;i++) { if(b<a[i]) { for(int j=d;j>=i;j--) { a[j+1]=a[i]; } } a[i]=b; break; } for(int i=0;i<d;i++) { printf("a[%d]=%d\n",i,a[i]); } return 0; }
|
将一个数组中的值按逆序重新存放。例如,原来顺序为 8,6,5,4,1,要求改为1,4,5,6,8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<stdio.h> int main(void) { int a[5]; printf("请输入五个数字:\n"); for(int i=0;i<5;i++) { scanf("%d",&a[i]); } for(int i=0;i<5;i++) { for(int i=0;i<5-i;i++) { if(a[i]>a[i+1]) { int b=a[i+1]; a[i+1]=a[i]; a[i]=b; } } } printf("逆序输出为:"); for(int i=0;i<5;i++) { printf(" %d ",a[i]); } }
|
输出杨辉三角

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include<stdio.h> #define N 10 int main(void) { int a[N][N]={0}; a[0][0]=1; for(int i=1;i<N;i++) { for(int j=0;j<N;j++) { a[i][0]=1; a[i][j+1]=a[i-1][j]+a[i-1][j+1]; } } for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { if(a[i][j]!=0) { printf(" %d ",a[i][j]); } } putchar('\n'); } return 0; }
|
输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为,要求求出1~n2的自然数构成的方阵
8 1 6
3 5 7
4 9 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include<stdio.h> #define N 15 int main(void) { int b,row=0,col,prerow,precol; printf("请输入奇数阶魔方阵的阶数:\n"); scanf("%d",&b); if(b%2==0) { printf("您输入的数不是奇数"); return 0; } int a[b][b]={0}; col=b/2; a[row][col]=1; for(int i=2;i<=b*b;i++) { row--; col++; if(row<0) row=b-1; if(col>=b) col=0; if(a[row][col]!=0) { row=prerow+1; col=precol; } a[row][col]=i; prerow=row; precol=col; } printf("%d阶魔方阵为:\n",b); for(int i=0;i<b;i++) { for(int j=0;j<b;j++) { printf("%4d",a[i][j]); } putchar('\n'); } return 0; }
|
找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<stdio.h> #define N 5 int main() { int a[N][N],b=1,maxcol=0,minrow=0,max=0,min=0,maxrow; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { a[i][j]=b; b++; } for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { if(a[i][j]>max) { maxcol=j; maxrow=i; max=a[i][j]; } } for(int j=0;j<N;j++) { if(a[j][maxcol]<min) { minrow=j; min=a[j][maxrow]; } } if(maxrow==minrow) { printf("鞍点为:a[%d][%d]=%d\n",minrow,maxcol,a[minrow][maxcol]); } } return 0; } }
|
有 15 个数按由小到大顺序存放在一个数组中,输人一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| #include<stdio.h> #define N 9 int main(void) { int a[N],b,right,left,mid,find,flag=1; char c; printf("数组下标从0~14\n"); printf("请由小到大输入数据:\n"); scanf("%d",&a[0]); for(int i=1;i<N;i++) { scanf("%d",&a[i]); if(a[i]<a[i-1]) { printf("输入错误,请重新输入!"); return 0; } } while(flag) { right=N; left=0; find=0; printf("请输入你想查找的数字:\n"); scanf("%d",&b); while(left<right) { mid = (right+left)/2; if(b==a[mid]) { find=1; break; } else if(b<a[mid]) right=mid; else if(b>a[mid]) left=mid+1; } if(find) printf("所查找的数组元素下表为:%d\n",mid); else printf("没有查到该元素下标\n"); printf("是否继续查找:(Y/N)?"); scanf(" %c",&c); if(c=='N'||c=='n') flag=0; } return 0; }
|
.有一篇文章,共有3行文字,每行有 80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include<stdio.h> int main(void) { char c[3][80]; int upp=0,low=0,dig=0,spa=0,oth=0; for(int i=0;i<3;i++) { printf("请输入第%d行字符:\n",i+1); gets(c[i]); break; } for(int i=0;i<3;i++) { for(int j=0;c[i][j]!='\0';j++) { if(c[i][j]>='A'&& c[i][j]<='Z') upp++; else if(c[i][j]>='a'&&c[i][j]<='z') low++; else if(c[i][j]>='0' && c[i][j]<='9') dig++; else if(c[i][j]==' ') spa++; else oth++; } } printf("大写英文字母有:%d个\n",upp); printf("小写英文字母有:%d个\n",low); printf("数字有:%d个\n",dig); printf("空格有:%d个\n",spa); printf("其它字符有:%d个",oth); return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include<stdio.h> int main(void) { char c[5]={'*','*','*','*','*'}; char space=' '; for(int i=0;i<5;i++) { for(int j=0;j<i;j++) printf("%c",space); for(int j=0;j<5;j++) printf("%c",c[i]); printf("\n"); } return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include<stdio.h> int main(void) { char c[30];
printf("请输入密码:\n"); gets(c); printf("输入的密码:\n"); for(int i=0;c[i]!='\0';i++) { printf("%c",c[i]); } for(int i=0;c[i]!='\0';i++) { if(c[i]>='A'&&c[i]<='Z') c[i]=26-(c[i]-64)+1+64; if(c[i]>='a'&&c[i]<='z') c[i]=26-(c[i]-96)+1+96; } putchar('\n'); printf("原文内容为:\n"); for(int i=0;c[i]!='\0';i++) { printf("%c",c[i]); } return 0; }
|
编一程序,将两个字符串连接起来,不要用strcat函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include<stdio.h> int main(void) { char a[20],b[10]; int i=0,j=0; printf("请输入字符串a: \n"); gets(a); printf("请输入字符串b: \n"); gets(b); while(a[i]!='\0') i++; while(b[j]!='\0') a[i++]=b[j++]; a[i]='\0'; printf("连接后的字符串是:%s",a); return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<stdio.h> #define N 15 int main() { char s1[N],s2[N]; int a=0; printf("请输入字符串s1 s2\n"); gets(s1); gets(s2); for(int i=0;s1[i]!='\0';i++) { if(s1[i]>s2[i]) a=a+s1[i]-s2[i]; if(s1[i]<s2[i]) a=a+s1[i]-s2[i]; } printf("两个字符串的差值是:%d",a); return 0; }
|
编写一个程序,将字符数组 s2 中的全部字符复制到字符数组 s1中。不用 strcpy函数。复制时,0也要复制过去。0’后面的字符不复制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #include<stdio.h> #include<string.h> #define N 15 int main() { char s1[N],s2[N]; printf("请输入字符串s2 \n"); gets(s2); for(int i=0;i<=strlen(s2);i++) { s1[i]=s2[i]; } printf("字符串s1为:%s",s1); return 0; }
|
第七章
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<stdio.h> int divisor(int a,int b) { int x,y; if(a>b) x=b; else x=a; for(int i=1;i<=x;i++) { if(a%i==0&&b%i==0) y=i; } return y; } int multiple(int a,int b) { int k; k=a*b/divisor(a,b); return k; } int main() { int a,b; printf("请输入两个整数:\n"); scanf("%d%d",&a,&b); divisor(a,b); printf("最大公约数为:%d",divisor(a,b)); printf("最小公倍数为:%d",multiple(a,b)); return 0; }
|
求方程ax2+bz+c=0的根,用3个函数分别求当:b*b-4ac 大于0、等于0和小于0时的根并输出结果。从主函数输入a,b,c的值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include<stdio.h> #include<math.h> double d,x1,x2,p,q; void dayu(int a,int b) { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); } void dengyu(double a,double b) { x1=(-b)/(2*a); } void xiaoyu(double a,double b) { p=(-b)/(2*a); q=sqrt(-d)/2*a; } int main() {
double a,b,c; printf("请输入a、b、c的值:\n"); scanf("%lf%lf%lf",&a,&b,&c); d=b*b-4*a*c; if(d>0) { dayu(a,b); printf("方程有两个实根:x1=%lf,x2=%lf",x1,x2); } else if(d==0) { dengyu(a,b); printf("方程有一个根:x1=%lf", x1); } else { xiaoyu(a,b); printf("方程有两个复数根:x1=%lf+%lfi,x2=%lf-%lfi",p,q,p,q); } return 0; }
|
写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> int b=1; int main() { int sushu(int); int a; printf("请输入一个整数:\n"); scanf("%d",&a); sushu(a); if(b) printf("%d是素数",a); else printf("%d不是素数",a); return 0; } void sushu(int a) { for(int i=2;i<=a/2;i++) { if(a%i==0) b=0; } }
|
写一个函数,使给定的一个3×3的二维整形数组转置,即行列互换。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include<stdio.h> int main() { void add(int a[3][3]); void zhuanzhi(int a[3][3]); void input(int a[3][3]); int a[3][3]; add(a); zhuanzhi(a); input(a); return 0; } void add(int a[3][3]) { printf("请输入数组元素值:\n"); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { scanf("%d",&a[i][j]); } } } void zhuanzhi(int a[3][3]) { int x; for(int i=0;i<2;i++) { for(int j=i;j<3;j++) { x=a[i][j]; a[i][j]=a[j][i]; a[j][i]=x; } } } void input(int a[3][3]) { printf("转置之后的数组为:\n"); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { printf("%d",a[i][j]); } putchar('\n'); } }
|
写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #include<stdio.h> #include<string.h> #define N 15 int main() { void fanxu(char a[],int); char a[N]; printf("请输入字符串:\n"); gets(a); int size = strlen(a); fanxu(a,size); printf("反序后的字符串为:\n"); printf("%s",a); return 0; } void fanxu(char a[],int size) { for(int i=0;i<size;i++) { size--; if(i!=size) { int t=a[i]; a[i]=a[size]; a[size]=t; } } }
|
写一个函数,将两个字符串连接。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> #include<string.h> #define N 30 #define M 15 int main() { void lianjie(char a[],char b[]); char a[N],b[M]; printf("请输入字符串a:"); gets(a); printf("请输入字符串b:"); gets(b); lianjie(a,b); printf("连接后的字符串为:%s",a); return 0; } void lianjie(char a[],char b[]) { int length=strlen(a); for(int i=0;b[i]!='\0';i++) { a[i+length]=b[i]; } }
|
写一个函数,将一个字符中的元音字母复制到另一字符串,然后输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<stdio.h> #include<string.h> #define N 30 #define M 15 int main() { void yuanyin(char a[],char b[]); char a[N],b[M]; printf("请输入字符串:"); gets(a); yuanyin(a,b); printf("输出获得的元音字母:%s",b); return 0; } void yuanyin(char a[],char b[]) { int j=0; for(int i=0;a[i]!='\0';i++) { if(a[i]=='A'||a[i]=='E'||a[i]=='I'||a[i]=='O'||a[i]=='a'||a[i]=='e'||a[i]=='i'||a[i]=='o'||a[i]=='u'||a[i]=='U') { b[j]=a[i]; j++; } } b[j]='\0'; }
|
写一个函数,输人一个4位数字,要求输出这4个数字字符,但每两个数字间空一个空格。如输人1990,应输出“1 9 9 0”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include<stdio.h> #include<string.h> #define N 50 int main() { void span(char a[]); char a[N]; printf("请输入数字:"); gets(a); span(a); printf("%s",a); return 0; } void span(char a[]) { int lenth = strlen(a); for(int i=lenth-1;i>0;i--) { a[2*i]=a[i]; a[2*i-1]=' '; } }
|
编写一个函数,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include<stdio.h> #define N 50 int zimu=0,num=0,span=0,other=0; int main() { void tongji(char a[]); char a[N]; printf("请输入字符串:"); gets(a); tongji(a); printf("字母个数为:%d",zimu); printf("数字个数为:%d",num); printf("空格个数为:%d",span); printf("其他字符为:%d",other); return 0; } void tongji(char a[]) { for(int i=0;a[i]!='\0';i++) { if(a[i]>='A' && a[i]<='Z') zimu++; else if(a[i]>='a'&&a[i]<='z') zimu++; else if(a[i]>='0'&&a[i]<='9') num++; else if(a[i]==' ') span++; else other++; } }
|
写一个函数,输入一行字符,将此字符串中最长的单词输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include<stdio.h> #define N 50 #define M 50 int main() { void len(char a[],char b[]); char a[N],b[M]; printf("请输入一行字符串:"); gets(a); len(a,b); printf("最长的单词是:%s",b); return 0; } void len(char a[],char b[]) { int x=0,size=0; for(int i=0;a[i]!='\0';i++) { if(a[i]!=' ') size++; else if(size>x) { x=size; for(int j=0;j<x;j++) { b[j]=a[i-x+j]; } size=0; } } }
|
写一个函数,用”起泡法”对输入的10个字符按由小到大顺序排列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<stdio.h> #define N 10 int main() { void sort(char a[]); char a[N]; printf("请输入10个字符:\n"); gets(a); sort(a); printf("排序后的字符为:"); for(int i=0;i<N;i++) printf("%c",a[i]); return 0; } void sort(char a[]) { for(int i=0;i<N;i++) for(int j=0;j<N-i-1;j++) { if(a[j]>a[j+1]) { char x=a[j]; a[j]=a[j+1]; a[j+1]=x; } } }
|
用牛顿选代法求根。方程为ax3+bx2+cx+d=0,系数a,b,c,d的值依次为1,2,3,4,由主函数输人。求x在1附近的一个实根。求出根后由主函数输出。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> #include<math.h> int main() { double gen(int,int,int,int); int a,b,c,d; printf("请分别输入a,b,c,d的值:"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("x在1附近的一个实根为:%lf",gen(a,b,c,d)); return 0; } double gen(int a,int b,int c,int d) { double f,f1,x=1,x0=0; while(fabs(x-x0)>=1e-3) { x0=x; f=a*x0*x0*x0+b*x0*x0+c*x0+d; f1=3*a*x0*x0+2*b*x0+c; x=x-f/f1; } return x; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<stdio.h> int main() { double p(double,double); int n,x; printf("请输入n和x的值:"); scanf("%d%d",&n,&x); printf("P%d(%d)=%lf",n,x,p(n,x)); return 0; } double p(double n,double x) { if(n==0) return 1; else if(n==1) return x; else if(n>1) return ((2*n-1)*x-p(n-1,x)-(n-1)*p(n-2,x))/n; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| #include<stdio.h> #define N 10 #define M 5 int main() { void average(double a[][M],double aver[]); void avercourse(double a[][M],double avcourse[]); double cha(double aver[]); void max(double a[][M]); double a[N][M]; double aver[N],avcourse[M]; for(int i=0;i<N;i++) { printf("请输入学生%d的成绩:",i+1); for(int j=0;j<M;j++) { scanf("%lf",&a[i][j]); } putchar('\n'); } average(a,aver); for(int i=0;i<N;i++) { printf("学生%d的平均分是:%lf\n",i+1,aver[i]); } avercourse(a,avcourse); for(int i=0;i<M;i++) { printf("第%d门课平均分是:%lf\n",i+1,avcourse[i]); } max(a);
printf("平均值的方差为:%lf",cha(aver)); return 0; } void average(double a[][M],double aver[]) { for(int i=0;i<N;i++) { double x=0; for(int j=0;j<M;j++) { x=x+a[i][j]; } aver[i]=x/M; } } void avercourse(double a[][M],double avcourse[]) { for(int i=0;i<M;i++) { double x=0; for(int j=0;j<N;j++) { x=x+a[j][i]; } avcourse[i]=x/N; } } void max(double a[][M]) { double t=0; int x,y; for(int i=0;i<N;i++) { for(int j=0;j<M;j++) { if(a[i][j]>t) { t=a[i][j]; x=i; y=j; } } } printf("最高分数对应的学生和课程为:%lf %d %d\n",t,x+1,y+1); } double cha(double aver[]) { double sum=0,sum2=0; for(int i=0;i<N;i++) { sum+=aver[i]*aver[i]; sum2+=aver[i]; } return(sum/N-(sum2/N)*(sum2/N)); }
|
写几个函数:
①输人10个职工的姓名和职工号;
②按职工号由小到大顺序排序,姓名顺序也随之调整;
③要求输人一个职工号,用折半查找法找出该职工的姓名,从主函数输人要查找的职工号,输出该职工姓名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include<stdio.h> #include<string.h> #define N 10 int main() { void sort(char name[N][8],int num[N]); void search(char name[N][8],int num[N],int b); char name[N][8]; int num[N],b; for(int i=0;i<N;i++) { printf("请输入第%d个员工的职工号和姓名:\n",i+1); scanf("%d",&num[i]); getchar(); gets(name[i]); } sort(name,num); printf("请输入想要查找的值:"); scanf("%d",&b); search(name,num,b); return 0; } void sort(char name[N][8],int num[N]) { char u[8]; int t; for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { if(num[j]>num[j+1]) { t=num[j]; num[j]=num[j+1]; num[j+1]=t; strcpy(u,name[j]); strcpy(name[j],name[j+1]); strcpy(name[j+1],u); } } } printf("排序后\n"); for(int i=0;i<N;i++) { printf("第%d个员工的职工号和姓名为:",i+1); printf("%d %s",num[i],name[i]); putchar('\n'); } }
void search(char name[N][8],int num[N],int b) { int left=0,right=N,flag=0; int mid=N/2; while(left<=right) { mid=(left+right)/2; if(num[mid]==b) { flag=1; break; } else if(num[mid]>b) { right=mid-1; } else if(num[mid]<b) left=mid+1; } if(flag) { printf("所查找的员工工号和姓名为:%d %s",num[mid],name[mid]); } else printf("没有查找到"); }
|
写一个函数,输人一个十六进制数,输出相应的十进制数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include<stdio.h> #include<string.h> #include<math.h> #define N 50 int main() { double zhuan(char a[]); char a[N]; printf("请输入一个十六进制的数:"); gets(a); int i=0; while(a[i]!='\0') { if((a[i]<='9' && a[i]>='0') || (a[i]<='F' && a[i]>='A') || (a[i]<='f' && a[i]>='a')) {} else { printf("输入的数据不符合16进制"); return 0; } i++; } printf("对应的十进制数为:%lf",zhuan(a)); return 0; } double zhuan(char a[]) { double x=0; int length=strlen(a); printf("%d\n",length); for(int i=0;a[i]!='\0';i++) { printf("%d\n",a[i]); if(a[i]<='9' && a[i]>='0') x=x+(a[i]-'0')*pow(16,length-1); if(a[i]<='F' && a[i]>='A') x=x+(a[i]-'A'+10)*pow(16,length-1); if(a[i]<='f' && a[i]>='a') x=x+(a[i]-'a'+10)*pow(16,length-1); length--; } return x; }
|
用递归法将一个整数n转换成字符串。例如输人483,应输出字符串”483”。n的位数不确定,可以是任意位数的整数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include<stdio.h> int main() { void digui(int a); int a; printf("请输入一个整数:"); scanf("%d",&a); if(a<0) { putchar('-'); putchar(' '); a=-a; } digui(a); return 0; } void digui(int a) { int i; if((i=a/10)!=0) digui(i); printf("%c",a%10+'0'); putchar(32); }
|
给出年、月、日,计算该日是该年的第几天。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<stdio.h> int main() { int run(int,int); int days(int,int); int year, month, day,flage=0; printf("请输入年,月,日: "); scanf("%d %d %d",&year,&month,&day); if(run(year,flage)&&month>3) printf("该日是该年的第%d天",days(month,day)+1); else printf("该日是该年的第%d天",days(month,day)); return 0; } int run(int year,int flage) { if((year%4==0 && year%100!=0)||year%400==0) flage=1; return flage; } int days(int month,int day) { int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; for(int i=0;i<month;i++) day=day+a[i]; return day; }
|
判断所输入的日期是否正确
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<stdio.h> int main() { int year, month, day; printf("请输入年,月,日: "); scanf("%d %d %d",&year,&month,&day); if(month<=0||month>12) { printf("月份输入错误"); return 0; }else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { if(day<0||day>31) { printf("输入的月份对应的天分错误"); return 0; } }else if(month==2) { if((year%4==0 && year%100!=0)||year%400==0) { if(day>29) { printf("输入的月份对应的天分错误"); return 0; } }else{ if(day>28) { printf("输入的月份对应的天分错误"); return 0; } } }else if(day>30) { printf("输入的月份对应的天分错误"); return 0; } return 0; }
|
第八章
本章习题均要求用指针方法处理
输入三个整数,按由小到大的顺序输出。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<stdio.h> int main() { void compare(int *P); int a[3]; int *p=a; printf("请输入三个整数:"); for(int i=0;i<3;i++) scanf("%d",&*(p+i)); compare(p); printf("从小到大的顺序为:\n"); for(int i=0;i<3;i++) printf("%d\n",*(p+i)); return 0; } void compare(int *p) { for(int i=0;i<2;i++) { for(int j=0;j<3-i;j++) { if(*(p+j)>*(p+j+1)) { int t=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=t; } } } }
|
输入3个字符串,按由小到大的顺序输出。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<stdio.h> #include<string.h> #define N 50 int main() { void swap(char *p1,char *p2); char a[N],b[N],c[N]; printf("请输入字符串a:"); gets(a); printf("请输入字符串b:"); gets(b); printf("请输入字符串c:"); gets(c); if(strcmp(a,b)>0) swap(a,b); if(strcmp(a,c)>0) swap(a,c); if(strcmp(b,c)>0) swap(b,c); printf("字符串由大到小输出:\n%s\n%s\n%s",a,b,c); return 0; } void swap(char *p1,char *p2) { char p[50]; strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); }
|
输人10个整数,将其中最小的数与第1个数对换,把最大的数与最后一个数对换写3个函数:①输入10个数;②进行处理;③输出10个数。

arr表示地址 *arr表示该地址对应的值

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include<stdio.h> #include<string.h> #define N 10 int main() { void input(int *a); void swap(int *a); void output(int *a); int a[N]; input(a); swap(a); output(a); return 0; } void input(int *a) { printf("请输入10个整数:\n"); for(int i=0;i<N;i++) { scanf("%d",a+i); } } void swap(int *a) { int *max,*min,*p, t; max=min=a; for(p=a+1;p<a+10;p++) { if(*p>*max) max=p; else if(*p<*min) min=p; } t=a[0]; a[0]=*min; *min=t; if(*min==*max) max=min; t=a[9]; a[9]=*max; *max=t; } void output(int *a) { printf("交换后:\n"); for(int i=0;i<N;i++) printf("%d",*(a+i)); }
|


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include<stdio.h> #define N 10 #define M 4 int main() { void input(int *a); void swap(int *a); void output(int *a); int a[N]; input(a); swap(a); output(a); return 0; } void input(int *a) { printf("请输入10个整数:\n"); for(int i=0;i<N;i++) { scanf("%d",a+i); } } void swap(int *a) { int *p, t; for(int i=0;i<N-M;i++) { for(p=a+N-M-1-i;p<a+9-i;p++) { t=*p; *p=*(p+1); *(p+1)=t; } } } void output(int *a) { printf("交换后:\n"); for(int i=0;i<N;i++) printf("%d ",*(a+i)); }
|
n个人围成一圈顺序排号。从第1个人开始报数(从1到3报数)凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include<stdio.h> #define N 50 int main() { int baoshu(int *a,int b); int a[N],b; printf("请输入报数人数:"); scanf("%d",&b); baoshu(a,b); return 0; } void baoshu(int *a,int b) { int *p; p=a; int i=1; int c=b; while(c!=1) { for(int j=1;j<=b;j++) { if(*(p+j)==3) continue; *(p+j)=i; if(i==3) { i=0; c--; } i++; } } for(int j=1;j<=b;j++) { if(*(p+j)!=3) { printf("最后留下的是原来第%d号",j); break; } } }
|
写一个函数,求一个字符串的长度。在main函数中输入字符串,并求出其长度。
1 2 3 4 5 6 7 8 9 10 11
| #include<stdio.h> #include<string.h> #define N 50 int main() { char a[N]; printf("请输入字符串:"); gets(a); printf("该字符串长度为:%d",strlen(a)); return 0; }
|
有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include<stdio.h> #include<string.h> #define N 50 int main() { void copy(char *a,int m); char a[N]; int m; printf("请输入字符串:"); gets(a); printf("请输入从第几个字符开始的全部字符复制:"); scanf("%d",&m); copy(a,m); return 0; } void copy(char *a,int m) { char *p; p=a; char b[20]; int j=0; for(int i=m-1;a[i]!='\0';i++) { b[j]=*(p+i); j++; } b[j]='\0'; printf("复制后的字符串为:"); for(j=0;b[j]!='\0';j++) { printf("%c",b[j]); } }
|
输入一行文字,找出其中的大写字母、小写字母、空格、数字以及其他字符各有多少。

1 2 3 4 5
| #include<stdio.h> int main() { int printf("请输入一行字符:");
|
写一个函数,将一个3×3的整型矩阵置换。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| #include<stdio.h> int main() { int a[3][3]; int *p; p=&a[0][0]; printf("请输入数组的元素:"); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { scanf("%d",&a[i][j]); } } for(int i=0;i<3;i++) { for(int j=i;j<3;j++) { int t=*(p+3*i+j); *(p+3*i+j)=*(p+3*j+i); *(p+3*j+i)=t; } } printf("置换后的数组为:\n"); for(int i=0;i<3;i++) { printf("%d %d %d",a[i][0],a[i][1],a[i][2]); putchar('\n'); } return 0; }
#include<stdio.h> int main() { int a[3][3]; printf("请输入数组的元素:"); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { scanf("%d",*(a+i)+j); } } for(int i=0;i<3;i++) { for(int j=i;j<3;j++) { int t=*(*(a+i)+j); *(*(a+i)+j)=*(*(a+j)+i); *(*(a+j)+i)=t; } } printf("置换后的数组为:\n"); for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { printf("%d",*(*(a+i)+j)); } putchar('\n'); } return 0; }
|
将一个5X5的矩阵中最大的元素放在中心,4 个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main 函数调用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| #include<stdio.h> int main() { void swap(int *p); int a[5][5]; int *p; p=&a[0][0]; printf("请输入数组的元素:\n"); for(int i=0;i<5;i++) { scanf("%d %d %d %d %d",&a[i][0],&a[i][1],&a[i][2],&a[i][3],&a[i][4]); } swap(p); printf("转换后的数组为:\n"); for(int i=0;i<5;i++) { printf("%d %d %d %d %d\n",a[i][0],a[i][1],a[i][2],a[i][3],a[i][4]); } return 0; } void swap(int *p) { int *pmax,*pmin,temp; pmax=p; pmin=p; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { if(*pmax<*(p+5*i+j)) { pmax=(p+5*i+j); } if(*pmin>*(p+5*i+j)) { pmin=(p+5*i+j); } } } temp=*(p+12); *(p+12)=*pmax; *pmax=temp; temp=*p; *p=*pmin; *pmin=temp; pmin=p+1; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { if((*(p+5*i+j)!=*p)&&(*(p+5*i+j)<*pmin)) { pmin=(p+5*i+j); } } } temp=*(p+4); *(p+4)=*pmin; *pmin=temp; pmin=p+1; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { if((*(p+5*i+j)!=*(p+4))&&(*(p+5*i+j)!=*p)&&(*(p+5*i+j)<*pmin)) { pmin=(p+5*i+j); } } } temp=*(p+20); *(p+20)=*pmin; *pmin=temp; pmin=p+1; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { if((*(p+5*i+j)!=*(p+20))&&(*(p+5*i+j)!=*(p+4))&&(*(p+5*i+j)!=*p)&&(*(p+5*i+j)<*pmin)) { pmin=(p+5*i+j); } } } temp=*(p+24); *(p+24)=*pmin; *pmin=temp; }
|
在主函数中输入10个等长的字符串,用另一函数对他们进行排序。然后在主函数输出这10个已排好的字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include<stdio.h> #include<string.h> #define N 10 int main() { void swap(char a[][50]); char a[N][50]; for(int i=0;i<N;i++) { printf("请输入第%d字符串:",i+1); gets(a[i]); } swap(a); printf("排序后的字符串为:\n"); for(int i=0;i<N;i++) { printf("%s\n",a[i]); } return 0; } void swap(char a[][50]) { for(int i=0;i<N;i++) { for(int j=0;j<N-i-1;j++) { if(strcmp(a[j],a[j+1])>0) { char t[20]; strcpy(t,a[j]); strcpy(a[j],a[j+1]); strcpy(a[j+1],t); } } } }
#include<stdio.h> #include<string.h> #define N 10 int main() { void swap(char (*p)[50]); char a[N][50]; char (*p)[50]; p=a; for(int i=0;i<N;i++) { printf("请输入第%d字符串:",i+1); gets(p[i]); } swap(p); printf("排序后的字符串为:\n"); for(int i=0;i<N;i++) { printf("%s\n",p[i]); } return 0; } void swap(char (*p)[50]) { char temp[20],*t; t=temp; for(int i=0;i<N;i++) { for(int j=0;j<N-i-1;j++) { if(strcmp(p[j],p[j+1])>0) { strcpy(t,p[j]); strcpy(p[j],p[j+1]); strcpy(p[j+1],t); } } } }
|
用指针数组处理上一题目
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include<stdio.h> #include<string.h> #define N 10 int main() { void swap(char (*p)[50]); char a[N][50]; char (*p)[50]; p=a; for(int i=0;i<N;i++) { printf("请输入第%d字符串:",i+1); gets(*(p+i)); } swap(p); printf("排序后的字符串为:\n"); for(int i=0;i<N;i++) { printf("%s\n",*(p+i)); } return 0; } void swap(char (*p)[50]) { char temp[20],*t; t=temp; for(int i=0;i<N;i++) { for(int j=0;j<N-i-1;j++) { if(strcmp(*(p+j),*(p+j+1))>0) { strcpy(t,*(p+j)); strcpy(*(p+j),*(p+j+1)); strcpy(*(p+j+1),t); } } } }
|


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include<stdio.h> #include<math.h> int main() { float fsin(float x); float fcos(float x); float fexp(float x); float dfx(float a,float b,float (*p)(float)); float (*p)(float); float a1,b1,a2,b2,a3,b3;
printf("请输入a1,b1: "); scanf("%f,%f",&a1,&b1); printf("请输入a2,b2: "); scanf("%f,%f",&a2,&b2); printf("请输入a3,b3: "); scanf("%f,%f",&a3,&b3); p=fsin; printf("sinx的积分为:%f\n",dfx(a1,b1,p)); p=fcos; printf("cosx的积分为:%f\n",dfx(a2,b2,p)); p=fexp; printf("ex的积分为:%f",dfx(a3,b3,p)); return 0; } float dfx(float a,float b,float (*p)(float)) { int count=20; float length=(b-a)/count; float x=a,S=0; for(int i=1;i<=count;i++) { x=x+length; float height = (*p)(x); S=S+height*length; } return S; }
float fsin(float x) { return (sin(x)); } float fcos(float x) { return (cos(x)); } float fexp(float x) { return (exp(x)); }
|
将n个数按输入时顺序的逆序排列,用函数实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<stdio.h> int main() { int n; printf("输入你要输入数据的个数:"); scanf("%d",&n); int a[n]; printf("请输入%d个数据:\n",n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); } printf("逆序排出:\n"); for(int i=0;i<n;i++) { printf("%d\n",a[i]); } return 0; }
|
有一个班4个学生,5门课程。①求第1门课程的平均分;②找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90分以上或全部课程成绩在 85分以上的学生。分别编3个函数实现以上3个要求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| #include<stdio.h> #define N 4 #define M 5 int main() { double avge(double stu[][M]); void fail(int stu[N],double couse[][M],double avgescore[N]); void find(int stu[N],double couse[N][M],double avgescore[N]); int stu[N]; double couse[N][M]; double avgescore[N]; for(int j=0;j<N;j++) { printf("请输入第%d个学生的学号: ",j+1); scanf("%d",&stu[j]); } for(int i=0;i<N;i++) { printf("请输入第%d个学生的成绩: \n",i+1); for(int j=0;j<M;j++) { scanf("%lf",&couse[i][j]); } } for(int i=0;i<N;i++) { double s=0; for(int j=0;j<M;j++) { s=s+couse[i][j]; } avgescore[i]=s/M; } printf("第一门课程的平均分是:%lf",avge(couse)); fail(stu,couse,avgescore); find(stu,couse,avgescore); return 0; } double avge(double couse[][M]) { double S=0; for(int i=0;i<N;i++) S=S+couse[i][0]; double avg=S/N; return avg; } void fail(int stu[N],double couse[][M],double avgescore[N]) { printf("\n 有两门以上课程不及格的学生: \n"); for(int i=0;i<N;i++) { int t=0; for(int j=0;j<M;j++) { if(couse[i][j]<60) { t++; if(t>=2) { printf("学生的学号为: %d",stu[i]); printf("全部课程成绩: %lf %lf %lf %lf %lf",couse[i][0],couse[i][1],couse[i][2],couse[i][3],couse[i][4]); printf("学生的平均成绩为: %lf",avgescore[i]); } } } } } void find(int stu[N],double couse[N][M],double avgescore[N]) { printf("\n 平均成绩在90分以上或全部课程成绩在 85分以上的学生: \n"); for(int i=0;i<N;i++) { if(avgescore[i]>90) { printf("学生的学号为: %d\n",stu[i]); printf("全部课程成绩: %lf %lf %lf %lf %lf\n",couse[i][0],couse[i][1],couse[i][2],couse[i][3],couse[i][4]); printf("学生的平均成绩为: %lf\n",avgescore[i]); }else if(couse[i][0]>85 && couse[i][1]>85&&couse[i][2]>85&&couse[i][3]>85&&couse[i][4]>85) { printf("学生的学号为: %d\n",stu[i]); printf("全部课程成绩: %lf %lf %lf %lf %lf\n",couse[i][0],couse[i][1],couse[i][2],couse[i][3],couse[i][4]); printf("学生的平均成绩为: %lf\n",avgescore[i]); } } }
|
输人一个字符串,内有数字和非数字字符,例如:A123x45617960?302tab5876将其中连续的数字作为一个整数,依次存放到一数组 a 中。例如,123 放在 a[0],456 放在a[1].·····统计共有多少个整数,并输出这些数。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include<stdio.h> #define N 50 int main() { int num(char c[],char a[][10]); char c[N]; char a[10][10]; printf("请输入字符串:"); fgets(c,1023,stdin); int leng=num(c,a); printf("输出整数:\n"); for(int i=0;i<leng;i++) { printf("%s\n",a[i]); } return 0; } int num(char c[],char a[][10]) { char *p=c; int row=0,col=0; while(*p!='\0') { if(*p>='0'&&*p<='9') { while(*p!='\0'&&*p>='0'&&*p<='9') { a[row][col]=*p; col++; p++; } a[row][col]='\0'; row++; col=0; if(*p=='\0') break; } p++; } return row; }
|
编一程序,输人月份号,输出该月的英文月名。例如,输入3,则输出March,要求用指针数组处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<stdio.h> int main() { char *month[]={ NULL, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", }; int input; printf("请输入月份:"); scanf("%d",&input); if(input<=0||input>12) { printf("输入错误!"); return -1; }else { printf("%d对应的月份是:%s",input,*(month+input)); } return 0; }
|

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #include<stdio.h> #include<stdlib.h> int main() { int n; printf("请输入n的数:"); scanf("%d",&n); int *p=(int *)malloc(sizeof(int)*n); printf("请输入%d个数:",n); for(int i=0;i<n;i++) { scanf("%d",p+i); } printf("输出输入的数:\n"); for(int i=0;i<n;i++) { printf("%d\n",*(p+i)); } free(p); return 0; }
|
用指向指针的指针的方法对5个字符串排序并输出。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include<stdio.h> #include<string.h> #define N 5 int main() { void sort(char **p); char a[N][20],**p; for(int i=0;i<N;i++) { printf("第%d个字符串为:",i+1); gets(a[i]); } char *t[N]; for(int i=0;i<N;i++) { t[i]=a[i]; } p=t; sort(p); printf("排序后的字符串为:\n"); for(int i=0;i<N;i++) { printf("%s\n",*(t+i)); } return 0; } void sort(char **p) { char *temp; for(int j=0;j<N;j++) { for(int i=0;i<N-j-1;i++) { if((strcmp(*(p+i),*(p+i+1)))>0) { temp=*(p+i); *(p+i)=*(p+i+1); *(p+i+1)=temp; } } } }
|
用指向指针的指针的方法对 n个整数排序并输出。要求将排序单独写成一个函数。n个整数在主函数中输入,最后在主函数中输出。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include<stdio.h> int main() { void sort(int **p,int n); int n; printf("请输入n的数为:"); scanf("%d",&n); int a[n],*t[n],**p; for(int i=0;i<n;i++) t[i]=&a[i]; printf("请输入%d个数:\n",n); for(int i=0;i<n;i++) scanf("%d",t[i]); p=t; sort(p,n); printf("排序后的数为:\n"); for(int i=0;i<n;i++) printf("%d\n",*t[i]); return 0; } void sort(int **p,int n) { int *t; for(int i=0;i<n;i++) { for(int j=0;j<n-i-1;j++) { if(**(p+j)>**(p+j+1)) { t=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=t; } } } }
|
第九章
定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include<stdio.h> struct Date{ int year; int month; int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; }date; int main() { struct Date d; int c,s=0; printf("请输入年、月、日:"); scanf("%d/%d/%d",&d.year,&d.month,&c); if(d.month>0&&d.month<=12) { printf("%d,%d,%d\n",d.year,d.month,d.day[d.month]); for(int i=1;i<d.month;i++) { s=s+d.day[i]; } if((d.year%4==0&&d.year%100!=0)||d.year%400==0) { s=s+c+1; printf("该日在本年中是第%d天",s); }else{ s=s+c; printf("该日在本年中是第%d天",s); } } return 0; }
|
.编写一个函数 print,输出一个学生的成绩数组,该数组中有5个学生的数据记录每个记录包括num,name,score[3],用主函数输人这些记录,用print 函数输出这些记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| #include<stdio.h> #define N 5 struct Student{ int num; char name[20]; float score[3]; }stu[N]; int main() { void print(struct Student stu[N]); for(int i=0;i<N;i++) { printf("请输入第%d学生的学号,姓名,成绩:",i+1); scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); } print(stu); return 0; } void print(struct Student stu[N]) { for(int i=0;i<N;i++) { printf("第%d个学生信息:",i+1); printf("学生的学号,姓名,成绩为:%d %s %f %f %f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]); } }
|
有10个学生,每个学生的数据包括学号、姓名3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名,3门课程成绩、平均分数)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| #include<stdio.h> #define N 5 struct Student{ int num; char name[20]; float score[3]; float aver; }stu[N]; int main() { int swap(struct Student stu[N],float average[]); float average[3]={0}; for(int i=0;i<N;i++) { printf("请输入第%d学生的学号,姓名,成绩:",i+1); scanf("%d %s %f %f %f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); } int j=swap(stu,average); printf("学号 姓名 课程1 课程2 课程3 平均成绩\n"); for(int i=0;i<N;i++) { printf("%d %s %4.2f %4.2f %4.2f %4.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].aver); } for(int i=0;i<3;i++) { printf("课程%d的平均分是:%.2f\n",i+1,average[i]); } printf("平均分最高的学生信息是:%d %s %.2f %.2f %.2f %.2f\n",stu[j].num,stu[j].name,stu[j].score[0],stu[j].score[1],stu[j].score[2],stu[j].aver); return 0; } int swap(struct Student stu[N],float average[3]) { for(int i=0;i<N;i++) { stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3; average[0]+=stu[i].score[0]; average[1]+=stu[i].score[1]; average[2]+=stu[i].score[2]; } for(int i=0;i<3;i++) { average[i]/=N; } int x; float t=0; for(int i=0;i<N;i++) { if(t<stu[i].aver) { t=stu[i].aver; x=i; } } return x; }
|
13个人围成一圈,从第1个人开始顺序报号1,2,3。凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。要求用链表处理。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include<stdio.h> #define N 13 typedef struct people{ int num; struct people* next; }people; int main() { people arr[N]; people *head=arr; for(int i=0;i<N;i++) { head->num=i+1; head->next=&arr[i+1]; head=head->next; } arr[N-1].next=arr; int count = N; int i=1; head=arr; while(count>1) { if(head->num==0) { head=head->next; continue; } if(i==3) { printf("第%d个人退出\n",head->num); head->num=0; count--; } ++i; head=head->next; if(i>3) i=1; } while(head->num==0) { head=head->next; if(head->num!=0) { printf("没有退出的人为:%d\n",head->num); break; } } return 0; }
|