C程序设计(第四版)_谭浩强_第五章_课后习题答案.docx

上传人:rrsccc 文档编号:9829752 上传时间:2021-03-29 格式:DOCX 页数:19 大小:20.85KB
返回 下载 相关 举报
C程序设计(第四版)_谭浩强_第五章_课后习题答案.docx_第1页
第1页 / 共19页
C程序设计(第四版)_谭浩强_第五章_课后习题答案.docx_第2页
第2页 / 共19页
C程序设计(第四版)_谭浩强_第五章_课后习题答案.docx_第3页
第3页 / 共19页
C程序设计(第四版)_谭浩强_第五章_课后习题答案.docx_第4页
第4页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C程序设计(第四版)_谭浩强_第五章_课后习题答案.docx》由会员分享,可在线阅读,更多相关《C程序设计(第四版)_谭浩强_第五章_课后习题答案.docx(19页珍藏版)》请在三一文库上搜索。

1、C程序设计(第四版)_谭浩强_第五章_课后习题答案循环结构程序设计P115 5.1 用while计算1至100的合.#includeint main()int i=1,sum=0;while(isum=sum+i;i+;printf(The sum is %d .n,sum);return 0;#includeint main()int i=1,sum=0;do/ do-while可以做的事,用while都可以做到. /do-while先做一次执行,再判断条件,而while却是先做一个条件,再执行.sum=sum+i;i+;while(iprintf(The sum is %d .n,sum)

2、;return 0;P118 5.3 比较do-while与while的差别.#includeint i,sum=0;printf(Please input a number :);scanf(%d,&i); /输入10以内,正常,11的话,则sum仍然是0.while(isum=sum+i;i+;printf(The sum of 1-10 is %d .n,sum);return 0;#includeint main()int i,sum=0;printf(Please input a number :);scanf(%d,&i); /输入10以内,结果一样.输入11的话,先做操作,所以s

3、um=11.dosum=sum+i;i+;while(iprintf(The sum of 1-10 is %d .n,sum);return 0;#includeint main()int i,b=0,a,c;for(i=0;iprintf(Please input amount :); /循环体内套有输出语句以及跳出语句.scanf(%d,&a);b=b+a;if(b=100)break; /break是用于跳出循环,对if无效,对while for switch 这一类.c=b/i;printf(conut is %d , aver is %d ,i+1,c); /注意%号后的形式,否则

4、可能输出错误.return 0;P127 5.5 continue的例子.#includeint main()int i;for(i=1;iif(i%3!=0)continue; /跳过本次I,执行下一个i.printf(%d ,i);printf(n);return 0;P128 5.6 形成一个4*5的矩阵.#includeint main()int i,j,a=0; /没有给初值,会出现警告: 使用了未初始化的局部变量“a”.for(i=1;ifor(j=1;jif(a%5=0)printf(n);printf(%dt,i*j);printf(n);return 0;P131 5.7 用

5、一个交错的式子求哌的近似值.#include#includeint main() /四分之哌等于(1)-(1/3)+(1/5)-(1/7)+(1/9)-(1/11).float s=1,n=1,m,sum=0,t;for(m=1;m=m+2) /不确定哪项才会小于等于十的负六次方,所以不指定,无限下去. /不指定第二项,执行语句中应该有控制跳出的句子,否则死循环.t=(s)*(n/m); /这是第一项,s是符号,if(fabs(t)break;sum=sum+t; /因为累加项在这里,所以,一旦跳出就不会累加进来了.s=s*(-1); /变号一次.printf(四分之一哌的值是%f.n,sum

6、);printf(一个完整哌的值是%f.n,sum*4);return 0;/下面这段小代码用来验证关于数值型数据类型的关系.去掉注释,可运行./如果出现类似值为全1或是全零的话,一般可以考虑数据类型赋值或是定义错了的问题./#include /int main() /在C语言中,1.0认为是实数,即是double型,所以,如果你把它用float输出的话,会有警告:警告 1 warning C4305: “=”: 从“double”到“float”截断./ float m,a,b,c; /一旦定义了是这种类型的话,输出或是赋值的时候只能扩展不能截断,意思就是能变成double型,不能变成int

7、型啦.而且后面的赋值会跟着它变成相应的类型.比如下面的m=1,其实得到的是m=1.0./ int d,e,f;/ m=1;/ a=1.0/3;/ b=1/3;/ c=m/3;/ d=1.0;/ e=1/4;/ f=1.0/4;/ printf(%lf(float用double的%lf来输出是可以的.)n%fn%fn%fn,m,a,b,c); /不管上面定义什么,这边写的输出类型是什么,就按相应的类型输出,有可能会出错,所以建议按定义的类型来输出.当然扩展的是不会错的,截断的是会错的,比如float可以用%lf来输出,而不能用%d来输出./ printf(%dn%dn%dn,d,e,f); /但

8、是,不相应的int型不可以用%f来输出的.因为int float就不同种类,一个是整数,一个是小数,float double同样是有小数点的!/ return 0;/P133 5.8 著名的Fibonacci(费波那契数列问题)#includeint main() /这个就是著名的Fibonacci(费波那契数列问题)int f1=1,f2=1,f3,i;printf(%12dn%12dn,f1,f2);for(i=1;if3=f1+f2;printf(%12dn,f3); /这个问题同样适用于一对兔子一个月生一对的问题.,f1=f2; /f1=f1+f2;此时它们各是,所以,现在的f1是.f

