资源预览内容
第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
第9页 / 共18页
第10页 / 共18页
亲,该文档总共18页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
练习三练习三3.1 把下面的代数式改写成 c 语言表达式:(1) ax3+bx2+d (2) (3) ab - cd 2aacba(4) cos60+ 8ey (5) (ax+sin)12答案:(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),可参考 3.3。3.2 把下面的 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)或ebca3 bcae3(2) o30sin222x e(3)yxyln(4)或ebca3 bcae33.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 printf(“%dn“, x-);答:1.给字符型变量赋值时,如果字面量较大,则仅取一个字节,因此变量 x 的存储状态为 8 个 1,当用“%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 *= (a += 12)、(a -= (a *= 24)、(a -=576), 最终变量 a 的值为 0,整个表达式的值也为 0。3.8 求下面表达式的值并编程验证结果。(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 的值为 i。3.10 计算下面表达式的值:(1)3 / 2 + 2.0 (2)3 / 2.0 + 2 (3) (float)3 / 2 + 2(4)float(3 / 2 + 2.0) (5)(4 + 1) / 2 + sqrt(9.0) * 1.2 / 2 + 5.5 (5)x %= 7 + 7 % 5(其中 x 的值为 12) (6)( z - a) % 3 + 3.2(7)20000 + 20000 - 10000(int 为 2 个字节时和 4 个字节时的值)答:(1)3 / 2 + 2.0=1 + 2.0 = 3.0(2)3 / 2.0 + 2=1.5 + 2 = 3.5(3) (float)3 / 2 + 2 = 1.5 + 2 = 3.5(4)(float)(3 / 2 + 2.0) = (float) (1 + 2.0) = 3.0(5)(4 + 1) / 2 + sqrt(9.0) * 1.2 / 2 + 5.5 = 2 + 1.8 + 5.5 = 9.3(5)x %= 7 + 7 % 5(其中 x 的值为 12)可改写为:x = x %(7 + 7 % 5)简化为 x = 12 % 9,求值后变量 x 的值为 3,表达式的值也为 3。(6)( z - a) % 3 + 3.2 = 25 % 3 + 3.2 = 4.2(7)20000 + 20000 - 10000(int 为 2 个字节时和 4 个字节时的值)int 为 2 个字节时int 为 4 个字节时3.11 已知 f 为 float 型变量,分别求 sizeof(f) 、sizeof(f + 2.3) 、sizeof(f + 2) 、sizeof 3.14 和 sizeof 3.14f 的值。答:注意:f + 2 的值为 double 型(这里 VC 的输出为 4 似乎有问题,如下所示,在 TC 中的输出为 8) ,字面量 3.14 为 double 型,而字面量 3.14f 为 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 时,表达式 ui + 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 类型可直接求值,表达式 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 = 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+) + (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、 (int) (f * 100 + 0.5) / 100.0、 (f * 100 + 0.5)/ 100 和(f * 100 + 0.5)/ 100.0 的值。答:(int) (f * 100 + 0.5)/ 100 = (int)517.89 / 100 = 517 / 100 = 5(int) (f * 100 + 0.5) / 100.0 = 517 / 100.0 = 5.17(f * 100 + 0.5)/ 100 = 517.89 / 100 = 5.1789(f * 100 + 0.5)/ 100.0 = 517.89 / 100.0 = 5.17893.18 给下面的程序加上类似例 3-11 的注释,并与例 3-11 比较。#include void main( )int n, sum;printf(“请输入一个三位数的正整数n“);scanf(“%d“, /*用户输入 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 的值。答:n / 100 + (n / 10 - n / 100 * 10) + n % 100 / 10 = 2 + (23 2 * 10) + 35 / 10 = 2 + 3 + 3 = 8 3.20 读取一个三位数的正整数,按如下规则对此数加密,每
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号