一道c语言程序求解!

img

你好,逻辑运算符有短路原理,就是说&& 左面的值要是假了,他就不会再读取右面的表达式,||如果左面为真了,他也不会读取右面的表达式,
所以再来看这个题,本来左面1 > 2已经为假了,&&运算的最终结果已经确定了,他就不会看右面,所以n原本是2,现在还是2,好了吗?采纳下呗
另外如果赋值号还有疑问,那么就是&&的左右都是表达式,表达式都是有值的,整个表达式的值如果里面有赋值号,就是他的左值。

B
m=a>b中,a>b不满足,m=0,(m=a>b)作为整体条件即为假,不必再执行后面的n=c>d,故n不变

结果选B是没有问题的。

关键在于C语言的 “短路性质”(我上课时老师是这么说的):
在 || 运算符和 && 运算符,如果前一个语句已经能够判断出结果来,后一个语句就不会执行。

题中:(m=a>b) 的执行优先级是:(m = (a>b) )即 (m = 0),所以 && 运算符左边结果是 false,符合短路性质,不会再执行右边的语句了。

a>b为假,值为0,m=0,&&一边为0,则值为0,不执行后边的语句,选B