C程序设计(第四版)(谭浩强)第五章课后习题答案.doc
《C程序设计(第四版)(谭浩强)第五章课后习题答案.doc》由会员分享,可在线阅读,更多相关《C程序设计(第四版)(谭浩强)第五章课后习题答案.doc(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C程序设计(第四版)(谭浩强)第五章课后习题答案循环结构程序设计P115 5.1 用while计算1至100的合.#include int main()int i=1,sum=0; while(i=100) /对于需要运算的值,要么在运算前可以赋值,要么一开始要指定.sum=sum+i;i+;printf(The sum is %d .n,sum);return 0;P117 5.2 用do-while来做1至100的合.#include int main()int i=1,sum=0;do / do-while可以做的事,用while都可以做到. /do-while先做一次执行,再判断条件,
2、而while却是先做一个条件,再执行.sum=sum+i;i+;while(i=100);printf(The sum is %d .n,sum);return 0;P118 5.3 比较do-while与while的差别.#include int main()int i,sum=0;printf(Please input a number :);scanf(%d,&i); /输入10以内,正常,11的话,则sum仍然是0.while(i=10)sum=sum+i;i+;printf(The sum of 1-10 is %d .n,sum);return 0;#include int mai
3、n()int i,sum=0;printf(Please input a number :);scanf(%d,&i); /输入10以内,结果一样.输入11的话,先做操作,所以sum=11.dosum=sum+i; i+;while(i=10); /此重点在于理解二者的差别.printf(The sum of 1-10 is %d .n,sum);return 0;P126 5.4 break的例子.#include int main()int i,b=0,a,c;for(i=0;i=100)break; /break是用于跳出循环,对if无效,对while for switch 这一类.c=
4、b/i;printf(conut is %d , aver is %d ,i+1,c); /注意%号后的形式,否则可能输出错误.return 0;P127 5.5 continue的例子.#include int main() int i;for(i=1;i20;i+) if(i%3!=0)continue; /跳过本次I,执行下一个i.printf(%d ,i); printf(n); return 0;P128 5.6 形成一个4*5的矩阵.#include int main()int i,j,a=0; /没有给初值,会出现警告: 使用了未初始化的局部变量“a”.for(i=1;i=4;i
5、+) for(j=1;j=5;j+,a+) / a用来控制换行.if(a%5=0)printf(n);printf(%dt,i*j); printf(n);return 0;P131 5.7 用一个交错的式子求哌的近似值.#include #include int 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); /这是第
6、一项,s是符号,if(fabs(t)=1e-6) /应该写在这里,题目要求这一项不累加进去.break;sum=sum+t; /因为累加项在这里,所以,一旦跳出就不会累加进来了.s=s*(-1); /变号一次.printf(四分之一哌的值是%f.n,sum); printf(一个完整哌的值是%f.n,sum*4);return 0;/下面这段小代码用来验证关于数值型数据类型的关系.去掉注释,可运行./如果出现类似值为全1或是全零的话,一般可以考虑数据类型赋值或是定义错了的问题./#include /这是关于int float double三者关复杂关系的,乱啊,如果看不懂,可以通过实验自己明白
7、来./int main() /在C语言中,1.0认为是实数,即是double型,所以,如果你把它用float输出的话,会有警告:警告1warning C4305: “=”: 从“double”到“float”截断./float m,a,b,c; /一旦定义了是这种类型的话,输出或是赋值的时候只能扩展不能截断,意思就是能变成double型,不能变成int型啦.而且后面的赋值会跟着它变成相应的类型.比如下面的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
8、用double的%lf来输出是可以的.)n%fn%fn%fn,m,a,b,c); /不管上面定义什么,这边写的输出类型是什么,就按相应的类型输出,有可能会出错,所以建议按定义的类型来输出.当然扩展的是不会错的,截断的是会错的,比如float可以用%lf来输出,而不能用%d来输出./printf(%dn%dn%dn,d,e,f); /但是,不相应的int型不可以用%f来输出的.因为int float就不同种类,一个是整数,一个是小数,float double同样是有小数点的!/return 0;/P133 5.8 著名的Fibonacci(费波那契数列问题)#include int main()
9、 /这个就是著名的Fibonacci(费波那契数列问题)int f1=1,f2=1,f3,i;printf(%12dn%12dn,f1,f2);for(i=1;i=38;i+) /注意,这是个基础问题,(i=1;i=5;i+)这里其实进行了次运算,因为有f1,f2,要求有个,所以要有个.要么写=38,要么写39,边界问题一定要注意,不可以太随意!f3=f1+f2;printf(%12dn,f3); /这个问题同样适用于一对兔子一个月生一对的问题.,f1=f2; /f1=f1+f2;此时它们各是,所以,现在的f1是.f2=f3; /f2=f2+f1;此时的f1已经是最先二者之和了.可以不用到f3
10、.return 0;P135 5.9 还是求素数,方法不一样.#include #include int main()double num;int i;printf(Please input a number :);scanf(%lf,&num); /因为sqrt要求是浮点型,那就给它浮点型,需要时再强制转换.for(i=2;i=sqrt(num);i+) /这边是=号没错.if(int)num%i=0) /如果在这期间有任何一个可以为零的话,则不是素数.break; /当然跳出. /执行到这里的时候,i=5,已经变成了!if(i=sqrt(num) printf(Not %d,(int)nu
11、m);else /如上所述,i=5,超出了求根的值,所以是素数.printf(Yes %d,(int)num); return 0;P137 5.10 求100至200间的素数.#include /不解释,HOHO.#include int main()double j;int i,k=0;for(j=100;j=200;j+)for(i=2;i=sqrt(j);i+) if(int)j%i=0) break; k=k+1; /这里是布局的开头.学习一下,有助逻辑.if(i=sqrt(j) printf(Not %d ,(int)j);if(k%5=0) /5个换一次行.printf(n);e
12、lse printf(Yes %d ,(int)j);if(k%5=0)printf(n);return 0;P139 5.11 密码转换.#include int main()char c;c=getchar();while(c!=n) /这也可以用数组来实现.if(c=a&c=A&c=w&c=W&c=Z)c=c-22;elsec=c+4;printf(%c,c);c=getchar(); /套在循环里,依次得到字母,而while中判断回车为结束.printf(n); /这是布局问题.return 0;P140 0.3 最大公约数和最小公倍数.#include /最大公约数用累除法,除到无余
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 第四 谭浩强 第五 课后 习题 答案
限制150内