C语言答案解析 下载本文

int f(int x) { int a,b,c,d; a=x/1000; b=x/100; c=x/10; d=x; if(a+b==b+c) return 1; return 0; }

void main() { int i,num=0; for(i=1000;i<=9999;i++) if(i%8==0) if(f(i)) num++; printf(\}

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,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=1;j<=10;j++ )

sum += a[j]; //改为:sum+=a[j-1]; printf(\ }

13、 /*求1到2000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ 答案:61 #include int prime(int x) {

int k;

for(k=2;k

if(_x%k==0_) break; if(k==x) return 1;

else return 0; }

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++; } }

printf(\}

14、编写程序,统计200~400之间的所有满足三个数字之积为42,三个数字之和为12的数的个数。答案:4 #include void main() { int i,num=0; int a,b,c; for(i=200;i<=400;i++) { a=i/100; b=i/10; c=i; if(a*b*c==42 && a+b+c==12) num++; } printf(\}

15、有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?答案:9 #include void main() { int num=0; int i,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(\ num++; } printf(\}

16、爱因斯坦走台阶:有一台阶,如果每次走两阶,最后剩一阶;如果每次走三阶,最后剩两阶;如果每次走四阶,最后剩三阶;如果每次走五阶,最后剩四阶;如果每次走六阶,最后剩五阶;如果每次走七阶,刚好走完.求满足上述条件的最小台阶数是多少?答案:119 #include void main() { int x;

for(x=1;;x++)

if ((x%2==1)&&(x%3==2)&&(x%5==4)&&(x%6==5)&&(x%7==0)) {printf(\}

17、求1000以内最大的10个素数的和。 答案:9664 #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)__) {

total=total+t; num++; }

if(num==10)break; }

printf(\}

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=sum+jc(n)_; printf(\}

19、求10000以内所有完数之和,\完数\是指:一个数如果刚好与它所有的真因子(不包括该数本身)之和相等,如:6=1+2+3,则6就是一个完数。(注:所有变量用int数据类型定义!) 答案:8658 #include int ws(int x) { int i,s=0; for(i=1;i

void main() { int ws(int x); int i,sum=0; for(i=1;i<=10000;i++) if(ws(i)) sum=sum+i; printf(\}

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 #include #define N 30 void main() {

long a[N]; int k; clrscr();

a[0] = 1; a[1] = 2; a[2]=1;

for( k=3;k<=20;k++ ) //改为:for( k=3;k<=24;k++ ) a[k] = a[k-1]+a[k-2]+a[k-3]; printf(\ }

21、/*求区间[200,3000]中所有回文数的和,回文数是正读与反读都是一样的数,如525,1551。*/ 答案:87970 #include int hws(long n) {

long x=n,t=0,k; while(x>0) {

k=x; t = t*10 + k; x=x/10; }

if( _t==n__) 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(\}

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