ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:71.59KB ,
资源ID:26249039      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26249039.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(从问题到程序习题答案.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

从问题到程序习题答案.docx

1、从问题到程序习题答案从问题到程序高级语言程序设计第二章练习1. 指出下面的哪些字符序列不是合法的标识符:_abc x+- 3x1 Xf_1_4 Eoof_ x_x_2 _ I am答:不合法的标示符有:a$#24 非法符号#x+- 非法符号#3x1 不是以英文字母开头I am 非法符号“空格”bg-1 非法符号-2. 手工计算下列表达式的值:1)125 + 0125 2)0XAF - 0XFA3)24 * 3 / 5 + 6 4)36 + - (5 - 23) / 45)35 * 012 + 27 / 4 / 7 * (12 - 4)答:1)210 2)-75 3)20 4)40 5)3503

2、. 在下面表达式的计算过程中,在什么地方将发生类型转换,各个转换是从什么类型转换到什么类型,表达式计算的结果是什么?1)3 * (2L + 4.5f) - 012 + 442)3 * (int)sqrt(34) - sin(6) * 5 + 0x2AF3)cos(2.5f + 4) - 6 *27L + 1526 - 2.4L答:1)53.5 2)703.397077 在此题中十六进制数会在计算中(编译时)自动转成十进制数 3)1362.59357 4. 写程序计算第3 题中各个表达式的值。答:#include#includeint main() printf(%fn,3 * (2L + 4.

3、5f) - 012 + 44); printf(%fn,3 * (int)sqrt(34) - sin(6) * 5 + 0x2AF); printf(%fn,cos(2.5f + 4) - 6 *27L + 1526 - 2.4); system(pause); return 0;5. 写程序计算下面各个表达式的值:1) 2 341 257.+ 2) 106524*13 3) 23 5827 96 3 67. / . 4) 2 +1 7)ln ln(10 1) 2 +5)log5 2 1 6)e +1 7)arctan(log ( ) 3 e + 8) 3.6813(2.240.242 )2

4、 9)1 23 4 5 + + / 10)ln(2 13+ e )6. 已知铁的比重是7.86,金的比重是19.3。写几个简单程序,分别计算出直径100 毫米和150 毫米的铁球与金球的重量。答:#includedouble f1(double r) double v,w; v=4.0/3.0*r*r*r*3.1415926; w=7.86*v; return w; double f2(double r) double v,w; v=4.0/3.0*r*r*r*3.1415926; w=19.3*v; return w; int main() printf(铁球的重量为: %f,金球的重量为:

