




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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先做一次执行,再判断条件,而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 main()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=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+) 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); /这是第一项,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三者关复杂关系的,乱啊,如果看不懂,可以通过实验自己明白来./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用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() /这个就是著名的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.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)num);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);else 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 /最大公约数用累除法,除到无余数时的被除数是最大公约数.main ()int m, n, c, d;int gcd(); /这是最大公约数的缩写,此处调用函数,可以不写里面的实参.int lcm(); /这是最小公倍数的缩写,此处调用函数,可以不写里面的实参.printf(Please 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,所以先闪一边去.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(xy) /此段代码结果是保证二者大的数在X上,小的数在Y上.即小于号降序. /以下为经典三行码,实现两个数的互换.temp=x;x=y;y=temp;for(i=1; i=y; i+) /设定一个区间,从1至大的数之间的循环.if(!(x*i)%y) /此式子如有余数,加上!号,会是假,则不返回,进行下一轮. /如此往复,直到取模无余数,那么小的数X乘以区间当前的I值,就是最小公倍数. return x*i;P140 0.4 判断一串输入的字符.#include int main() char ch;int a=0,b=0,c=0,d=0,e=0;printf(Please input the stringn);while(ch=getchar()!=n) /直到回车.if(ch=a)a+;else if(ch= )c+;else if(ch47)d+;else if(ch=A)b+;elsee+;printf(大写%d 小写%d 空格%d 数字%d 其它%dn,a,b,c,d,e);P140 0.5 2+22+222+2222系列的和.#include /不理解时可以百度或是谷歌更多的信息.int main() /想办法既快速做完,又要消化理解!int temp,i,a,n,sum=0; /主逻辑,友好性暂时放松.scanf(%d %d,&a,&n); /a是数字,n是要乘的个数.temp=a; /先把第一阶的值存起来.for(i=0;in;i+)sum=sum+a;printf(%d + ,a); /事关布局.a=a*10+temp; /重点是每次乘,然后加上上一个数.printf(= %d .,sum);return 0;P140 0.6 1!+2!+3!+4!.的值.#include int main() /1!+2!+3!+4!.int i,j,k,sum=0,m=1;scanf(%d,&k); /比如设定为,值为.for(i=1;i=k;i+) /第一层循环,指定到.for(j=1;j=i;j+) /第二层循环,指定至当前数.m=m*j; /到此是阶乘的结构.sum=sum+m;m=1;printf(%d,sum); /完全不理解时,搜索并参考.return 0; /尝试自己做,第一次做出来就是自己的东西了.P140 0.7 1至100,1至50平方,1至10倒数的总和.#include int main() int a,b;double c,asum=0,bsum=0,csum=0;for(a=1;a=100;a+) /三个块分别注释验证结果.asum=asum+a;for(b=1;b=50;b+) /在VS运行中,注意*.cpp为C+语言.bsum=bsum+b*b; /为了避免语言差别,请注意文件名为*.c.for(c=1;c=10;c+) /c作浮点运算,所以定义在double类型中.csum=csum+1/c;printf(%lf,asum+bsum+csum);return 0;PP#include #include int main()int j,k,s6,x=100,y,sum=0;for(j=153;j=0;k-)sk=j%(int)pow(10,k+1)/(int)pow(10,k);y=pow(sk,3);sum+=y;printf(%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=4;i+) /计算机在想什么,看来它的大脑难以模拟./for(j=pow(10,i);j=pow(10,i+1)-1;j+) /我不完全明白它遵守的逻辑./for(k=0;k=i;k+)/sum+=pow(j%pow(10,i+1)/pow(10,i),3);/if(sum=j)/printf(%d 是水仙花数!n,j);/sum=0;/return 0;/ /为什么还是无法实现?!#include #include int main()int a,b,c,i,sum=0; /这里只计算三位数的.for(i=100;i1000;i+)a=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 完数.#include int main()int i,j,r;for(i=1;i=1000;i+) /零是个临界值,不能包括它.r=0; /每次清零重来.类似水仙中的sum.for(j=1;ji;j+)if(i%j=0) /除得尽即是因子.r=r+j; /然后累加进去.if(r=i) /若相等.printf(%d 是完数.n,i);return 0;P141 0.10 2/1+3/2+5/3+8/5+13/8#include int main() /10.007051double i,a=2,b=1,c,s=0; /a是分子,b是分母.for(i=0;i6;i+) /二十可以用户指定.s+=a/b; /中间储值变量.c=a+b;b=a;a=c;printf(%lfn,s);return 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025初三升高一数学暑假衔接讲义25讲含答案(必修一内容)5.6 三角函数倍角公式
- 统编版2025年七年级语文下学期期末总复习(专题训练)专题04文言文阅读(考题猜想)(学生版+解析)
- 爱岗敬业14课件
- 考研复习-风景园林基础考研试题【夺冠】附答案详解
- 风景园林基础考研资料试题及参考答案详解【综合题】
- 《风景园林招投标与概预算》试题A附参考答案详解(考试直接用)
- 2025-2026年高校教师资格证之《高等教育法规》通关题库含答案详解(考试直接用)
- 泰州市2024-2025学年三年级下学期数学期末试题一(有答案)
- 2023国家能源投资集团有限责任公司第一批社会招聘笔试备考题库含答案详解ab卷
- 2025年河北省定州市辅警招聘考试试题题库及参考答案详解一套
- C型钢检验报告
- 法国“左岸派”电影课件
- AS9100D体系标准中文版
- 艾滋病、梅毒、乙肝试验室检测技术
- 三一集团组织机构方案-PPT课件
- WS T 510-2016病区医院感染管理规范
- 控烟培训课件.ppt.ppt
- 《千家诗》全文阅读
- 儿童身高预测与促进课件
- 年产3000吨新茶饮及抹茶智能精深产能加工项目可行性研究报告-甲乙丙资信
- 发动机综合分析仪在现代汽车维修中的应用
评论
0/150
提交评论