C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案.doc
《C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案.doc》由会员分享,可在线阅读,更多相关《C语言程序设计_第三版_谭浩强主编第6—8章课后习题答案.doc(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言第68章课后习题答案第六章 循环语句6.1输入两个正数,求最大公约数和最小公倍数. #include void main() int a,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(它们的最大公约数为:%dn,a); printf(它们的最小公倍数为:%dn,num1*num2/a); 编译已通过6.2
2、输入一行字符,分别统计出其中英文字母,空格,数字和其它字符的个数.解: #include void main() char c;int letters=0,space=0,degit=0,other=0;printf(请输入一行字符:n);while(c=getchar()!=n) if(c=a&cA&c=0&c=9) digit+; else other+; printf(其中:字母数=%d 空格数=%d 数字数=%d 其它字符数=%dn,letters,space, digit,other); 6.3求s(n)=a+aa+aaa+aaa之值,其中a是一个数字,n表示a的位数。解: void
3、 main() int a,n,count=1,sn=0,tn=0; printf(请输入a和n的值:n); scanf(%d,%d,&a,&n); printf(a=%d n=%d n,a,n); while(count=n) tn=tn+a; sn=sn+tn; a=a*10; +count; printf(a+aa+aaa+=%dn,sn); 6.4 求 (即1+2!+3!+4!+20!)void main() float n,s=0,t=1; for(n=1;n=20;n+) t=t*n; s=s+t; printf(1!+2!+20!=%en,s); 阶乘利用递归,再求和:#incl
4、udeusing namespace std;long Func(int n)if(1=n)return n;if(n1)return n*Func(n-1);main()long s=0;int i=1;while (i=6)s=s+Func(i);i+;coutsendl;6.5 求 。void main() int k,N1=100,N2=50,N3=10; float s1=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=
5、1;k=N3;k+) /*计算1到10各数倒数之和*/ s3=s3+1.0/k; printf(总和=%8.2fn,s1+s2+s3); 已通过int main()int k=1,i=11,j=51;float s=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位数,其个位数字立方和等于该数本身。 #includevoid main() int i,j,k,n; printf( 水仙花数是:n); for(n=100;n10
6、00;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(%dn,n); printf(n); 编译已通过153 370 371 4076.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子。 #include #define M 1000 /*定义寻找范围*/ void main() int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9; int i,j,n,s; for(j=2;j=M;j+) n=0; s=j; f
7、or(i=1;i1) 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); 方法二:此题用数组方法更为简单. void main() int k10; int i,j,n,s; for(j=2;j=1000;j+) n=-
8、1; s=j; for(i=1;ij;i+) if(j%i)=0) n+; s=s-i; kn=i;/*将每个因子赋给k0,k1.k9*/ if(s= =0) printf(%d是一个完数,它的因子是:,j); for(i=0;in;i+) printf(%d,ki); printf(%dn,kn); 6.8 有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13,求出这个数列的前20项之和. 解: #include void main() int n,t,number=20; float a=2,b=1,s=0; for(n=1;n=number;n+) s=s+a/b; t=
9、a,a=a+b,b=t; printf(总和=%9.6fn,s); 编译已通过=32.6.9球反弹问题 #include void main() float sn=100.0,hn=sn/2; int n; 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.m反弹0.m6.10猴子吃桃问题#include void main() int day,x1,x2; day=9; x2=1; whi
10、le(day0) x1=(x2+1)*2; x2=x1; day-; printf(桃子总数=%dn,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。#
11、include #include void main() float x0,x1,a; scanf(%f,&a); x1=a/2; do x0=x1;x1=(x0+a/x0)/2;while(fabs(x0-x1)=0.00001); printf(%.3fn,x1); 编译已通过6.12 用牛顿迭代法求方程在1.5附近的根。 #include void main() double x,y;x=1.5; doy=2*x*x*x-4*x*x+3*x-6; x=x-y/(6*x*x-8*x+3);while(y!=0); printf(x=%.3fn,x); 编译已通过x=2.0006.13用二分
12、法求方程在(-10,10)之间的根: #include void main()double x1,x2,y1,y2;x1=-10;x2=10; doy1=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=%.3fn,x1,x2); 编译已通过x1=2.000,x2=2.0006.14打印图案 #include void main()
13、 int i,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乒乓比赛 #include void main() char i,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=
14、x;k=z;k+) if(i!=k & j!=k) if(i!=x & k!=x & k!=z) printf(顺序为:na-%ctb-%ctc-%cn,i,j,k); 编译已通过7.1用筛选法求100之内的素数. /*用筛选法求100之内的素数*/ #include #define N 101 void main() int i,j,line,aN; for(i=2;iN;i+) ai=i; 6 for(i=2;isqrl(N);i+) for(j=i+1;jN;j+) if(ai!=0 & aj!=0) if(aj%ai=0) aj=0; 11 printf(n); for(i=2,lin
15、e=0;iN;i+) if(ai!=0) printf(%5d,ai); line+; if(line=10) printf(n); line=0; 21 6,11,21没通过7.2用选择法对10个数排序. /*选择法排序.*/ #include #define N 10 void main() int i,j,min,temp,aN; /*输入数据*/ printf(请输入十个数:n); for (i=0;iN;i+) printf(a%d=,i); scanf(%d,&ai); printf(n); for(i=0;iN;i+) printf(%5d,ai); printf(n); /*排
16、序*/ for (i=0;iN-1;i+) min=i; for(j=i+1;jaj) min=j; temp=ai; ai=amin; amin=temp; /*输出*/ printf(n排序结果如下:n); for(i=0;iN;i+) printf(%5d,ai); 编译已通过7.3对角线和: /*计算矩阵对角线元素之和*/ #include #include void main() int a33; int i,j;/i为行j为列 int sum=0; int sum1=0; /输入 for( i=0; i=2; i+) for( j=0; j=2; j+) printf ( 请输入第
17、%d行第%d列的数:, i+1, j+1); scanf (%d,&aij); printf(n); /求和 for( i=0; i=2; i+) for( j=0; j=2; j+) if(i=j) sum = sum+aij; if(i+j=2) sum1= sum1+aij; 7.4插入数据到数组 /*插入数据到数组*/ #include void main() int a11=1,3,6,9,13,15,19,27,30,80; int temp1,temp2,number,end,i,j; printf(初始数组如下:); for (i=0;iend) a10=number; els
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第三 谭浩强 主编 课后 习题 答案
限制150内