欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:78777464       资源大小:73KB        全文页数:15页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    C程序设计(第四版)(谭浩强)第五章课后习题答案循环结构程序设计P115 5.1 用while计算1至100的合.#include <stdio.h>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 <stdio.h>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 <stdio.h>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 <stdio.h>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 <stdio.h>int main()int i,b=0,a,c;for(i=0;i<=1000;i+)printf("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); /注意%号后的形式,否则可能输出错误.return 0;P127 5.5 continue的例子.#include <stdio.h>int main() int i;for(i=1;i<20;i+) if(i%3!=0)continue; /跳过本次I,执行下一个i.printf("%d ",i); printf("n"); return 0;P128 5.6 形成一个4*5的矩阵.#include <stdio.h>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 <stdio.h>#include <math.h> 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 <stdio.h> /这是关于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 <stdio.h>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 <stdio.h>#include <math.h>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 <stdio.h> /不解释,HOHO>>>>.#include <math.h>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 <stdio.h>int main()char c;c=getchar();while(c!='n') /这也可以用数组来实现.if(c>='a'&&c<='z')|(c>='A'&&c<='Z')if(c>='w'&&c<='z')|(c>='W'&&c<='Z')c=c-22;elsec=c+4;printf("%c",c);c=getchar(); /套在循环里,依次得到字母,而while中判断回车为结束.printf("n"); /这是布局问题.return 0;P140 0.3 最大公约数和最小公倍数.#include <stdio.h> /最大公约数用累除法,除到无余数时的被除数是最大公约数.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(x<y) /此段代码结果是保证二者大的数在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 <stdio.h> 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<='z'&&ch>='a')a+;else if(ch=' ')c+;else if(ch<58&&ch>47)d+;else if(ch<='Z'&&ch>='A')b+;elsee+;printf("大写%d 小写%d 空格%d 数字%d 其它%dn",a,b,c,d,e);P140 0.5 2+22+222+2222系列的和.#include <stdio.h> /不理解时可以百度或是谷歌更多的信息.int main() /想办法既快速做完,又要消化理解!int temp,i,a,n,sum=0; /主逻辑,友好性暂时放松.scanf("%d %d",&a,&n); /a是数字,n是要乘的个数.temp=a; /先把第一阶的值存起来.for(i=0;i<n;i+)sum=sum+a;printf("%d + ",a); /事关布局.a=a*10+temp; /重点是每次乘,然后加上上一个数.printf("= %d .",sum);return 0;P140 0.6 1!+2!+3!+4!.的值.#include <stdio.h> 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 <stdio.h> 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 <stdio.h>#include <math.h>int main()int j,k,s6,x=100,y,sum=0;for(j=153;j<=154;j+)for(k=2;k>=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 <stdio.h> /一步步的发现问题./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 <stdio.h>#include <math.h>int main()int a,b,c,i,sum=0; /这里只计算三位数的.for(i=100;i<1000;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 <stdio.h>int main()int i,j,r;for(i=1;i<=1000;i+) /零是个临界值,不能包括它.r=0; /每次清零重来.类似水仙中的sum.for(j=1;j<i;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 <stdio.h>int main() /10.double i,a=2,b=1,c,s=0; /a是分子,b是分母.for(i=0;i<6;i+) /二十可以用户指定.s+=a/b; /中间储值变量.c=a+b;b=a;a=c;printf("%lfn",s);return 0;P141 0.11 球落地并反弹问题.#include <stdio.h>int main() /从一百开始,减一半再自加两次,下降一次,反弹一次.double sum=100,high=100,up,donw,i;for(i=1;i<10;i+) /不管指定到哪个数,都不会超过三百.up=high/2;donw=up;high=donw; /自咬尾巴问题.sum+=donw*2;printf("%lf %lfn",donw,sum);return 0;P141 0.12 猴子吃桃子.#include <stdio.h>int main() /从一百开始,减一半再自加两次,下降一次,反弹一次.int i,sum=1;for(i=1;i<=10;i+) /临界要清楚,结果要与手算的前几个实例相匹配.printf("倒数第%d天还剩有%d个桃子.n",i,sum);sum=(sum+1)*2;/printf("%dn",sum);return 0;P141 0.16 输出星号棱形图案.#include <stdio.h>#include <conio.h>main() /只关注左半部分.右半部分无视空格. int i,j,k,m=6; /m可指定,指定中心点位置.可任意奇偶. for(i=1;i<=m;i+) /上半部分.其实也是正三角. for(j=1;j<=m-i;j+) /一到中心点前i个位置填充空格. printf(" "); for(k=1;k<2*i;k+) /空格后向前填充星号的个数.是奇数.一,三,五. printf("*"); printf("n"); for(i=m-1;i>0;i-) /下半部分.其实也是倒三角. /减一是因为行数问题.这是中心行以下的. for(j=m-1;j>=i;j-) printf(" "); for(k=1;k<2*i;k+) printf("*"); printf("n"); getch(); /用户反应后结束.但,没必要.

    注意事项

    本文(C程序设计(第四版)(谭浩强)第五章课后习题答案.doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开