新编C语言程序设计教程练习三参考答案

上传人:公**** 文档编号:512178322 上传时间:2022-10-01 格式:DOC 页数:16 大小:190KB
返回 下载 相关 举报
新编C语言程序设计教程练习三参考答案_第1页
第1页 / 共16页
新编C语言程序设计教程练习三参考答案_第2页
第2页 / 共16页
新编C语言程序设计教程练习三参考答案_第3页
第3页 / 共16页
新编C语言程序设计教程练习三参考答案_第4页
第4页 / 共16页
新编C语言程序设计教程练习三参考答案_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《新编C语言程序设计教程练习三参考答案》由会员分享,可在线阅读,更多相关《新编C语言程序设计教程练习三参考答案(16页珍藏版)》请在金锄头文库上搜索。

1、练习三把下面的代数式改写成c语言表达式:(1) ax3+bx2+d (2) (3) (4) cos60+ 8ey (5) (ax+sin)答案:(1) a * x * x * x + b * x * x + d(2)(a * b c * d) / (2 * a)(3)a /(b + c / a) (4)cos(3.1415926/180 * 60) + 8 * pow(e, y),其中cos和pow为库函数,注意:cos函数的参数为弧度。(5)1/2.0*(a * x + sin(3.1415926),其中sin为库函数,注意不能写成1/2*(a * x + sin(3.1415926),可参

2、考3.3。把下面的C语言表达式还原成代数式:(1) a/b/c*e*3 (2) exp(x*x/2)/sqrt(2*sin(30*3.1415926/180)(3) sqrt(fabs(pow(x,y)+log(y) (4) a*e/c/b*3答案:(1)或(2)(3)(4)或3.3求表达式1/2*(a*x+(b+x)/(4*a)的值。答:1/2的值为0,故整个表达式的值为0。3.4参考表3-1,根据操作符的优先级和结合性用加括号方式确定表达式的求值顺序,如a += a+2的求值顺序可用加括号的方式表示为(a += (a+2))。(1) flag & n != 0 (2) c = getcha

3、r( ) != n(3) hi 4 + low (4) *p3 (5) *p+ (6) 0 n 0 & i+ 0答:(1) (flag & (n != 0) (2) (c = (getchar( ) != n)(3) (hi (4 + low) (4) (*(p3) (5) (*(p+) (6) (0 n) 0) & (i+) 0)试总结C语言操作符优先级的规律。答:操作符的优先级较底程序的输出结果:#include void main( )char x = 0xFFFF; printf(%dn, x-);答:1.给字符型变量赋值时,如果字面量较大,则仅取一个字节,因此变量x的存储状态为8个1

4、,当用%d解码时输出为-1.3.7 int a = 10时,求a -= a *= a += a /= 2的值,a的值为25时呢?答:a -= a *= a += a /= 2的求值顺序为(a -= (a *= (a += (a /= 2)。a /= 2为a = a /2,a = 10时a /2为5, a /= 2执行后a的值变为5,且子表达式的值为5。原表达式变为(a -= (a *= (a +=5)。再化简为(a -= (a *=10)、(a -=100),最终变量a的值为0,整个表达式的值也为0。a的值为25时,(a -= (a *= (a += (a /= 2)变为(a -= (a *=

5、 (a += 12)、(a -= (a *= 24)、(a -=576), 最终变量a的值为0,整个表达式的值也为0。求下面表达式的值并编程验证结果。(1) -7 / 5 (2)-7 % 5 (3)7 % -5(4) 7 / -5 (5)-7 / -5 (6)-7 % -5答:3.9 对于整型变量i,求表达式(2 * i + 1)/ 2和表达式(2 * i - 1)/ 2的值。答:当变量i大于0时,表达式(2 * i + 1)/ 2的值为i,表达式(2 * i - 1)/ 2的值为i-1。当变量i小于0时,表达式(2 * i + 1)/ 2的值为i+1,表达式(2 * i - 1)/ 2的值为

6、i。3.10计算下面表达式的值:(1)3 / 2 + 2.0 (2)3 / + 2 (3) (float)3 / 2 + 2(4)float(3 / 2 + 2.0) (5)(4 + 1) / 2 + sqrt(9.0) * / 2 + 5.5 (5)x %= 7 + 7 % 5(其中x的值为12) (6)( z - a) % 3 + (7)20000 + 20000 - 10000(int为2个字节时和4个字节时的值)答:(1)3 / 2 + =1 + (2)3 / + 2(3) (float)3 / 2 + 2(4)(float)(3 / 2 + 2.0) = (float) (1 + 2

7、.0)(5)(4 + 1) / 2 + sqrt(9.0) * / 2 + 5.5 = (5)x %= 7 + 7 % 5(其中x的值为12)可改写为:x = x %(7 + 7 % 5)简化为x = 12 % 9,求值后变量x的值为3,表达式的值也为3。(6)( z - a) % 3 + = 25 % 3 + (7)20000 + 20000 - 10000(int为2个字节时和4个字节时的值)int为2个字节时int为4个字节时3.11已知f为float型变量,分别求sizeof(f)、sizeof(f + 2.3)、sizeof(f + 和sizeof 的值。答:注意:f + 2的值为d

8、ouble型(这里VC的输出为4似乎有问题,如下所示,在TC中的输出为8),字面量3.14为double型,而字面量为float型。3.12 -1+1U等于0吗?-2+1U等于几?-3+1U呢?答:当int为4个字节时,在VC中。因为-1+1U值的类型为无符号,所以应用格式字符串%u输出。3.13 有unsigned short ui = 3,uj = 5时,表达式ui - uj等于几?有同学认为等于-2,因为编程验证时语句printf(%hdn, ui - uj)的输出为-2。有同学认为表达式ui - uj的值是无符号型,它不可能等于-2。你的观点呢?当有short k = -5时,表达式u

9、i + k的值是多少呢?答:语句printf(%hdn, ui - uj)的输出结果不能证明ui uj的值为-2,因为printf函数只按参数的格式字符串解码数据。表达式ui uj中一个为无符号数,结果应该也为无符号数,但是由例3-4的讨论可知,由于算术运算时,“短整型”都要统一为int型,这个操作可能改变变量的类型,故原表达式的类型需要讨论,只有确定了类型之后,才能讨论它的值。在VC中,求值时unsigned short要统一为4个字节的int型,统一后变量的类型也变成了有符号数,因此,表达式ui uj的值为有符号整数,为-2。在TC中,int型为2个字节, unsigned short类型

10、可直接求值,表达式ui uj的值为无符号数,为65534。在求ui uj的值时, ui加uj的相反数,即5的补码。当有short k = -5时,表达式ui + k的求值过程与表达式ui uj的类似。3.14 写出并分析下面程序的输出结果: #include void main()int i, j, k;i = j = k = 3;k = i+ + 1;printf(%d,%d, i, k);k = +i + 1;printf(%d,%dn, i, k);k = j- - 1;printf(%d,%d, j, k);k = -j - 1;printf(%d,%dn, j, k); 答:k =

11、i+ + 1;/ k =3+1且变量i自增1变为4k = +i + 1; /变量i自增1变为5,k =5+1k = j- - 1; / k =3-1且变量j自减1变为2k = -j - 1; /变量j自减1变为1,k =1-13.15分析表达式(a = n)= 3和a+ = 3的合法性。答:表达式(a = n)= 3中,先求子表达式a = n的值,为变量a,则原表达式变为a = 3,故表达式(a = n)= 3合法。表达式a+ = 3中,赋值操作符的左边不是变量,原表达式不合法。注:如果认为子表达式a = n的值为具体的数值时,则表达式(a = n)= 3也不合法。3.16 改写表达式(i+)

12、 + (i+) + (i+),使其结果与编译系统无关。答:1)int i=2,j;j = i; 原表达式改写为j + j +j; i += 3;2)int i=2, j;j = i+; j += i+; j+=i+;3.17 已知float f = 5.1739,求表达式(int)(f * 100 + 0.5)/ 100、(f * 100 + 0.5)/ 100和的值。答:(int)(f * 100 + 0.5)/ 100 = (int)517.89 / 100 = 517 / 100 = 5(f * 100 + 0.5)/ 1003.18 给下面的程序加上类似例3-11的注释,并与例3-11

13、比较。#include void main( )int n, sum;printf(请输入一个三位数的正整数n);scanf(%d, &n); /*用户输入235,变量n的值变为235*/ printf(%d), n); /*输出变量n的值,屏幕上显示(235)*/ sum = n / 100; /* n / 100为2,变量sum的值为2 */ printf(%d+, sum); /*屏幕上显示(235)2+*/ n = n % 100; /* n % 100为35,变量n 的值变为35 */ sum = sum + n / 10; /* sum + n / 10为2+3,变量sum的值变为5*/ printf(%d+, n / 10); /*屏幕上显示(235)2+3+*/ n %= 10; /* n %= 10为n = n % 10,变量n的值变为5*/ sum += n; /* sum + n为sumsum + n,变量sum的值变为10*/ printf(%d=%dn, n, sum); /*屏幕上显示(235)2+3+510*/3.19 输入二位数(如23)与四位数(如2352)时,分析例3-11的输出并上机验证。n的值为235时计算表达式n / 100 + (n / 10 - n / 100 * 10) + n % 100 / 10的值。答:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 习题/试题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号