C语言的两道题.会做的讲一下?我想知道为什么是这样做的?

来源:百度知道 编辑:UC知道 时间:2024/05/13 14:39:03
13、执行以下语句后a的值为( ),b的值为( )
int a,b,c;
a=b=c=1;
++a||++b&&++c;
[1](A) 错误 (B) 0 (C) 2 (D) 1
[2](A) 1 (B) 2 (C) 错误 (D) 0
14、执行以下语句后a的值为( ),b的值为( )
int a=5,b=6,w=1,x=2,y=3,z=4;
(a=w>x)&&(b=y>z);
[1](A) 5 (B) 0 (C) 2 (D) 1
[2](A) 6 (B) 0 (C) 1 (D) 4

13.a = 2,b = 1
a = 1
b = 1
c = 1
1. ++a
a = 2
++a先把a的值加1,然后a再参与其他运算。由于C语言逻辑或运算(||)当其中一个操作数为真(即非0)时,不再计算另一个操作数,所以后面的(++b && ++c)不再执行。
14.a = 0,b = 6
1. w > x -> 1 > 2 -> false(0)
2. a = 0
同样C语言逻辑与运算(&&)当其中一个操作数为假(即0)时,不再计算另一个操作数,所以后面的(b=y>z)不再执行。

都是1

都是0

第一题为1
++a后,为2,即非零,所以或上之后就为一了;
第二题为a=0,b=6
w>x为假,所以a是零,与上之后必然为零,后面的赋值语句便不再执行了。所以b的值没有变化