您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言程序设计(何欣铭)课后习题答案
39C语言程序的调试、运行步骤修改程序,观察语法错误、逻辑错误及改正方法。语法错误:可以删除一个分号,使编开始编辑源程序.c/.cpp编译目标程序.obj连接可执行程序.exe运行结果译出现错误提示,改正之,再编译。类比写文章有错别字。逻辑错误:将sum=sum+i改为sum=sum-i,编译、连接、运行,发现语法错误1.3习题参考答案连接错误运行错误运行结果不符合题目要求。找出错误(调试),改正之,再编译、连接、运行,看结果。类比写文章词不达意。1.对C语言来说,下列标识符中哪些是合法的,哪些是不合法的?total_debugLarge&all,Conter1,begin_解答:Large&Tall不合法,其余都合法。2.改写本章1.4节中的流程图1.2,求1~100中能被6整除的所有整数的和。解答:sum=0i=1假i=100?真真sum=sum+ii能被6整除?i=i+1打印sum假图1.1“求1~100中能被6整除的所有整数的和”的流程图113.改写本章1.4节中的程序,求1~100中能被6整除的所有整数的和,并在编程环境中验证该程序的运行结果。解答:#includestdio.hintmain(vid){inti,sum=0;for(i=1;i=100i++)if(i%6==0)sum=sum+i;printf%d,sum);return0;}运行结果:8164.对于给定的整数n(n>1),请设计一个流程图判别n是否为一个素数(只能被1和自己整除的整数),并分析该流程图中哪些是顺序结构、哪些是分支结构与循环结构。解答:在流程图中,分支结构和循环结构如图1.2所示,自上而下的2个实线框和2个虚线组成了顺序结构。输入ni=2假i=n/2?真真真打印n是素数n能被i整除?i=i+1in/2?假假打印n不是素数循环结构分支结构#includestdio.hintmain(void){printf(A\n);printf(AA\n);printf(A\n);return0;}1462函数的概念C语言中有两种类型函数标准库函数自定义函数函数可以做到一次定义、多次调用使用自定义函数的程序框架doublefact(intn);/*声明自定义函数,以分号结束*/intmain(void){……result=fact(i);/*调用自定义函数fact(i)计算i!*/……}/*定义求n!的函数*/简单总结本节内容。使学生了解自定义函数编程结构,能够模仿编程即可。2.3练习与习题参考答案2.3.1练习参考答案2-1编写程序,在屏幕上显示一个短句“ProgramminginCisfun!”。解答:#includestdio.hintmain(void){printf(ProgramminginCisfun!\n);return0;}2-2下列语句的运行结果是什么?与例2-2的运行结果有何不同?为什么?printf(Programmingisfun.AndProgramminginCisevenmorefun!\n);解答:运行结果:Programmingisfun.AndProgramminginCisevenmorefun!例2-2的运行结果分2行显示。原因在于,例2-2中在每条输出语句的结尾都采用了‘\n’换行。2-3编写程序,在屏幕上显示如下图案。**********解答:intmain(void){printf(****\n***\n**\n*\n);return0;}182-4编写程序,求华氏温度150°F对应的摄氏温度(计算公式同例2-3)。解答:#includestdio.hintmain(void){intcelsius,fahr;fahr=150;celsius=5*(fahr–32)/9;printf(fahr=%d,celsius=%d\n,fahr,celsius);return0;}2-5算术表达式5*(fahr-32)/9能改写成5(fahr-32)/9吗?为什么?如果将其改写为5/9*(fahr-32),会影响运算结果吗?解答:5(fahr-32)/9不是合法的C表达式,因为不能省略运算符*;5/9*(fahr-32)的值为0。2-6一个物体从100米的高空自由落下,编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10m/s2。解答:#includestdio.hintmain(void){doubleheight;height=0.5*10*3*3;printf(height=%.2f\n,height);return0;}2-7输入提示和输入语句的顺序应该如何安排?例2-5中,scanf(%d%d%lf,&money,&year,&rate)能改写为scanf(%d%lf%d,&money,&year,&rate)吗?为什么?能改写为scanf(%d%lf%d,&money,&rate,&year)吗?如果可以,其对应的输入数据是什么?解答:输入提示在前,输入语句在后。不能改写为scanf(%d%lf%d,&money,&year,&rate),因为%lf与整型变量money不匹配,%d与浮点型变量rate不匹配。与scanf(%d%lf%d,&money,&rate,&year)对应的输入数据为:10000.02532-8编写程序,输入华氏温度,输出对应的摄氏温度,计算公式同例2-3。解答:#includestdio.hintmain(void){intcelsius,fahr;19scanf(%d,&fahr);celsius=5*(fahr-32)/9;printf(celsius=%d\n,celsius);return0;}2-9编写程序,输入3个整数,计算并输出它们的平均值。解答:#includestdio.hintmain(void){inta,b,c;doubleaverage;scanf(%d%d%d,&a,&b,&c);average=(a+b+c)*1.0/3;printf(average=%.2f\n,average);return0;}2-10编写程序,输入x,计算并输出下列分段函数f(x)的值(保留3位小数)。1yfx()xx0解答:0x0#includestdio.hintmain(void){doublex,y;scanf(%lf,&x);if(x!=0)y=1/x;elsey=0;printf(f(%.2f)=%.3f\n,x,y);return0;}2-11编写程序,输入x,计算并输出下列分段函数f(x)的值(保留2位小数),请调用sqrt函数求平方根,调用pow函数求幂。51xxx0yfx()2xxx0解答:#includestdio.h20#includemath.hintmain(void){doublex,y;scanf(%lf,&x);if(x=0)y=sqrt(x);elsey=pow(x,5)+2*x+1/x;printf(f(%.2f)=%.2f\n,x,y);return0;}2-12编写程序,输入2个整数lower和upper,输出一张华氏-摄氏温度转换表,华氏温度的取值范围是[lower,upper],每次增加2°F,计算公式同例2-7。解答:#includestdio.hintmain(void){intlower,upper;doublecelsius,fahr;scanf(%d%d,&lower,&upper);printf(fahrcelsius\n);for(fahr=lower;fahr=upper;fahr=fahr+2){celsius=5*(fahr-32.0)/9;printf(%3.0f%6.1f\n,fahr,celsius);}return0;}n12-13编写程序,输入一个正整数n,求i1解答:#includestdio.hintmain(void){inti,n;doublesum;scanf(%d,&n);sum=0;for(i=1;i=n;i++)sum=sum+1.0/i;printf(sum=%.6f\n,sum);i。21}return0;2-14编写程序,输入一个正整数n,计算111.....的前n项之和。35解答:#includestdio.hintmain(void){inti,n;doublesum;scanf(%d,&n);sum=0;for(i=1;i=n;i++)sum=sum+1.0/(2*i-1);printf(sum=%.6f\n,sum);return0;}2-15编写程序,输入一个正整数n,计算111111.....的前n项之和。47101316解答:#includestdio.hintmain(void){intflag,i,n,denominator;doubleitem,sum;scanf(%d,&n);sum=0;flag=1;denominator=1;for(i=1;i=n;i++){item=flag*1.0/denominator;sum=sum+item;flag=-flag;denominator=denominator+3;}printf(sum=%.3f\n,sum);return0;}2-16编写程序,输入两个正整数m和n,计算m!+n!。解答:#includestdio.h22intmain(void){inti,m,n;doublefm,fn;scanf(%d%d,&m,&n);fm=1;for(i=1;i=m;i++)fm=fm*i;fn=1;for(i=1;i=n;i++)fn=fn*i;printf(%d!+%d!=%.0f\n,m,n,fm+fn);return0;}2-17执行下列程序段后,sum的值是。for(i=1;i=10;i++){sum=0;sum=sum+i;}解答:sum的值是10。2-18输入一个正整数n,生成一张3的乘方表,输出30到3n的值,可以调用幂函数计算3的乘方。解答:#includestdio.h#includemath.hintmain(void){inti,n;doublemypow;scanf(%d,&n);for(i=0;i=n;i++){mypow=pow(3,i);printf(pow(3,%d)=%.0f\n,i,mypow);}return0;}2-19输入一个正整数n,生成一张阶乘表,输出1!到n!的值。要求定义和调用函数fact(n)计算n!,函数类型是double。解答:#includestdio.hintmain(void)23{inti,n;doublemyfact;doublefact(intn);scanf(%d,&n);for(i=1;i=n;i++){myfact=fact(i);printf(%d!=%.0f\n,i,myfact);}return0;}doublefact(intn){inti;doubleproduct;product=1;for(i=1;i=n;i++)product=product*i;returnproduct;}2-20根据下列公式可以算出从n个不同元素中取出m个元素(m≤n)的组合数。编写程序,输入2个正整数m和n(m≤n),计算并输出组合数。要求定义和调用函数fact(n)计算n!,函数类型是double。mCn解答:!(n!)!#includestdio.hdoublefact(intn);intmain(void){intm,n;doubles;scanf(%d%d,&m,&n);s=fact(n)/(fact(m)*fact(n-m));printf(result=%.0f\n,s);return0;}doubl
本文标题:C语言程序设计(何欣铭)课后习题答案
链接地址:https://www.777doc.com/doc-5924722 .html