请问这道C语言的答案是什么?

来源:百度知道 编辑:UC知道 时间:2024/06/18 06:49:53
设有以下程序段:
int x=2,y=2,z=0,a;
a=++x||++y&&z++;
printf(〃%d,%d,%d\n〃,x,y,z);
执行后输出的结果是( d )
A.2,2,0 B.3,3,1
C.3,2,0 D.3,2,1

答案应该是C,原因如下:
表达试++x||++y&&z++由于||运算有个特点,其第一个操作数如果为非0,编译器将省略其第二个操作数,而++x的结果是3,为非0,所以++y&&z++不起作用,整个表达式的效果等同于++x。所以最后x=3, y=2, z=0。

int x=2,y=2,z=0,a; //x=2,y=2,z=0
a=++x||++y&&z++; //a=3||3&&0=3||0=1,x=3,y=3,z=1
printf(〃%d,%d,%d\n〃,x,y,z);

B

等价为a=++x||(++y&&z++)
注意异或运算如果前面一项为假的话,后面的仍需计算,相反不再计算 因为式子必定为真
所以x 为3(不为0)所以y z 不再计算
答案3 2 0

&&高于|| 所以先计算&& 由于z=0 故++y&&z++值为0
先计算++x x=3 由于a=++x||z++值为0 故不计算a值 a=0
y=2
答案是C

是c。因为++运算优先级最高,先执行++x,又因为||优先级最低,最后执行,既然左面x==3已为真,所以||右面的所有运算都不再执行,故y和z的值不变。
祝你学习愉快

c.
我编译运行了。