C语言编程题与答案_第1页
C语言编程题与答案_第2页
C语言编程题与答案_第3页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言编程题1. (*) 求分数序列: 1/2, 2/3, 3/5, 5/8, 8/13, 13/21 前 20 项的和。main ()float i 二 1, j=2, 0, s, n, m;for (n=l;n 二 20;n+)s=i/j, m=i, i=j, j=m+j, t=t+s;printf("t 二 %f, t);2. (*)从键盘输入一个字符串,再将其逆序输岀。(如:输入abode,输岀edcba)main ()int i;char c10;scanf( %s , c); for(i=9;i>=0;i ) printf("%c", ci);3

2、. (*)已知 abc+cba 二 1333,其中 a> b、c 均为一位数,例如: 617+716=1333, 518+815=1333,试编程求岀符合这一规律的a> b、c,并输岀结果。main ()int a, b, c, x, y;for(a=l;a 二 9;a+)for(b 二 0;b二 9;b+) for(c=l;c<=9;c+) x 二 100*a+10*b+c;y 二 100*c+10*b+a,;if (x+y=1333)printf ( x=%d, y=%d , x, y);4. (*)利用海伦公式求三角形面积,三边长a,b,c由键盘输入。若输入的三边长不能

3、构成三角形,输岀相应提示信息。海伦公式如下:其中s二+b+c)/2二角形面积二_ Q) * (s _ /?) * (s _ c)#include math. hmain() float a, b, c, s, area;scanf ( f, %f, %f , &a, &b, &c);s 二(a+b+c)/2;area=sqrt(s*(sa)*(sb)*(sc);if(a+b>c&&a+c>b&&b+c>a)printf ( area=%f, area);else.1 .printf ( no) ;-5. (*) 编程求出

4、 1 !+2!+3!+ ? +8!+9!+10! 的值并输出。 程序 1: main() int i, j;double p=l, sum 二 0;for (i=l; i<=10; i 卄) for(j=l;j<=i;j+) p 二 p*i;sum=sum+p;p=l. 0;printf ( sum=%f", sum);_程序 2: float fac (n)irrt n;float f;if (n<0) printf("n 0, error ! ) ; else if (n=01 | n=l) f=l; else f=fac(n-l)*n; return

5、(f);main ()int h, s=0, n;for (n 二 1;n =4;n+) h=fac(n);s 二 s+h;printf ( " s 二 1!+2!+. .+10!=%dn", s);程序 3: main() int i;double p=l, sum 二 0;for (i=l; i<=10; i 卄 ) P 二 P*i ;sum=sum+p;printf( " sum=%f", sum);.2 .6. (*) 从键盘输入两个整数,输出其和,差,积,商。7. (*) 输入若干个自然数,对奇数从大到小排序,对偶数从小到大排序,输出两种

