已知:a=b=c=1且a,b,c均为int型变量,执行以下语句:++a||++b&&++c;则变量a的值是多少,b的是多少,

已知:a=b=c=1且a,b,c均为int型变量,执行以下语句:++a||++b&&++c;则变量a的值是多少,b的是多少

1).首先我们来看运算的优先级:a:在这三个运算符中优先级的顺序是++第一,
为单目运算符,结合方式是从右向左;
b:第二个就是区分&&和||了,他们都是双目运算符,
结合方式是从左向右,但是&&的
优先级要高于||;
2).虽然这三个运算符是有优先级的,但是在特殊情况下还不是按其优先级来算的,比如你提问的这题就是典型的例子,会出现短路现象。
3). ++a||++b&&++c;中先划分为两个部分++a一部分, ++b&&++c为 一部分,即可看成是(++a)||(++b&&++c)先算左边++a,a从1加到2 ;左边逻辑值就是1了,就不需要往下运算了,那么b,c的值就会不变仍然为1.这就是我提到的短路现象。
4).所以最后的结果就是a=2,b=1,c=1;
5)代码如下
#include<stdio.h>
main()
{int a,b,c;
a=b=c=1;
if(++a||++b&&++c)
printf("%d,%d,%d\n",a,b,c);
}
6).你可以结合我所说的,在TC或者VC下调试一下;可惜我等级不够,要不然把结果图片也放上去,就这样吧。祝你好运!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-10
&&、||、++的优先级顺序是|| > &&> ++,所以程序先执行||,首先看左侧执行完++a后值是2,逻辑值为真,可以判断计算是最终结果是1,不再计算左侧的&&运算了。a=2,b=1,c=1
你可以自己运行一下试试,希望回答对你有帮助!本回答被网友采纳
第2个回答  2010-12-10
应该是8.
循环9次,k的值从0到8.
字符串的结束符标志为'/0'
当遍历字符串S到'/0'时,循环结束。
char s="a \045 + 0 + 4 5 \’b"
\045表示减号
\'表示单引号
第3个回答  2010-12-10
a=2,b和c不变,因为 || 前面为真就不会计算后面部分了,所以只计算了++a。
第4个回答  2010-12-10
a = 2;
b = 2;
c = 2;
相似回答