大一上计导期中考回顾
单选题-2,原题如下:
设有定义“int a=1, b=2, c=3, d=4, m=2, n=2;”, 则执行表达式“(m=a>b)&&(n=c>d)”后,n的值为()。
A. 1
B. 2
C. 3
D. 0错误答案:D
错因:受到VB语言的影响,以及知识点的遗忘。
短路运算符
《C Primer Plus》曾经说过:“C保证逻辑表达式的求值顺序是从左往右。&&和||运算符都是序列点,所以程序在从一个运算对象执行到下一个运算对象之前,所有的副作用都会生效。而且,C 保证一旦发现某个元素让整个表达式无效,便立即停止求值。”
意思是,对于a && (b-c)
这个逻辑表达式,如果a为False,则整体必定为False,不必再对(b-c)
进行求值。
对于a || (b-c)
亦然,如果a为True,整体必为True,不必理会(b-c)
。
回到原题,(m=a>b)
计算得False,则整体必为False,后续(n=c>d)
不再参与计算。故n为原值,即n=2
,选C。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cabelis's lab!
评论
GitalkWaline