您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 《C语言程序设计》复习题库_答案
1、计算下面公式的值。T=1/1!+1/2!+1/3!+……+1/m!当m=5时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)答案:1.717#includestdio.hfloatjc(floatx){floatjc=1,i;for(i=1;i=x;i++)jc=jc*i;returnjc;}voidmain(){floatjc(floatx);floatm,t=0,i;printf(PleaseInput:\n);scanf(%f,&m);for(i=1;i=m;i++)t=t+1/jc(i);printf(t=%.3f\n,t);}2、程序填空:用*号输出字母C的图案。#includestdio.h#includeconio.hmain(){_printf(***\n);__printf(*\n);printf(*\n);printf(***\n);getch();}3、8232和9678,它们的个、十、百、千各位数字之和是15的倍数,8+2+3+2=15,9+6+7+8=30。编写程序,求四位数的所有奇数中,这样的数(各位数字之和是15的倍数)的总和。(注:所有变量用long数据类型定义!)答案:1533459#includestdio.hlongf(longx){longs=0;if(x%2!=0){while(x0){s=s+x%10;x=x/10;}if(s%15==0)return1;elsereturn0;}elsereturn0;}voidmain(){longf(longx);longi,sum=0;for(i=1000;i=9999;i++)if(f(i))sum=sum+i;printf(sum=%ld\n,sum);}4、下面程序的功能是:计算并输出700以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)答案:6591#includestdio.hvoidmain(){inttotal=0,mc=1,k=700;//改为:inttotal=0,mc=0,k=700;intpm[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,total);}5、求x=1+1/5+1/7+1/9+…的近似值,直到最后一项的绝对值小于10-5为止。#includemath.h#includestdio.hmain(){inti;doublex;x=1;i=5;do{x=x+1/(double)i;i=i+2;}while(fabs(1/(double)i)1e-5);printf(%.2lf\n,x);}输出:6.0586、计算如下公式的A20值。A1=1,A2=1/(1+A1),A3=1/(1+A2),A4=1/(1+A3),......(按四舍五入保留10位小数)。答案:0.6180339850(1)可用递归:1n=1F(n)=1/(1+f(n-1))n1#includestdio.hdoublef(doublen){doublea;if(n==1)a=1;elsea=1.0/(1+f(n-1));returna;}voidmain(){doublef(doublen);printf(f(20)=%.10lf\n,f(20));}(2)不用递归:#includestdio.hvoidmain(){doublei,c,a=1,b=1,x;for(i=1;i20;i++){c=a;a=b;b=c+b;}x=a/b;printf(x=%.10lf\n,x);}7、求[10,1600]之间能被7整除的奇数之和。答案:90965(1)用函数可写成:#includestdio.hintjx(intx){if(x%2!=0)return1;elsereturn0;}intf(intx){if(jx(x))if(x%7==0)return1;elsereturn0;elsereturn0;}voidmain(){intjx(intx);intf(intx);inti,s=0;for(i=10;i=1600;i++)if(f(i))s=s+i;printf(s=%d\n,s);}(2)不用函数可写成:#includestdio.hvoidmain(){intjx(intx);intf(intx);inti,s=0;for(i=10;i=1600;i++)if(i%2!=0&&i%7==0)s=s+i;printf(s=%d\n,s);}8、函数mystrlen(char*s)的功能是求字符串s的长度。请填空。intmystrlen(char*s){intnum=0;while(*s++!='\0'){_num++_;}return(num);}9、[100,500]之间同时满足除以7余5,除以5余3,除以3余1的整数之和。答案:1042#includestdio.hvoidmain(){inti,sum=0;for(i=100;i=500;i++){if(i%7==5&&i%5==3&&i%3==1)sum=sum+i;}printf(sum=%d\n,sum);}10、求[100,999]之间所有的素数的个数。答案:143#includestdio.hintsushu(intx){inti;for(i=2;ix;i++)if(x%i==0)break;if(i==x)return1;elsereturn0;}voidmain(){intsushu(intx);inti,num=0;for(i=100;i=999;i++)if(sushu(i))num++;printf(num=%d\n,num);}11、编写程序,求满足下列条件的所有四位数ABCD的个数,该四位数是8的倍数,且A+B=B+C,即第1位数加上第2位数等于第2位数加上第3位数。答案:110#includestdio.hintf(intx){inta,b,c,d;a=x/1000;b=x/100%10;c=x/10%10;d=x%10;if(a+b==b+c)return1;return0;}voidmain(){inti,num=0;for(i=1000;i=9999;i++)if(i%8==0)if(f(i))num++;printf(num=%d\n,num);}12、数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+4+7….。下列程序的功能是求出该数列前10项的和。请改正程序中的错误,并运行修改后的程序,给出程序结果。(注:只有一处错误!)答案:311#includestdio.hvoidmain(){longsum=0,a[30]={1,2,1};intk,j;for(k=3;k10;k++)a[k]=a[k-1]+a[k-2]+a[k-3];for(j=1;j=10;j++)sum+=a[j];//改为:sum+=a[j-1];printf(%ld\n,sum);}13、/*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/答案:61#includestdio.hintprime(intx){intk;for(k=2;kx;k++)if(_x%k==0_)break;if(k==x)return1;elsereturn0;}voidmain(){inta,b,n=0;intprime(intx);for(a=2;a=1998;a++){if(prime(a)==1){b=a+2;if(_prime(b)==1_)n++;}}printf(%d\n,n);}14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。答案:4#includestdio.hvoidmain(){inti,num=0;inta,b,c;for(i=200;i=400;i++){a=i/100;b=i/10%10;c=i%10;if(a*b*c==42&&a+b+c==12)num++;}printf(num=%d\n,num);}15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?答案:9#includestdio.hvoidmain(){intnum=0;inti,j,k;//i为大学生人数,j为中学生人数,k为小学生人数for(i=1;i=30;i++)for(j=1;j=30-i;j++)for(k=1;k=30-i-j;k++)if(i*3+j*2+k*1==50&&i+j+k==30){printf(%d,%d,%d\n,i,j,k);num++;}printf(num=%d\n,num);}16、爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?答案:119#includestdio.hvoidmain(){intx;for(x=1;;x++)if((x%2==1)&&(x%3==2)&&(x%5==4)&&(x%6==5)&&(x%7==0)){printf(%d\n,x);break;}}17、求1000以内最大的10个素数的和。答案:9664#includestdio.hintprime(longn){longk;for(k=2;k=n-1;k++)if(__n%k==0__)return0;return1;}voidmain(){longt,total=0,num=0;intprime(longn);for(t=1000;t=2;t--){if(_prime(t)__){total=total+t;num++;}if(num==10)break;}printf(\n%ld,total);}18、/*求1!+2!+3!+...+7!,7!表示7的阶乘。*/答案:5913#includestdio.hlongjc(longx){longk,fac=1;for(k=1;_k=x__;k++)fac*=k;_returnfac__;}voidmain(){longn,sum=0;longjc(longx);for(n=1;n=7;n++)_sum=sum+jc(n)_;printf(\n%ld,sum);}19、求10000以内所有完数之和,完数是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。(注:所有变量用int数据类型定义!)答案:8658#includestdio.hintws(intx){inti,s=0;for(i=1;ix;i++)if(x%i==0)s=s+i;if(s==x)return1;elsereturn0;}voidmain(){intws(intx);inti,sum=0;for(i=1;i=10000;i++)if(ws(i))sum=sum+i;printf(sum=%d\n,sum);}20、/*数列1,2,1,4,7,12,23…具有这样的特征,从第四项(也就是4)开始,每一项是前三项之和,4=1+2+1,7=2+1+4,12=1+
本文标题:《C语言程序设计》复习题库_答案
链接地址:https://www.777doc.com/doc-6144163 .html