9、2=f3; /f2=f2+f1;此时的f1已经是最先二者之和了.可以不用到f3.return 0;#include#includeint main()double num;int i;printf(Please input a number :);scanf(%lf,&num); /因为sqrt要求是浮点型,那就给它浮点型,需要时再强制转换.for(i=2;iif(int)num%i=0) /如果在这期间有任何一个可以为零的话,则不是素数.break; /当然跳出. /执行到这里的时候,i=5,已经变成了!if(iprintf(Not %d,(int)num);else/如上所述,i=5,超出

10、了求根的值,所以是素数.printf(Yes %d,(int)num);return 0;#include#includeint main()double j;int i,k=0;for(j=100;jfor(i=2;iif(int)j%i=0)break;k=k+1; /这里是布局的开头.学习一下,有助逻辑.if(iprintf(Not %d ,(int)j);if(k%5=0) /5个换一次行.printf(n);elseprintf(Yes %d ,(int)j);if(k%5=0)printf(n);return 0;P139 5.11 密码转换.#includeint main()c

11、har c;c=getchar();while(c!=n) /这也可以用数组来实现.if(c=a&cif(c=w&cc=c-22;elsec=c+4;printf(%c,c);c=getchar(); /套在循环里,依次得到字母,而while中判断回车为结束.printf(n); /这是布局问题.return 0;P140 0.3 最大公约数和最小公倍数.#includemain ()int m, n, c, d;int gcd(); /这是最大公约数的缩写,此处调用函数,可以不写里面的实参.int lcm(); /这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf(Plea

12、se input two number :n);scanf(%d %d,&m,&n);c=gcd(m,n); /c获取最大公约数d=lcm(m,n); /d获取最小公倍数printf(The GCD of %d and %d is : %d !n, m, n, c);printf(The LCM of %d and %d is : %d !n, m, n, d);return 0;int gcd(int x, int y) /最大公约数Greatest Common Divisorint temp;while(x%y!=0)temp=y; /y在下一轮中作为除数,即是下一轮中的X,所以先闪一边

13、去.y=x%y; /x,y的余数作为下一轮中的Y,由x%y来取得.x=temp; /刚才temp中存储了y的值,现在拿出来作为下一轮中的X使用.return y; /这是每一轮中的被除数,按原理来,这就是最大公约数,即累除法的原理. int lcm(int x, int y) /最小公倍数Lowest Common Multipleint i, temp;if(x /以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;for(i=1; i=0;k-)sk=j%(int)pow(10,k+1)/(int)pow(10,k);y=pow(sk,3);sum+=y;printf(

14、%d-%d-%dt,k,sk,j);printf(%dn,sum);return 0;P140 0.8 水仙花数./#include /int main() /在%和/号之间,以前pow.以后再做./ int i,j,k,a,b,c,sum=0; /这里逻辑对,算出来却错了./ for(i=2;i/ / for(j=pow(10,i);j/ for(k=0;k/ / sum+=pow(j%pow(10,i+1)/pow(10,i),3);/ / if(sum=j)/ / printf(%d 是水仙花数!n,j);/ / sum=0;/ / / return 0;/ /为什么还是无法实现?!#i

15、nclude#includeint main()int a,b,c,i,sum=0; /这里只计算三位数的.for(i=100;ia=i/100;b=i%100/10;c=i%10;sum+=a*a*a+b*b*b+c*c*c;if(sum=i)printf(%d 是水仙花数.n,i);sum=0;return 0;P141 0.9 完数.#includeint main()int i,j,r;for(i=1;ir=0; /每次清零重来.类似水仙中的sum.for(j=1;jif(i%j=0) /除得尽即是因子.r=r+j; /然后累加进去.if(r=i) /若相等.printf(%d 是完数

16、.n,i);return 0;P141 0.10 2/1+3/2+5/3+8/5+13/8#includeint main() /10.007051double i,a=2,b=1,c,s=0; /a是分子,b是分母.for(i=0;is+=a/b; /中间储值变量.c=a+b;b=a;a=c;printf(%lfn,s);return 0;#includeint main() /从一百开始,减一半再自加两次,下降一次,反弹一次.double sum=100,high=100,up,donw,i;for(i=1;iup=high/2;donw=up;high=donw; /自咬尾巴问题.sum

17、+=donw*2;printf(%lf %lfn,donw,sum);return 0;P141 0.12 猴子吃桃子.#includeint main() /从一百开始,减一半再自加两次,下降一次,反弹一次.int i,sum=1;for(i=1;iprintf(倒数第%d天还剩有%d个桃子.n,i,sum);sum=(sum+1)*2;/printf(%dn,sum);return 0;P141 0.16 输出星号棱形图案.#include#includemain() /只关注左半部分.右半部分无视空格.int i,j,k,m=6; /m可指定,指定中心点位置.可任意奇偶.for(i=1;ifor(j=1;jprintf( );for(k=1;kprintf(n);for(i=m-1;i0;i-) /下半部分.其实也是倒三角. /减一是因为行数问题.这是中心行以下的.for(j=m-1;j=i;j-)printf( );for(k=1;kprintf(*);printf(n);getch(); /用户反应后结束.但,没必要.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1