您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案
C语言第6—8章课后习题答案第六章循环语句6.1输入两个正数,求最大公约数和最小公倍数.#includestdio.hvoidmain(){inta,b,num1,num2,temp;printf(请输入两个正整数:\n);scanf(%d,%d,&num1,&num2);if(num1num2){temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(它们的最大公约数为:%d\n,a);printf(它们的最小公倍数为:%d\n,num1*num2/a);}编译已通过6.2输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解:#includestdio.hvoidmain(){charc;intletters=0,space=0,degit=0,other=0;printf(请输入一行字符:\n);while((c=getchar())!='\n'){if(c='a'&&c='z'||c'A'&&c='Z')letters++;elseif(c=='')space++;elseif(c='0'&&c='9')digit++;elseother++;}printf(其中:字母数=%d空格数=%d数字数=%d其它字符数=%d\n,letters,space,digit,other);}6.3求s(n)=a+aa+aaa+…+aa…a之值,其中a是一个数字,n表示a的位数。解:voidmain(){inta,n,count=1,sn=0,tn=0;printf(请输入a和n的值:\n);scanf(%d,%d,&a,&n);printf(a=%dn=%d\n,a,n);while(count=n){tn=tn+a;sn=sn+tn;a=a*10;++count;}printf(a+aa+aaa+…=%d\n,sn);}6.4求(即1+2!+3!+4!+…+20!)voidmain(){floatn,s=0,t=1;for(n=1;n=20;n++){t=t*n;s=s+t;}printf(1!+2!+…+20!=%e\n,s);}阶乘利用递归,再求和:#includeiostreamusingnamespacestd;longFunc(intn){if(1==n)returnn;if(n1)returnn*Func(n-1);}main(){longs=0;inti=1;while(i=6){s=s+Func(i);i++;}coutsendl;}6.5求。voidmain(){intk,N1=100,N2=50,N3=10;floats1=0.0,s2=0.0,s3=0.0;for(k=1;k=N1;k++)/*计算1到100的和*/{s1=s1+k;}for(k=1;k=N2;k++)/*计算1到50各数平方和*/{s2=s2+k*k;}for(k=1;k=N3;k++)/*计算1到10各数倒数之和*/{s3=s3+1.0/k;}printf(总和=%8.2f\n,s1+s2+s3);}已通过intmain(){intk=1,i=11,j=51;floats=0.0;while(k=10){s=s+k+k*k+1.0/k;while(k==10&&i=50){s=s+i+i*i;while(i=50&&j=100){s=s+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。#includestdio.hvoidmain(){inti,j,k,n;printf(水仙花数是:\n);for(n=100;n1000;n++){i=n/100;j=n/10-i*10;k=n%10;if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){printf(%d\n,n);}}printf(\n);}编译已通过1533703714076.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子。#includestdio.h#defineM1000/*定义寻找范围*/voidmain(){intk0,k1,k2,k3,k4,k5,k6,k7,k8,k9;inti,j,n,s;for(j=2;j=M;j++){n=0;s=j;for(i=1;ij;i++){if((j%i)==0){n++;s=s-i;switch(n)/*将每个因子赋给k0,k1…k9*/{case1:k0=i;break;case2:k1=i;break;case3:k2=i;break;case4:k3=i;break;case5:k4=i;break;case6:k5=i;break;case7:k6=i;break;case8:k7=i;break;case9:k8=i;break;case10:k9=i;break;}}}if(s==0){printf(%d是一个完数,它的因子是,j);if(n1)printf(%d,%d,k0,k1);if(n2)printf(,%d,k2);if(n3)printf(,%d,k3);if(n4)printf(,%d,k4);if(n5)printf(,%d,k5);if(n6)printf(,%d,k6);if(n7)printf(,%d,k7);if(n8)printf(,%d,k8);if(n9)printf(,%d,k9);printf(\n);}}}方法二:此题用数组方法更为简单.voidmain(){intk[10];inti,j,n,s;for(j=2;j=1000;j++){n=-1;s=j;for(i=1;ij;i++){if((j%i)==0){n++;s=s-i;k[n]=i;/*将每个因子赋给k0,k1...k9*/}}if(s==0){printf(%d是一个完数,它的因子是:,j);for(i=0;in;i++)printf(%d,,k[i]);printf(%d\n,k[n]);}}}6.8有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…求出这个数列的前20项之和.解:#includestdio.hvoidmain(){intn,t,number=20;floata=2,b=1,s=0;for(n=1;n=number;n++){s=s+a/b;t=a,a=a+b,b=t;}printf(总和=%9.6f\n,s);}编译已通过=32.6602596.9球反弹问题#includestdio.hvoidmain(){floatsn=100.0,hn=sn/2;intn;for(n=2;n=10;n++){sn=sn+2*hn;/*第n次落地时共经过的米数*/hn=hn/2;/*第n次反跳高度*/}printf(第10次落地时共经过%f米\n,sn);printf(第10次反弹%f米.\n,hn);}编译已通过经过299.609375m反弹0.097656m6.10猴子吃桃问题#includestdio.hvoidmain(){intday,x1,x2;day=9;x2=1;while(day0){x1=(x2+1)*2;x2=x1;day--;}printf(桃子总数=%d\n,x1);}编译已通过=1534上面的程序是从最后一天计算,一直到第一天。当while第一次循环,既day=9的时候,X1此时计算的是第9天的桃子数。而X2既是X1前一天的桃子数。计算出第9天的桃子数后,把X1的值赋值给X2,那么X2此时X2就表示第9天的桃子数,再通过while的循环,可以逐步求出第7天,第6天...一直到第一天的桃子数.这里X2=X1,就是一个赋值的过程,为的是求前一天的桃子数.6.11用迭代法求x=。求平方根的迭代公式为:要求前后两次求出的差的绝对值小于0.00001。#includestdio.h#includemath.hvoidmain(){floatx0,x1,a;scanf(%f,&a);x1=a/2;do{x0=x1;x1=(x0+a/x0)/2;}while(fabs(x0-x1)=0.00001);printf(%.3f\n,x1);}编译已通过6.12用牛顿迭代法求方程在1.5附近的根。#includestdio.hvoidmain(){doublex,y;x=1.5;do{y=2*x*x*x-4*x*x+3*x-6;x=x-y/(6*x*x-8*x+3);}while(y!=0);printf(x=%.3f\n,x);}编译已通过x=2.0006.13用二分法求方程在(-10,10)之间的根:#includestdio.hvoidmain(){doublex1,x2,y1,y2;x1=-10;x2=10;do{y1=2*x1*x1*x1-4*x1*x1+3*x1-6;x1=x1-y1/(6*x1*x1-8*x1+3);}while(y1!=0);do{y2=2*x2*x2*x2-4*x2*x2+3*x2-6;x2=x2-y2/(6*x2*x2-8*x2+3);}while(y2!=0);printf(x1=%.3f,x2=%.3f\n,x1,x2);}编译已通过x1=2.000,x2=2.0006.14打印图案#includestdio.hvoidmain(){inti,j,k;for(i=0;i=3;i++){for(j=0;j=2-i;j++)printf();for(k=0;k=2*i;k++)printf(*);printf(\n);}for(i=0;i=2;i++){for(j=0;j=i;j++)printf();for(k=0;k=4-2*i;k++)printf(*);printf(\n);}}编译已通过6.15乒乓比赛#includestdio.hvoidmain(){chari,j,k;/*i是a的对手;j是b的对手;k是c的对手*/for(i='x';i='z';i++){for(j='x';j='z';j++){if(i!=j)for(k='x';k='z';k++){if(i!=k&&j!=k){if(i!='x'&&k!='x'&&k!='z')printf(顺序为:\na--%c\tb--%c\tc--%c\n,i,j,k);}}}}}编译已通过7.1用筛选法求100之内的素数./*用筛选法求100之内的素数*/#includemath.h#defineN101voidmain(){inti,j,line,a[N];for(i=2;iN;i++)a[i]=i;6for(i=2;isqrl(N);i++)for(j=i+1;jN;j++){if(a[i]!=0&&a[j]!=0)if(a[j]%a[i]==0)a[j]=0;11printf(\n);for(i=2,line=0;iN;i++){if(a[i]!=0){printf(%5d,a[i]);line++;if(line==10){printf(\n);line=0;}}21}6,11,21没通过7.2用选择法对10个数排序./*选择法排序.*/#includestdio.h#defineN10voidmain(){inti,j,min,temp,a[N];/*输入数据*/printf(请输入十个数:\n);for(i=0;iN;i++){printf(a[%d]=,i);scanf(%d,&a[i]);}printf(\n);for(i=0;iN;i++)printf(%5d,a[i]);printf(\n);/*排序*/for(i=0;
本文标题:C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案
链接地址:https://www.777doc.com/doc-2908115 .html