c程序中输入: int a,b,c; a=b=c=1; ++a||++b&&++c; 执行后abc的值为什么是211,请给出解答

如题所述

++a||++b&&++c是逻辑表达式,它的值只有“真”与“假”两种,常用“非零”和“零”来表示。++a||++b&&++c第一个逻辑操作符为||,它是“或”操作,就是说它两边的表达式只要有一边为“真”整个表达式的值就为真。而++a使a为2,这已为“真”了,所以整个表达式的值已经肯定为“真”了,||右边的表达式就不再执行了,所以才有了211的结果。这种现象常被称为逻辑表达式运算的“短路”现象,是C/C++提高执行时效的措施之一。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-14
a=b=c=1; 这句话是连续赋值,结果是a=1, b=1, c=1;
++a||++b&&++c; ||优先级低于&&,所以可以看成(++a)||(++b&&++c);先执行(++a),a=2,++a>0,为真,根据短路原则,后面的表达式不再计算,因为无论后面真假,表达式总为真,所以后面++b&&++c没有计算,结果就是abc为211
第2个回答  2011-11-14
逻辑表达式中,若有<条件1>&&<表达式2>,则先计算<条件1>的值,若其值为1(非0),就计算<表达式2>的值,根据表<达式2>的值来判断整个表达式的值是0还是1,但是如果表达式1的值为0的话,就不在计算表达式2的值,因为整个表达式已经可以判定为0了,无需在计算表达式2的值。
若有<条件1>||<条件2>,则先计算<条件1>的值,若其值为0,则通过<条件2>的值来判断整个表达式的值是0还是1。若<条件1>的值为真(非0),则不计算<条件2 >的值,因为此时可以判断整个表达式的值也为1。
所以,在下列表达式中:
++a||++b&&++c
由于++a的值为2(非0),所以此时可以判断整个表达式的值为真,不再需要执行后面的表达式了,所以,这个表达式只计算了++a的值,后面的并没有参与计算!
注:逻辑表达式中,是从左向右计算的!
第3个回答  2011-11-14
++a||++b&&++c,这句话运算顺序为从左到有。但是||运算如果他的左边为真(非0)则不再执行右边的表达式。是a执行的自加运算。而++b和++c都没有执行。本回答被提问者和网友采纳

c程序中输入: int a,b,c; a=b=c=1; ++a||++b&&++c; 执行后abc的值为什 ...
++a||++b&&++c是逻辑表达式,它的值只有“真”与“假”两种,常用“非零”和“零”来表示。++a||++b&&++c第一个逻辑操作符为||,它是“或”操作,就是说它两边的表达式只要有一边为“真”整个表达式的值就为真。而++a使a为2,这已为“真”了,所以整个表达式的值已经肯定为“真”了,|...

大学C语言问题 执行“int a,b,c;a=b=c=1;--b&&++c||++a;"后,变量a
先看(--b&&++c),--b导致b的值为0,所以(--b&&++c)必然为假,所以c就不会加一了,C的值还是1。然后(--b&&++c)为假并不能直接断定(--b&&++c)||(++a)的真假,因为||需要两边为假才是假,所以需要判断右边的(++a),这里a自加一次变为2,(++a)为真,整个表达式(--b&&++c)||(...

c语言int a,b,c.a=b=c=1. ++a||++b&&++c. 求a和b的值
结果是a=2,b=1,因为||和&&的优先级相同,||的执行规则是左边的如果为真就不再执行右边的++b,++a之后a=2,不为0,所以为真

int a,b,c; a=b=c=1; ++a||++b&&++c ,请解来看看?
答案是 2 ++a ++b ++c为1 2&2=2 2|2=2 所以答案是2 你说的这个是逻辑运算符,答案是1(逻辑运算的答案只有0,1所以为1)

int a,b,c; a=b=c=1; ++a‖(++b &&++c);求a,b值
a\\b\\c初是1 后面的逻辑表达式本来是先算&&再算|| 但是最终还是算||,||中当左边表达式为真时就不会计算右边表达式所以只运算++a,所以结果是a=2,b=1,c=1

...int a,b,c;”,且a=b=c=1,执行if(a++||++b) c++;语句后,b的值是...
不同的地方是++在前,执行完判断先执行自加,++在后,在循环内部语句执行完后再自加,对写到题来说就是,if判断是a,b都是1,执行完后,先执行++b.在执行内部语句c++,最后执行a++,执行完后全部值都为2,b也是2 另外,在输出sprinf中,++在前或在后,都是先执行自加,在输出,...

int a,b,c a=b=c=0 a++&&b++‖c++ 为什么a,c是1而b是0 &&是a为
因为计算机觉得a++都已经不成立了那么&&后面的内容成不成立都无所谓了,就没有去处理它,b++被华丽丽的忽视了。接着是||,因为前面部分是假,所以还要看看c++是不是真才能判断条件的真假。同a++一样,c++也为假.最后执行自加,a,c变成了1. b++因为没有被计算机执行,所以还是0....

...int a,b,c; a=b=c=1; if (a++||++b) c++; printf("%d,%d,%d\\n...
的值为假,则整个表达式的值就为假,它是从左向右计算的。所以执行该表达式后,b 的值还是它的初始值,即不进行运算。若a || b ,如果a 的值为真,整个表达式的值就为真,执行顺序同上。b 的真假由最初的真假来判断,也就是说,当a 为真时,b 则不进行运算了。回答很辛苦,希望采纳。

int a,b,c; a=b=c=1; ++a||++b&&++c。求a的值是多少?
执行inta,b,c;a=b=c=-1;++a&&++b||++c;后a,b,c值分别为 a是0 b是-1 c是0 因为++a&&++b||++c这个逻辑表达式 先计算&&因为++a是0所以这部分为0++b不执行 再计算||++c要计算所以c=0

Int a,b,c a=b=c=1 ++a=++b&&++c a,b的值为多少.
int a,b,c;a=b=c=1;++a=++b&&++c;如果是的话,因为自增运算符‘++’的优先级要高于赋值运算符‘=’,所以先执行自增运算;++a=++b&&++c -> a=b&&c [此时a,b,c均为2]然后,因为赋值运算符‘=’的优先级要高于逻辑与运算符 '&&',所以执行赋值运算;a=b&&c -> 1 && c [...

相似回答