5、 %fn,f1(0.1/2),f2(0.1/2.0); printf(铁球的重量为: %f,金球的重量为: %fn,f1(0.15/2),f2(0.15/2.0); system(pause); return 0;7. 写程序计算 5x2 + 2x + 6 的两个根,考虑用合适的方式输出。(提示:对这个具体问题,可以先人工计算出判别式 b2 4ac 的值,以此作为已知信息,就可以写出程序了。)答:#include #include void f(double a,double b,double c) double temp=b*b-4*a*c; if(temp0) printf(方程的根为:%

6、f,%f,(-b+sqrt(temp)/2/a,(-b-sqrt(temp)/2/a); else if(temp=0) printf(方程有两个相同的根为:%f,-b/2/a); else printf(方程无解!); int main() f(5,2,6); /可以测试不同的数据 system(pause); return 0;8. 在计算机上试验本章正文中的一些程序。对它们做一些修改,观察程序加工和运行的情况,并对程序的行为做出解释。9. 在一个能正确工作工作的输出整数结果的程序里,将printf 的相应转换描述改为 %f或者 %ld,看看会出现什么问题。在一个能正确工作工作的输出双精度

7、结果的程序里,1、 将printf 的相应转换描述改为 %d 或者 %ld,看看会出现什么问题。第三章练习1. 下面的字符序列中哪些不是合法的变量名:-abc _aa for pp.288 IBM/PC tihsWhile r24_s25 _a_b abc _345答:-abc for pp.288 to be IBM/PC ms-c #micro m%ust While abc 2. 假设整型变量a 的值是1,b 的值是2,c 的值是3,在这种情况下分别执行下面各个语句,写出执行对应语句后整型变量u 的值。1) u = a ? b : c;2) u = (a = 2) ? b + a : c

8、 + a;答:1)u=2 2)u=43. 假设整型变量a 的值是1,b 的值是2,c 的值是0,写出下面各个表达式的值。1) a & !(b | c) & !a)2) !(a & b) | c ? a | b : a & b & c3) !(a + b c) & b = c * a b答:1)1 2)0 3)04. 下面程序在执行时,哪些地方将发生类型转换?程序打印的值是什么?int f (int n, float m) return (m + n) / 4;int main () float y = 3;printf(%dn, f(y, y + 1);return 0;答:#include

9、int f(int n,float m) return (m+n) /4;int main () float y=3; printf(%dn, f (y,y+1);5:函数结果传递:(m+n)/4结果的类型为float型,而函数要求返回的值类型为int,因而发生float型转换为int型 system(pause); return 0;5. 在计算机上试验本章正文中的一些程序。对它们做一些修改,观察程序加工和运行的情况,并对程序的行为做出解释。答案:略6. 定义求圆球的体积、求圆球的表面积、求圆柱体的体积、求圆柱体的表面积的函数。答:#includedouble f1(double r) do

10、uble v; v=4.0/3.0*r*r*r*3.1415926; return v;double f2(double r) double s; s=4*r*r*3.1415926; return s;double f3(double r,double h) double v; v=r*r*3.1415926*h; return v;double f4(double r,double h) double s; s=2*3.1415926*r*h+2*3.1415926*r*r; return s;int main() printf(圆球的体积为%fn,f1(0.15); printf(圆球的

11、面积为%fn,f2(0.15); printf(圆柱体的体积为%lfn,f3(0.15,0.5); printf(圆柱体的面积为%lfn,f4(0.15,0.5); system(pause); return 0; 7. 1)不用函数,直接写一个主程序计算并输出直径为100 毫米和150 毫米的金、银、铜、铁、锡球的重量(以kg 为单位输出)。2)重新完成上面程序,先定义一个带有两个参数的函数,它能求出直径为x 的比重为y 的圆球的重量,而后在主程序里调用这个函数完成所需工作。将这样得到的解与不用函数的解比较,比较它们的长度、容易出错的程度。假设现在要求修改所用圆周率的精度,考虑用两种方式写程

12、序的修改难度。3)请写程序,求出边长为100 毫米和150 毫米的金、银、铜、铁、锡立方体的重量。你可以利用前面的程序吗?是否很容易修改前面程序,完成这一计算?比较不用函数的解法和使用函数的解法在易修改和重复使用方面的效用。8. 定义函数:double tmax(double, double, double),它返回三个参数中最大的一个。写一个主函数试验各种参数情况。答:#includedouble tmax(double x,double y,double z) if(xy) return xz?x:z; else return yz?y:z;int main() printf(最大的一个为

13、:%f,tmax(8,3,2); printf(最大的一个为:%f,tmax(8,13,2); printf(最大的一个为:%f,tmax(8,3,22); system(pause); return 0; 9. 写函数,它以两个电阻的值作为参数,求出并联的电阻值。答:并联电阻值的计算公式为:R1*R2/(R1+R2)10. 如果四边形四个边的长度分别为a、b、c、d ,一对对角之和为2 ,则其面积为:S = (s a)(s b)(s c)(s d ) abcd cos2其中s =(a + b + c + d)/2。定义一个函数计算任意四边形的面积。设有一个四边形,其四条边边长分别为3、4、5

14、、5,一对对角之和为145o ,写程序计算它的面积。11. 修改已知四边长求四边形面积的函数,增加对各种参数错误情况的检查和处理(如返回值0),用各种实例数据检查你的函数否检查出所有可能的错误情况。12. 分析本章正文中给出的求二次方程根的函数,看它缺乏对哪些特殊情况的处理。补充这些处理,在需要时输出适当的信息,使之成为一个更完整的函数。写一个主函数,用各种特殊情况和一般情况测试所完成的函数。答:#include #include void f(double a,double b,double c) double temp=b*b-4*a*c; if(a=0)printf(方程的根为:%f,-

15、c/b); if(temp0) printf(方程的根为:%f,%f,(-b+sqrt(temp)/2/a,(-b-sqrt(temp)/2/a); else if(temp=0) printf(方程有两个相同的根为:%f,-b/2/a); else printf(方程无解!); int main() f(5,2,6); /可以测试不同的数据 system(pause); return 0;13. 写一个简单程序,它输出从1 到10 的整数。14. 写一个简单程序,它输出从10 到10 的整数。15. 写一个两个整型参数的简单函数,它输出从第一个整数到第二个整数为止的整数序列。16. 用定义函

16、数double power(double x, int n),它求出x 的n 次幂。用主函数试验很大的n 值(例如令x 值为1),看看会出现什么情况;用大的x 和n 值,看看发生浮点数计算溢出时会出现什么情况。17. 写一个程序,它在090 度之间每隔5 度输出一行数据,打印一个表。每行中包括5 个项目:角度数,以及它所对应的正弦、余弦、正切、余切函数值。答:#include #include int main() double s=0*3.1415926/180; int i; for(i=0;i=90/5;i+) printf(%f ,%f ,%f ,%f ,%fn,s,sin(s),co

17、s(s),tan(s),1/tan(s); s+=5*3.1415926/180; system(pause); return 0; 18. 查看有关公式,写求解并输出一元三次方程的根的函数。19. 写出求等差级数的和 ka kn= 1的函数。两种循环结构给出函数定义,再利用等差级数求和公式给出函数定义。答:#includedouble f1(int n,double a) int i; double sum=0; for(i=1;i=n;+i) sum+=i*a; return sum;double f2(int n,double a) int i=1; double sum=0; whil

18、e(i=n) sum+=i*a; +i; return sum;double f3(int n,double a) return n*(a+n*a)/2; int main() printf(%fn,f1(10,2.5); printf(%fn,f2(10,2.5); printf(%fn,f3(10,2.5); system(pause); return 0;20. 请到查出银行一年定期存款的利率和5 年定期存款的利率。假定现在要存入100 元钱,存款到期后立即将利息与本金一起再次存入。请写出程序,计算按每次存一年和按照每次存5 年,总共存50 年后两种存款方式的得款总额。对两种情况都每隔5

19、 年输出一次当时的总金额。21. 写一个程序打印出2 的顺序各次幂。让它打印出2 的前30 个幂,看看会出现什么情况。用一个条件为真的循环打印2 的各次幂,看看会出现什么情况。第四章练习 1. 1)写出通过递推方式求200之内的完全平方数的程序;2)写出只使用加法的求完全平方数的程序;3)写出求1000之内的完全立方数的程序,请参考书中实例的写法和上面的两种写法,分别写出相应的求立方数的版本。 2. 试验正文中乌龟旅行的实例,看看在你所用的C系统上得到什么样的结果。从数学教科书中找出有关调和级数的理论结论,并将它与我们的试验做一个比较。 3. 写一个程序,计算并输出Fibonacci序列中一系

20、列的相邻项之比。确定一个范围,观察输出的结果,能够得到什么结论(这个比的序列可能有极限吗?极限是什么)。查阅有关资料,了解有关的理论结果。 4. 写函数计算 1! + 2! + . + k!。用主函数试验函数对一系列k值计算出的结果。你写出的函数对1到10计算结果都正确吗?如果出现错误,弄清楚是什么原因。这个程序能对k = 30得到正确结果吗?(另外,你能只用一重循环完成函数的定义吗?) 5. 写函数计算:,公式中有n层嵌套。利用这 L 答:#include #include double f(int n,double x)int m=0;double sum;for(sum=1+1/x;m=

21、n;+m)sum=1+1/sum;return sum;int main()int x;for(x=1;x=20;+x) printf(%fn,f(10,(double)x); system(pause); return 0;个函数打印 x = 1.0、2.0、20.0,n = 10时的函数值表。 6. 实现书中讨论的验证哥德巴赫猜想的程序,用不同的n对 6n 的范围试验该程序。去掉程序中的打印输出语句,增加计时功能,对不同的n运行程序,考察程序的运行时间,画出一条曲线,说明运行时间与n的关系。 7. 设法(从文献中)找到其他更有效的素数判断方法并实现对应函数。在一个数值比较大的整数区间试验书

22、上给出的函数和你写的其他函数,利用它们打印出这一区间中的所有素数。你所试验的几种方法在工作效率上有明显差异吗?(为程序计时) 8.1) 定义函数:void prt_factors(int),它对正整数实参输出其所有的因子。 2)定义函数:void prt_pfactors(int),它对正整数实际参数,输出其所有的素因子(多重因子重复输出);对于负参数,首先输出-1,然后输出所有因子。 9. 已知,利用该公式编程序求 的近似值,看用这个和式的前多少项求出的近似值与3.14159165的误差小于1e-5,令程序输出三项数据:计算得到的和,由这个和求出的的近似值,求得该和所用得项数。把 1e-61

23、e-7 并重新试验,用计时方式总结出误差减小与执行时间之间的关系。答:#include #include #include int main() double a=3.14159265*3.14159265/6.0; double x=1.0,n=2.0; double t; t=clock(); while(fabs(a-x)1e-8) x=x+1/n/n; +n; double pi=sqrt(6.0*x); printf(n=%f,%f,%.32fn,n,x,pi); printf(%fsn,(clock()-t)/CLOCKS_PER_SEC); system(pause); retu

24、rn 0;11. 修改书中计算sin值的函数,使之能输出计算中循环执行的次数。用不同的数值(一个比一个大)试验这一函数,观察出现的情况。你看到出现溢出的情况了吗?(为试验方便,你应该写一个适用的驱动程序) 12. 已知=+1123132451352467357xxxxxL1x sinh(x 0, n0): 利用这个定义,用递归和循环方式各写出一个求最大公约数的函数。 答:/-辗转相减求最大公约数 #includeint gcd(int m,int n)return m=n?m:(mn?gcd(n-m,m):gcd(m-n,n);int main()printf(%dn,gcd(96,56);s

25、ystem(pause);return 0;15. 对一些n值试验河内塔程序,给它们计时。据此估计你所用的计算机搬完64个金盘需要多长时间。如果僧侣们1秒钟搬金盘1次,搬完64个金盘需要多少时间?将这一时间与科学家对宇宙的估计寿命做个比较,据此评价僧侣们的说法。 16. 一个三位的十进制整数,如果它的三个数位数字的立方和等于这个数的数值,那么它就被称为一个“水仙花数”。定义函数判断一个整数是水仙花数,并利用这个函数打印出所有的水仙花数。 答:/求水仙花数 /方法一 #includevoid f(int n)int i,j,k; i=n/100; j=(n-i*100)/10; k=n-i*10

26、0-j*10;if(i*i*i+j*j*j+k*k*k=n) printf(%d=%d3+%d3+%d3n,n,i,j,k);else ;int main()int i;for(i=100;i=999;+i) f(i); system(pause); return 0; /方法二 void f()int i,j,k,x; for(i=1;i=9;+i) for(j=0;j=9;+j) for(k=0;k=9;+k) x=i*i*i+j*j*j+k*k*k; if(x=i*100+j*10+k) printf(%d=%d3+%d3+%d3n,x,i,j,k); int main() f(); s

27、ystem(pause); return 0; 17. 对一个整数,如果其所有因子(包括因子1在内)之和正好等于这个数,那么就称它为“完全数”。因子之和小于自身的数称为“亏数”;因子之和大于自身的数称为“盈数”。写一个函数,当其参数是亏数时返回负值,是完全数时返回0,是盈数时返回正值。利用这个函数求出1000以内的所有完全数(实际上只有1、6、28、496)。为这个程序计时:从100开始每隔100做一次计算,写一个循环,输出各次计算花的时间。再从1000开始,每隔1000做一次计算直到10000为止,输出对程序执行计时的值。利用所定义的函数对一段区间的整数做一个分类,输出其中各个数所属的类。 18. 写程序由标准输入得到一系列三个一组的数,把每组数作为三角形的三边长,计算三角形的面积。注意在程序里检查输入数据,对不能构成三角形的情况给出错误信息。仔细 分析自己的程序,能否检查出所有不合理数据。用不同数据运行试验。 19. 写一个程序,它读入一系列整数,最后输出其中最大的两个数。 /读入一系列数,最后输出其中最大的两个 #includeint main()long x,max1=-1000000,max2=-100000;while(scanf(%d,&x)=1)if(x!=max1&xmax2) if(xmax1) ma

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1