1、计算下面公式的值。T=1/1!+1/2!+1/3!+……+1/m! 当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717 #include { float m,s,k,i,b; b=0; scanf(\"%f\ for(k=1;k<=m;k++) { s=1; for(i=1;i<=k;i++) s=s*i; b=b+1/s; } printf(\"\\n %.3f\} 2、程序填空:用*号输出字母C的图案。 #include \"stdio.h\" #include \"conio.h\" main() { _____________ printf(\" *\\n\"); _____________ _____________ getch(); } 3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!) 答案:1533459 #include { 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\} 4、 /*下面程序的功能是:计算并输出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/ 答案:6591 #include int total=0, mc=0, k=700; int pm[10],count=0; while( (k>=2) && mc<=10 ) { if ((k%13==0) || (k%17==0)) { pm[mc] = k; mc++; } k--; } for( k=1;k<=10;k++ ) total += pm[k-1]; printf(\" %d\\n\ } 5、求x = 1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。 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\ } 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\} 7、求[10,1600]之间能被7整除的奇数之和。答案:90965 #include int b=0,c; for(c=10;c<=1600;c++) if(c%2!=0&&c%7==0) b+=c; printf(\"%d\} 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 {int a,b=0; for(a=100;a<=500;a++) if(a%7==5&&a%5==3&&a%3==1) b+=a; printf(\"%d\} 10、求[100,999]之间所有的素数的个数。答案:143 #include {int a,b,c,d=0; for(a=100;a<=999;a++) { c=1; for(b=2;bprintf(\"%d\}; }11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。答案:110 #include {int a,b=0,c,d,e; for(a=1000;a<=9999;a++) {c=a/1000; d=a%1000/100; e=a%1000%100/10; if(a%8==0&&c+d==d+e) b++;} printf(\"%d\} 12、 /*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。下列程序的功能是求出该数列前10项的和。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/ 答案:311 #include long sum=0,a[30]={1,2,1}; int k,j; for( k=3;k<10;k++ ) a[k] = a[k-1]+a[k-2]+a[k-3]; for( j=0;j<=10;j++ ) sum += a[j]; printf(\" %ld\\n\ } 13、 /*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ 答案:61 #include int prime(int x)//定义函数prime { int k; for(k=2;k void main( ) { int a,b,n=0; int prime(int x); //函数声明 for(a=2;a<=1998;a++) { if(prime(a)==1)//函数调用 { b=a+2; if(prime(b)==1) n++; //判定b是否为素数,并计算素数个数 } } printf(\" %d \\n\ }14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。答案:4 #include 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\} 15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?答案:9 #include 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\} 16、爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?答案: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\} 17、 /*求1000以内最大的10个素数的和。*/ #include int prime(long n)//定义函数,判断是否为素数 { long k; for(k=2;k<=n-1;k++) if(n%k==0) return 0;//是素数 return 1;//不是素数 } void main( ) { long t,total=0,num=0; int prime(long n);//函数声明 for(t=1000;t>=2;t--) { if(prime(t)==0) { total=total+t; num++; } if(num==10)break; } printf(\"\\n%ld\} 18、 /*求1!+2!+3!+...+7!,7!表示7的阶乘。*/ #include long k,fac=1; for(k=1;k<=x;k++) fac *=k ; return fac; } 答案:9946 答案:5913 void main( ) { long n,sum=0; long jc(long x); for(n=1;n<=7;n++) sum+=jc(n); printf(\"\\n%ld\} 19、求10000以内所有完数之和,\"完数\"是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。(注:所有变量用int数据类型定义!) 答案:8658 #include printf(\"%ld\} 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中,最后求出该数列的第25项。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)*/答案:1323525 #include long a[N]; int k; a[0] = 1; a[1] = 2; a[2]=1; for( k=3;k<=24;k++ ) a[k] = a[k-1]+a[k-2]+a[k-3]; printf(\" %ld\\n\ } 21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。*/ 答案:87970 #include long x=n,t=0,k; while(x>0) { 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\} 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.5707963267 #include 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\ double sum; double fun(int n); sum=fun(n); printf(\"\\n %.10lf\}n=30时,答案。。 23、已知:Sn=2/1+3/2+4/3+…+(n+1)/n, 求Sn不超过50的最大值(按 四舍五入的方式精确到小数点后第三位)。答案:49.395 #include 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\ double sum; double fun(int n); sum=fun(n); printf(\"\\n %.3lf\}54.499 24、计算Y=X/1!-X^3/3!+X^5/5!-X^7/7!+……前20项的值(已知:X=2)。要求:按四舍五入的方式精确到小数点后第二位。答案: 0.91 #include 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\} 25、若某正整数平方等于某两个正整数平方之和,称该正整数为弦数。例:3^2+4^2=5^2,则5为弦数,求[131,200]之间最小的弦数。答案:135 #include {double d,i,e,n=0; for(i=131;i<=200;i++) for(d=1;d<=200;d++) for(e=1;e<=200;e++) { if(d printf(\"%.0f\\n\ n++; } if(n) break; } } 26、已知X,Y,Z为三个正整数,且X^2+Y^2+Z^2=25^2,求X+Y+Z的最大值。答案:43 #include 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(d printf(\"%.0f\\n\ k++; } if(k) break; } } 27、猴吃桃:有一天小猴子摘下了若干个桃子,当即吃掉一半,还觉得不过瘾,又多吃了一个。第二天接着吃了剩下的桃子中的一半,仍不过瘾,又多吃了一个。以后每天都是吃尚存桃子的一半零一个。到第10天早上小猴子再去吃桃子时,看到只剩下一个桃子了。问小猴子第一天共摘下了多少个桃子。答案:1534 #include {double i,n,k=1; for(i=9;i>=1;i--) { n=2*(k+1); k=n; } printf(\"%.0f\\n\} 28、求[1,50]之间的所有整数能构成直角三角形的三边的组数。例如:3*3+4*4=5*5,它们构成直角三角形,所以{3,4,5}作为一组,但{4,3,5}视为跟{3,4,5}相同的一组。答案:20 #include 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(d printf(\"%.0f\\n\} 29、15元钱换成1元、2元、5元的票面,问有多少种不同的兑换方法?输出所有的兑换方法。 答案: 18种 #include {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 %.0f\\n\ } } 30、用迭代法求x等于a开平方的正数值。 -5 迭代公式为:xn+1=1/(2*(xn+a/xn)),要求直到前后两次求出的x的差的绝对值小于10为止。A的值从键盘输入。 #include double i; int e; double han(int a); scanf(\"%d\i=double (e); printf(\"%f\} double han(int a) {double f2,f1=???,k,t; t=0; for(k=1;k>0;k++) { if(t else break; } return f1; 31、求最大的水仙花数,所谓水仙花数,指的是一个三位数,其各个数字的立方之和等于该数。 答案:407 #include for(a=999;a>=100;a--) { b=a/100; c=a%100/10; d=a%10; if(pow(b,3)+pow(c,3)+pow(d,3)==a) { printf(\"%d\\n\ break; } } } 32、一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高? 答案: 299.609375 0.097656 #include {float b,a=100,c,s; s=100; for(c=1;c<=10;c++) { b=a/2; a=b; } printf(\"%f\\n\ s=100; b=0; a=100; for(c=1;c<=9;c++) {b=a/2; s=s+b*2; a=b; } printf(\"%f\\n\ } 33、编写程序,完成如下功能,输入8个float类型的实数,分别求最大值和最小值,保留三位小数输出最大值和最小值。 #include {float j,k,max,min; int i; float a[8]; for(i=0;i<=7;i++) scanf(\"%f\min=max=a[0]; k=j=0; for(i=0;i<=7;i++) { if(maxif(min>a[i]) {min=a[i]; k=i; } } printf(\"%f,%f\} 34、编写程序输出如下字符图形: @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ … @ @ @ #include for(b=1;b<=11;b++) {for(a=12-b;a>=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) 如果 x>1; f(x)=0 如果 x=0 或 x=2 ;f(x)=(x-1)/(x-2) 如果 x<0。(按四舍五入保留6位小数) 答案:65.223018 #include for(i=0;i<=30;i++) {if(i==0||i==1) a[i]=0; else a[i]=a[i+1]/a[i-2]; } for(j=-1;j>=-30;j--) a[j]=a[j-1]/a[j-2]; for(k=0;k<=69;k++) printf(\"%d\ } 36、编写程序输出如下字符图形(最后一行19颗星): * * * * * * * * * * * * * * * … * * * … * * * * #include int i,j,b; for(b=1;b<=9;b++) {for(i=1;i<=18-2*b;i++) printf(\" \"); for(j=1;j<=4*b+1;j++) if(j%2!=0) printf(\"*\"); else printf(\" \"); printf(\"\\n\"); } } 37、企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? #include \"stdio.h\" void main() {double s; int i; scanf(\"%d\switch(i/10) { case 0:s=i+i*0.1;break; case 1:s=i+10*0.1+(i-10)*0.75;break; case 2: case 3:s=i+10*0.1+10*0.75+(i-20)*0.05;break; case 4: case 5:s=i+10*0.1+10*0.75+20*0.05+(i-40)*0.03;break; case 6: case 7: case 8: case 9:s=i+10*0.1+10*0.75+20*0.05+20*0.03+(i-60)*0.015;break; default:s=i+10*0.1+10*0.75+20*0.05+20*0.03+60*0.015+(i-100)*0.01;break; } printf(\"%f\} 38、计算下面公式的值。 T=1+1/(2*3)+1/(3*4)+……+1/(m*(m+1)),当m=50时的结果(按四 舍五入保留6位小数)。(注:所有变量用double数据类型定义!) 答案:1.480392 #include \"stdio.h\" void main() {double a,b=1; double fun(double a); for(a=2;a<=50;a++) b=b+1/fun(a); printf(\"%.6f\} double fun(double a) {double t; t=a*(a+1); return t; } 39、程序填空:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 程序分析:利用while语句,条件为输入的字符不为'\\n'. #include \"stdio.h\" #include \"conio.h\" void main() { char c; int letters=0,space=0,digit=0,others=0; printf(\"please input some characters\\n\"); while((c=getchar())!='\\n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else others++; } printf(\"all in all:char=%d space=%d digit=%d others=%d\\n\ getch(); } 40、打印出如下图案(菱形) * *** ***** ******* ***** *** * #include \"stdio.h\" void main() {int a,b,c; for(a=1;a<=4;a++) {for(b=1;b<=4-a;b++) printf(\" \"); for(c=1;c<=2*a-1;c++) printf(\"*\"); printf(\"\\n\"); } for(a=1;a<=3;a++) {for(b=1;b<=a;b++) printf(\" \"); for(c=1;c<=7-2*a;c++) printf(\"*\"); printf(\"\\n\"); } } 41、求出[2,478]以内的: (1)最大的素数。 *467 (2)素数数目。 *91 (3)所有素数之和。 *19580 #include \"stdio.h\" void main() {int a,b,c,t,d=0; c=0; for(a=478;a>=2;a--) {t=1; for(b=2;bprintf(\"素数数目:%d\\n所有素数之和:%d\\n\for(a=478;a>=2;a--) {t=1;