将下列语句补充完整,编程下列语句后a,b,c,d,e的值分别是多少?为什么?

int a,b,c,w=1,x=2,y=3,z=4,d=5,e=6;
a=b=c=1;
++a || ++b && ++c;
(d=w>x) && (e=y>z);

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c, w = 1, x = 2, y = 3, z = 4, d = 5, e = 6;
    a = b = c = 1;
    ++a || ++b && ++c;
    (d = w > x) && (e = y > z);
    printf("a: %d\n", a);
    printf("b: %d\n", b);
    printf("c: %d\n", c);
    printf("d: %d\n", d);
    printf("e: %d\n", e);
    return 0;
}

结果

img


先说2个知识点
1
a++ 是先返回判断原本的值, 再对a加1
++a 是先对a加1 再返回判断加1后的值
2
逻辑运算&&和||有短路特性。
逻辑运算的工作原理是:
表达式A && 表达式B :
如果A的值为假就返回假(0值)并且不执行表达式B,否则执行表达式B并且返回B的真(1值)/假(0值)结果
表达式A || 表达式B :
如果A的值为真就返回真(1值)并且不执行表达式B,否则执行表达式B并且返回B的真(1值)/假(0值)结果


a b c 都赋值为 1
&& 优先级高于 ||
++a || ++b && ++c; 等于++a || (++b && ++c);
++a之后a变成2,2为真 || 之后的 ++b && ++c 就不执行了
w = 1, x = 2, w > x 不成立结果d是0(假)
d是0(假) && 之后的 (e = y > z) 也不执行了, e 还是 6 不变
最终结果
a: 2
b: 1
c: 1
d: 0
e: 6

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img