6、结果。maxji(int a, int n) int i, j, k, t;for (i=0;i<nl;i+)k=i; for(j=i+l;j<n;j+) if(ak<aj) k=j;if (k!=i)t 二 ak;ak=aj;aj=t;ttdefine N 10main ()int cN, i, j ;for(i=0;i<N;i+)scanf( d", &ci);maxji (c, N); for(i=Nl;i>=0;i- ) if (ci%2=0) printf ( %5d, c i); printf ( n );for(i=0;i<N

7、;i+)if (ci%2!=0) printf ("%5 (T, ci);_8. (*) 求出 0? 999 之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其 位数字的立方和确好等于该数本身,女口; 153 = 1 + 5 + 3 ,则 153 是一个“水仙花数”程序 1: main()int i, j, k, a;for(i=l;i 二 9;i+)for (j=0;j<=9;j+) for (k 二 0;k<=9;k+)if (i*i*i+j*j*j+k*k*k=100*i+10*j+k)printf ( , %d%d%dn ,z, i, j, k);程序:

8、 main()int m, i, j, k, a; for(m=101;i<=999;m+) i=m/100;j=(m-m*100)/10;? 3 .k=m%10;if (i*i *i+j* j* j+k*k*k=m) prirrtf ("%drT, m);9. (*)试编程:判断输入的正整数是否既是5,又是7的整数倍数。若是则输岀yes;否贝惭岀noo10. (*)已有函数调用语句c=add(a, b);请编写瞪d函数,计算两个实数 &和b的和,并 返回和值。11. (*) 有人想将手中一张面值 100元的人民币换成 5元、 1 元、 0.5元面值的零钱 100 张,

9、以 上三种面值的零钱至少有一张,问共有几种换法。请编程实现。程序 1 : main()int i, j, k, n=0; for(i=l;i<19;i+) for(j=l;j<95;j+) for (k=l;k<94;k+) if(5*i+j+0.5*k=100&&i+j+k=100)printf(%d, %d, %dn", i, j, k) ;n+; printf("%d", n);12. (*)求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中 a是一个数字,例如 2+22+222+2222+22222程序 1

10、: main()int i, a, n;long sum=0, b=l, c=l; scanf("%d, %d , &a, &n);程序main ()3:long int sn=0, k=a; inta, i, j;scanf("%d , &a);for (i=l;i 二 5;i+) k 二 10*k+a;sn=sn+k;for(i=l;i<=n;i+)sum+ 二 a*c;b* 二 10;c+ 二 b; printf("%ld , sum);程序 2: main()printf("%ldrT, sn); long irrt

11、 sn=0, k=0; int a, i, j ;scanf( %d", &a);for(i=l;i<=5;i+) for(j=l;jv=i;j+) k 二 10*k+a;.4 .sn=sn+k;k=0;printf("%ldn ,sn);13.图(*)编程输出如下*形(不能仅用printf语句):* * * * * * * * * * * *in(ma :)inti, k,for (i=0;i<=4;i+)for(j=0;j<4-i;j+)printf( ); for(k=0;k=2*i;k+) printf ( * );pri ntf (&qu

12、ot;rT) ;_14. (*)用近似公式求自然对数的底e的值。11el+l! + + +2!3!#include math. h main ()float i, j, e, p=l. 0, sum=0. 0; for (i=l; i<10 ; i 卄)for(j=l;j<=i;j+)P 二 P*j ; sum=sum+l. 0/p;P=l. 0;e二 i+sum;printf("%fn ,e);15. (*) 请编程,用 scanf ()函数输入三个字符,对这三个字符各加一个整数1 后,用 putchar ()函数输出,且每输出一个字符换一行。16. (*) 请编程,用

13、 scanf () 函数输入三个整数,输出其中不大不小的那个数,输出宽度 为五 位。int findmid(int i, int j, int k)int n;? 5?if(i<j) n 二 i;i 二 j;j 二 n;if(i<k) n 二 i;else if (j>k) n=j;else n 二 k;return (n);main ()int i, j, k, n;scanf( d%d%d , &i, &j, &k);n=f indmid (i, j, k);printf ( %dn , n); -17. (*) 编程实现输出所有 1? 100之间

14、能被 9整除余 2 的数。18. (*) 编写一程序实现如下功能:输入1、2、3、4、5、6、7 (分别对应星期一至星期日 )中的任何一个数,便能输出与之对应的英文名称。如输入1, 则输出 Mondayomain ()char day;scanf( %c", &day);swith(day)case ' 1' :printf ( mondayn /z) ;break;case '2':priesdayn ) ; break;case '3':printf("wednsdayn"); break;case &#

15、39;4': prihursdayn z ) ; braek;case '5' :printf(" fridayn zz) ; break;case '6':printf ("saturdayn z ) ; break;case '7':prirrtf ( sundayrT) ; break;defult: printf CerrorrT);19. (*) 编一程序,对于给定的一个百分制成绩,输出相应的 5分制成绩。设: 90 分以上 为'A', 8089分为7079分为C, 6069分为D, 60分以

16、下为'E'。(用switch语句实现)。main ()int s,score;scanf("%d , & score); s=score/10;switch(s)case 10:printf ( An ) ; break;case 9:printf ( An) ; break;case 8:printf ( Bn) ; break;case 7:printf ( Cn) ; break;case 6:printf ( Dn) ; break;case 5:case 4:case 3:case 2:case 1:printf (En) ; break;defau

17、It:printf ( error );-20. (*) 试编程:判断输入的正整数是否既是5, 又是 7 的整数倍数。若是则输出 yes; 否则输出 noo21. (*) 一个数如果却好等于它的因子之和,这个数就称为“完数”。例如, 6 的因子为1、2、3,而 6二 1+2+3,因此 6 是“完数”。编程序找出 100之内的所有完数,并按下列格式输出其因子: 6 its factors are 1, 2, 3main()int m, i, s;for(m=2;m<1000;m+) s=0;for(i=l; i<m ;i+)if(m%i=0) s 二 s+i ;if (m=s) pr

18、intf ( 3d its factors are “ m, );for (i=l; i<m; i+)if(m%i 二二 0) printf ( /%4d ,/, i);printf ("rT);22. (*) 输入 5 对整数,请输出每对数中较大者main()int i, j, a5 2;for (i=0;i 二 4;i+)for(j=0;j<=l;j+) scanf ( d, &aij);for (i=0;i<=4;i+)if(ail>ai0)printf ( 4dn , ai 1);else printf ( ,z%4dn,z, ai 0);?

19、6?23. (*) 编程将一个 3x3 矩阵转置 ( 行列互换 )后输出。main()int i, j, a3 3, b3 3;for(i=0;i<=2;i+) for(j=0;j<=2;j+)scanf ( %d, &aij);for(i=0;i<=2;i+) for(j=0;j<=2;j+)print (、'%5d, ai j); bji=aij 汀 printf (' n ,) ; for(j=0;j<=2;j+) for(i 二 0;i<=2;i+) printf ( /z%5d,z, bi j); printf ( 、 n

20、) ;_24. (*) 求一个一维数组的最大值,最小值和平均值( 主函数调用并输出 ) 。程序 1:float max (int n, float aJ) int i;float max;max=a 0;for(i 二 0;i<n;i+) if(max<ai) max=ai; return(max);float min(int n, float a) int i; float min;程序 2 : main ()void make ();int a10, i;extern int max, min;extern float aver;for(i=0;i<10;i+)scanf

21、 ("%d , &ai); make (a, 10);2f", max, min, aver)printf("max=%d, min=%d, aver=%int max, min; float aver; void make(int a, int n) int i; float sum;max=min=a0;min=aO;for (i=0;i<n;i+) if(min>ai) min=ai;return(min);float aver (int n, float a) int i;float sum=0, aver;? 7?for (i=0;i

22、<n;i+) sum=sum+ai;aver 二 sum/n; return(aver);#include zzmath. h" main() int i;f loat m, n, a5, c;for (i=0;i<5;i+) scanf ( %f, &ai); m=max (5, a);n=min (5, a); c 二 aver (5, a);printf ( 5f%5f%5fn , m, n, c);_( 如:输入 2634, 输25. (*) 编写函数,求一个不超过五位的十进制整数各位数值的和 出 15)#include math. h main() in

23、t i, a5, m, n 二 0; scanf( %d, &m); for (i=0;i<=4;i+) ai=m%10; n=n+ai;m 二 m-ai*10; printf ("%5d", a,i) ; printf (' n'); printf("%d", n);26. (*) 编程求岀一个 3x3 矩阵的最大和最小元素及其下标。main ()int i, j, max, min, a3 3, ml, nl, m2, n2; for(i=0;i<=2;i+) for(j=0;j<=2;j+) scanf (

24、 d, &ai j);min=max=aO0;? 8?for(i=0;i<=2;i+) for(j=0;j<=2;j+) if(aij>max) max=aij;ml=I;nl=j; else if(aij<min)min 二 aij;m2 二 i;n2 二 j;printf ( max=%d, %3d, %3d, min=%d, %3d, %3d , max, ml, nl, min, m2, n2);_m 个字符开 始的27. (*) 有一个字符串,包含 n 个字符,编写一个函数,将此字符串中从第 全部字符复制成另一个字符串。main ()char chs2

25、 30 = 0, chsl 30 this is my first C program77int i, j, m;scanf( %d , &m); for(i=m, j=0;i<30;i+, j+) chs2j=chsli; chs229= 0' printf ( %s", chs2);-28. (*) 求一个 3x3 矩阵的对角线元素之和。main () int i, j, suml=0, sum2=0, a3 3;for (i=0;i<=2;i+) for(j=0;j<=2;j+) scanf ("%d , &ai j); fo

26、r(i=0;i<=2;i+) for(j=0;j =2;j+) if(i=j) suml+=aij; if(i+j)=2) sum2+=ai j; printf ( %5d%5d, suml, sum2) ; 29. (*) 从键盘输入两个整数,输出其最大公约数和最小公倍数。程序 1: main ()int a, b, t, p, r;scanf ("%d, %d , &a, &b);i f (a<b) t 二 a; a=b; b 二 t;p=a*b;whil e(b!=O)r=a%b;a=b;b=r; printf ( 、 '%5d%5d“, a

27、, p/a) ;.9 .main () irrt a, b, m, n, i, t;scanf ( 、 '%d%d , &a, &b); if(a<b)t 二 a;a=b;b 二 t; m=a;n 二 b;for(i=l;i<=n;i+) if(m%i=0)&&(n%i=0)printf ( %5dn, i);break;printf("%5d , a*b/i);30. (*) 一个已按从小到大的顺序排序的数组,有 9 个元素,从终端输入第 10 个数,要求 按原来排序的规律将它插入数组中。 ( 该数比第一个数大,比第九个数小 )#

28、define N 10main()int b, i, n, aN = l, 5, 7, 11, 15, 19, 23, 28, 31;scanf ( d, &b);for(i=0;i<Nl;i+)if(ai>b) (n=i;break;for (i 二 (N-2);i>=n;i-) ai+l 二 ai; an=b;for(i=0;i<N;i+)printf ( 5d, ai);11 11 2 113 3 11 4 6 4 1# define M 10# define N 10 main ()int aM N, i, j ; for(i=0;i<M;i+)

29、for(j=0;j<=i;j+) if (j=0| | j=i) ai j=l;elseai j=ai-l j-l+ai-l j;for(i=0;i<M;i+)for(j=0;j<=i;j+) printf("%4d , aij);printf ( /zn/z) ; -32. (*) 从键盘输入少于 50个的整数,其值在0和 4之间(包括 0和 4),用- 1作为输入结束标志,统计每个整数的个数。请编程实现。33. (*)从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b的所有元素都连接到a中,请编程实现

30、。main() char a50, b10, *pl, *p2; int i,j ;scanf ( "%s%s” , a, b);n 二 strlen(a);for (pl=a+n, p2 二 b;pl<=a+(n+4);pl+, p2+) *pl=*p2;?if(*p2 二二 ' 0? ) break;*pl=' 0'printf ( "%s” , a) ;34. (*) 编写函数,在一个一维数组中查找指定值,若找到则返回该数值的下标,否则返 回 -1。要求用指针变量传递数组首地址。main()float b;irrt i;scanf( f,

31、 &b ) ;for ( i=0;i<10;i+ )if ( b=ai )printf ("%dn , i) ;break;if ( i>=10 ) printf ( "T); printf Cn );-35. ( * )写一程序,要求用户在键盘上输入一个整数,并把每位数字转换为英文。例如 输入 1024 时,输出 One Zero Two Fourmain () long irrt n; int m, i=0, c10;scanf("%ld , &n )dom=n%10; i+;ci=m;printf ( z%5d%5d%5dn z,

32、 i, m, c i ) ;while ( n/=10 )>0);while ( i>=l )i;swit ch ( ci+l )case 0: printf ( zero) ; printf ( ;break;case 1: printf ( one") ;printf (") ; break; case 2: printf ( twoA) ;printf ( "”;break; case 3: printf ( three z) ;printf ( ;break;case 4: printf ( four" ) ;printf ( ;br

33、eak;case 5: printf ( five" );printf ( “); break;case 6: printf six ); pi?intf ( ”);break;case 7: printf seven) ; printf( ”);break;case 8: printf ( eight ); printf ( ”); break;case 9: printf ( nine" );printf ( ”); break; defauIt:printf ( no);36. (*) A 数组中有 8个元素,从第 6 个元素开始将数组后三个元素移到数组开头。例如A

34、数组元素为: 2 6 9 8 5 3 7 4 移动后数组变为: 3 7 4 2 6 9 8 5#define N 8main ()int a8 = 2, 6, 9, & 5, 3, 7, 4;int i, j, t;for(i=0;i<8;i+)printf ( %5d, ai);printf ( n ); for(j=0;j<3;j+) t 二 aN-1; for(i=N2;i> 二 0;i-) ai+l=ai; a0=t;for(i=0;i<8;i+)prirrtf ( 5d, ai);37. (*)1X1=1按如下格式打印输出乘法口诀表:1X2=2 2X2

35、=4III1X9=9 2X9=18 3X9=27 9X9 二 8138. (*) 请将 n 个整数按升序重新放在原数组中,操作时不得另开辟数组。39. (*) 输入若干学生一门功课的成绩,统计各分数段的人数。凡不及格 (60 分以下 ) 都由 一个计数器来统计,其它以 10分作为一个数段 ,100 分作为一个分数段。main ()int a10;int i, j, t, p; for(i=0;i<10;i+) scanf (z/%dz/, &ai);for(i=0;i<9;i+)p 二 i;foT ( j=i+l;j 10;j+) if (ap>aj)p=j; if(

36、p!=j)t=ai;ai=ap;ap=t;for(i=0;i<10;i+) printf( %5d " , ai);-40. (*)编写函数,给定一个数,删除数组中与之相等的元素,返回值为删除后数组中的元素个数。mai n()float a10, t;int s, b6 = 0, i ; for(i=0;i<10;i+)seanf (,z%fzz, &ai); i=0;wh 订 e(i<10)s=(i nt)ai/10;i+ ;switeh(s)ease 10:b0+; break; ease 9:bl+; break; ease 8:b2+; break;

37、 ease 7:b3+; break; ease 6:b4+;break; ease 5:ease 4:ease 3:ease 2:ease 1:ease 0: b5+; break; for (i=0;i<=5;i+) printf ( 2d", bi);41. (*)输入一个整数,判断它能否被3、5、7整除,并输岀以下信息之一:能同时被3、5、7整除;能被其中两个数(说明哪两个数)整除;只能被其中一个整除(说明哪个数);不能被3、5、7任何一个整除。42. (*)有10个数已按由小到大的顺序存放在一个整型数组中,从键盘输入一个数,找岀该 数是数组中的第几个元数,如果该数不在

38、数组中,则打印岀“无此数”main ()int i, t, j, m;for(i=0;i<10;i+)printf( "%5d, ai);printf( "n");scanf ( "%d, &m);for(i=0;i<10;i+)if(m=ai )printf( "%5d, i+1);break; if(i>=10) printf( "no) ; 43. (*) 给出年、月、日,计算出该日是该年的第几天。44. (*) 求 3 至 50 之间所有素数之和,用子函数判断是否为素数。#include <ma

39、th. h>main ()int m, k, i, s=0;for (m=3;m<50;m+) k=sqrt(m);for(i=2;i 二 k;i+)if (m%i=0) break;if(i>=k+l) s=s+m ; printf("%5drT,s);45. (*) 不用 strcpy 函数,实现两个字符串的复制 (形参用指针变量 ) 。46. (*) 从键盘输入 10 个数,将其中最小的数与第一个数对换,最大的数与最后一个 数对 换,实现从小到大的排序。 ( 用指针实现 )47. (*) 编制程序。在主函数中输入a> b、c 三个数,在子函数中用指针法将a> b、c 排序(最大数放在a变量中,最小数放在c变量着),在主函数中输岀。48. (*) 输入三个字符串,按由小到大的顺序输出。 (用字符指针实现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论