1、C语言程序设计复习题库501、计算下面公式的值。T=1/1!+1/2!+1/3!+1/m! 当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717#include void main() float m,s,k,i,b; b=0; scanf(%f,&m); for(k=1;k=m;k+) s=1; for(i=1;i=k;i+) s=s*i; b=b+1/s; printf(n %.3f,b);2、程序填空:用*号输出字母C的图案。#include stdio.h#include conio.hmain()_printf( *n);_getch
2、(); 3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!) 答案:1533459#include void main() int a,b,c,d,s,g,k; g=0; for(k=1000;k=9999;k+) if(k%2!=0) a=k/1000; b=k%1000/100; c=k%1000%100/10; d=k%10; s=a+b+c+d; if(s%15=0) g=g+k; printf(n %d,g)
3、;4、 /*下面程序的功能是:计算并输出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/ 答案:6591#include void main() int total=0, mc=0, k=700; int pm10,count=0; while( (k=2) & mc=10 ) if (k%13=0) | (k%17=0) pmmc = k; mc+; k-; for( k=1;k=10;k+ ) total += pmk-1; printf( %dn,total); 5、求x = 1+1/5+1/7+
4、1/9+的近似值,直到最后一项的绝对值小于10-5为止。#include main() double c=1,a=1; int b=3; while(a=pow(10,-5) b=b+2; a=1/(double)b; c=c+a; printf(%f,c);6、计算如下公式的A20值。 A1=1, A2=1/(1+A1), A3=1/(1+A2), A4=1/(1+A3), .(按四舍五入保留10位小数)。答案:0.6180339850#include main()double a=1,b,c;for(c=2;c=20;c+)b=1/(a+1);a=b;printf(%.10f,b);7、求
5、10,1600之间能被7整除的奇数之和。答案:90965#include main()int b=0,c; for(c=10;c=1600;c+) if(c%2!=0&c%7=0) b+=c;printf(%d,b);8、函数mystrlen(char *s)的功能是求字符串s的长度。请填空。Int mystrlen(char *s)int num=0;while( ) _;return ( );9、100,500之间同时满足除以7余5,除以5余3,除以3余1的整数之和。答案:1042#include main()int a,b=0; for(a=100;a=500;a+) if(a%7=5&
6、a%5=3&a%3=1) b+=a; printf(%d,b);10、求100,999之间所有的素数的个数。答案:143#include main()int a,b,c,d=0; for(a=100;a=999;a+) c=1; for(b=2;ba;b+) if(a%b=0) c=0; if(c) d+; printf(%d,d);11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。答案:110#include main()int a,b=0,c,d,e; for(a=1000;a=9999;a+)
7、c=a/1000; d=a%1000/100; e=a%1000%100/10; if(a%8=0&c+d=d+e) b+; printf(%d,b);12、 /*数列1,2,1,4,7,12,23具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7.。下列程序的功能是求出该数列前10项的和。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/ 答案:311#include void main() long sum=0,a30=1,2,1; int k,j; for( k=3;k10;k+ ) ak = ak
8、-1+ak-2+ak-3; for( j=0;j=10;j+ ) sum += aj; printf( %ldn,sum); 13、 /*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ 答案:61#include int prime(int x)/定义函数prime int k; for(k=2;kx;k+) if(x%k=0) break;/判定是a否为素数 if(k=x) return 1; else return 0;void main( ) int a,b,n=0; int prime(int x);
9、 /函数声明 for(a=2;a=1998;a+) if(prime(a)=1)/函数调用 b=a+2; if(prime(b)=1) n+; /判定b是否为素数,并计算素数个数 printf( %d n,n);14、编写程序,统计200400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。答案:4#include void main() int a,b,c,d,n=0; for(a=200;a=400;a+) b=a/100; c=a%100/10; d=a%100%10; if(c*b*d=42&(b+c+d=12) n+; printf( %d n,n);15、有30个学
10、生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?答案:9#include void main() int a,b,c,n=0;/定义学生人数为变量 for(a=1;a=30;a+) for(b=1;b=30;b+) for(c=1;c=30;c+) if(3*a+2*b+c=50)&(a+b+c=30) n+; printf( %d n,n);16、爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;
11、如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?答案:119#include void main() int a=1; while(a) if(a%2=1&a%3=2&a%4=3&a%5=4&a%6=5&a%7=0) break; a+; printf( %d n,a);17、 /*求1000以内最大的10个素数的和。*/ 答案:9946#include int prime(long n)/定义函数,判断是否为素数 long k; for(k=2;k=2;t-) if(prime(t)=0) total=total+t; num+; if(num=10)
12、break; printf(n%ld,total);18、 /*求1!+2!+3!+.+7!,7!表示7的阶乘。*/ 答案:5913#include long jc( long x) long k,fac=1; for(k=1;k=x;k+) fac *=k ; return fac;void main( ) long n,sum=0; long jc(long x); for(n=1;n=7;n+) sum+=jc(n); printf(n%ld,sum);19、求10000以内所有完数之和,完数是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个
13、完数。(注:所有变量用int数据类型定义!) 答案:8658#include void main() long a,b,c,d,e=0; for(a=2;a=10000;a+) c=0; d=0; for(b=1;b=a-1;b+) if(a%b=0) c=b; d+=c; if(d=a) e+=d; printf(%ld,e);20、/*数列1,2,1,4,7,12,23具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7.。下列程序先给出数列的第一项(1)、第二项(2)、第三项(1),再逐步计算其它项并保存在数组a中,最后求出该数列
14、的第25项。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/答案:1323525#include #include #define N 30void main() long aN; int k; a0 = 1; a1 = 2; a2=1; for( k=3;k=24;k+ ) ak = ak-1+ak-2+ak-3; printf( %ldn,ak-1); 21、/*求区间200,3000中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。*/ 答案:87970#include int hws(long n) long x=n,t=0,k; w
15、hile(x0) k=x%10; t = t*10 + k; x=x/10; if(n=t) return 1; else return 0;void main( ) long k,s=0; int hws(long n); for(k=200; k=3000;k+) if(hws(k) s=s+k; printf(n%ld,s);22、/*下面的程序是求表达式的值:s=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+.+(1*2*3*.*n)/(3*5*7*.(2*n+1)请将程序补充完整,并给出当n=25时,程序的运行结果(按四舍五入保留10位小数)。*/答案:1.57
16、07963267#include double fun(int n) double s=1.0, t=1.0; int k; double rtn=1.0; for(k=1;k=n; k+) t = t*k; s = s*(2*k+1); rtn=rtn+t/s; return rtn;void main() int n; scanf(%d,&n); double sum; double fun(int n); sum=fun(n); printf(n %.10lf,sum);n=30时,答案。23、已知:Sn=2/1+3/2+4/3+(n+1)/n, 求Sn不超过50的最大值(按四舍五入的方
17、式精确到小数点后第三位)。答案:49.395#include double fun(int n) double s=1.0, t=1.0; int k; double rtn=0.0; for(k=1;k=n; k+) t = k+1; s = k; rtn=rtn+t/s; return rtn;void main() int n; scanf(%d,&n); double sum; double fun(int n); sum=fun(n); printf(n %.3lf,sum); 54.49924、计算Y=X/1!-X3/3!+X5/5!-X7/7!+前20项的值(已知:X=2)。要求
18、:按四舍五入的方式精确到小数点后第二位。答案: 0.91#include#includevoid main() double s,b,i,k,p,d,o; o=1; p=0; k=1; for(i=1;i=41;i=i+2) s=1; for(b=1;b=i;b+) s=s*b; d=pow(2,i)*pow(-1,+o); p=p+d/s; printf(%.2f,p);25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。例:32+42=52,则5为弦数,求131,200之间最小的弦数。答案:135#include#includevoid main()double d,i,e,n
19、=0; for(i=131;i=200;i+) for(d=1;d=200;d+) for(e=1;e=200;e+) if(de) if(pow(i,2)=pow(d,2)+pow(e,2) printf(%.0fn,i); n+; if(n) break; 26、已知X,Y,Z为三个正整数,且X2+Y2+Z2=252,求X+Y+Z的最大值。答案:43#include#includevoid main()double d,i,e,n,k=0; for(i=25;i=1;i-) for(d=25;d=1;d-) for(e=25;e=1;e-)if(de&id) if(pow(i,2)+pow
20、(d,2)+pow(e,2)=625) n=i+d+e; printf(%.0fn,n); k+; if(k) break;27、猴吃桃:有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。以后每天都是吃尚存桃子的一半零一个。到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。问小猴子第一天共摘下了多少个桃子。答案:1534#includevoid main()double i,n,k=1; for(i=9;i=1;i-) n=2*(k+1); k=n; printf(%.0fn,n);28、求1,50之间的所有
21、整数能构成直角三角形的三边的组数。例如:3*3+4*4=5*5,它们构成直角三角形,所以3,4,5作为一组,但4,3,5视为跟3,4,5相同的一组。答案:20#include#includevoid main()double d,i,e,k=0; for(i=50;i=1;i-) for(d=50;d=1;d-) for(e=50;e=1;e-) if(de&id) if(pow(e,2)=pow(d,2)+pow(i,2) k+; printf(%.0fn,k);29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?输出所有的兑换方法。 答案: 18种#includevoid
22、main()double d,i,e,k=0;for(i=15;i=0;i-) for(d=15;d=0;d-) for(e=15;e=0;e-) if(5*i+2*d+e=15) k+; printf(%.0f %.0f %.0f %.0fn,i,d,e,k); 30、用迭代法求x等于a开平方的正数值。迭代公式为:xn+1=1/(2*(xn+a/xn),要求直到前后两次求出的x的差的绝对值小于10-5为止。A的值从键盘输入。#include#includevoid main()double i;int e;double han(int a);scanf(%d,&e);i=double (e)
23、;printf(%f,i); double han(int a)double f2,f1=?,k,t; t=0; for(k=1;k0;k+) if(tpow(10,-5) f2=1/(2*(f1+a/f1); t=f2-f1; f1=f2; else break; return f1;31、求最大的水仙花数,所谓水仙花数,指的是一个三位数,其各个数字的立方之和等于该数。 答案:407#include#includevoid main()int a,b,c,d; for(a=999;a=100;a-) b=a/100; c=a%100/10; d=a%10; if(pow(b,3)+pow(c
24、,3)+pow(d,3)=a) printf(%dn,a); break; 32、一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高? 答案: 299.609375 0.097656#include#includevoid main()float b,a=100,c,s;s=100; for(c=1;c=10;c+) b=a/2; a=b; printf(%fn,a); s=100; b=0; a=100; for(c=1;c=9;c+) b=a/2; s=s+b*2; a=b; printf(%fn,s); 33、编写程序
25、,完成如下功能,输入8个float类型的实数,分别求最大值和最小值,保留三位小数输出最大值和最小值。#includevoid main()float j,k,max,min;int i;float a8;for(i=0;i=7;i+)scanf(%f,&ai);min=max=a0;k=j=0;for(i=0;i=7;i+) if(maxai) min=ai; k=i; printf(%f,%f,min,max); 34、编写程序输出如下字符图形: #includevoid main()int a,b;for(b=1;b=1;a-)printf( );printf(n);35、计算:s=f(-30)+f(-29)+.+f(-1)+f(0)+f(1)+.+f(30)的值。其中函数定义如下:f(x)=(x+1)/(x-2) 如果 x1; f(
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1