c语言习题 50
28.怎么算的... 29.不明白 30.后面的一大串算出1
我基础不好 可以详细说明吗? 展开
27
A+'6'-'3' 而不是A+6-3,当然这不是重点,注意一下就好
而题目的意思是A的ascII码+6的ASCii码-3的ASCii码,
答案是 'D' 而D的ASCII码就是68
出题人的意思大概是D选项没写单引号,我认为出这题的人脑子不合适,不做深究。
28
考的是运算符的优先顺序,和运算符的结合问题,这种问题是最没意思的
(重复一下出题人脑子有泡)
那么看运算优先级,自加减优先级高于赋值运算符,高于逗号运算符
表面上貌似是先做++,-- 在做赋值,最后做等号,哈答案是9
这是典型没考虑运算符结合问题,
先说赋值和,逗号这两个运算符,没有任何问题,是同样的二元运算符,会严格遵循向右结合,所以优先级生效了
再看麻烦的++和--,同样的向右结合,但是++ -- 写在数字后面的时候貌似向右没有操作数了
那么向左结合就会被翻译成 x,x++,a = x++ 就是 a = x ,x++;
把这个原理用在这道题上,先算sum = num ;
此时sum= num = 7
然后num++; num = 8;
再看下一个二元运算符,
sum++ sum = 8;
num++ num= 9;
此时sum 的值是8
扩没笑隐展一下 C还有个三元运算符 ?:这个运算符一般没人会考,你枯厅把它当成两个连续向右结合的二元运算符就好了。这种题也就考试有用。
29题
考的是与运算符的一个小知识
与要为真的基本条件是1&1 = 1
0 & n = 0
如果计算第一个表达式为0
那么n表达式是不会计算的,跳过了
所以m的升首值没有变是2
30题
考的是运算精度问题
int * int = int
int / int = int
int *float = float
看出来了吧,向位数更高的靠拢
(int)2/(int)4 = 0 而不等于0.5
后面那个表达式*/%为同级运算符
为了使算式不出现/0或者%0异常都是从左向右结合运算的
先算括号里的(x+y) = 7.3然后存储结果时发现有强转,即7,a%3 = 1
1*7 = 7
7%2 = 1
1/4 = 0
2.5+0 = 2.5