86、运算完下面的C语言程序段以后,a的值是______,b的值是______,c的值是________。

86、运算完下面的C语言程序段以后,a的值是______,b的值是______,c的值是________。 int x=10,y=9; int a,b,c; a=(--x==y++)?--x:++y; b=x++; c=y;
A、6 9 13 B、8 7 11 C、8 9 10 D、8 8 10
我疑惑的是B的值,他用的是--x:++y这边--x后的值吗?如果是的话题目最后要的不是b的值吗,那b=x++;副作用已发生那b的值不是x自增后的值吗?

--x==y++:--x变为9,9==9成立,执行三目运算符冒号:之前的表达式--x,然后y++变为10;

--x:x变为8
a=--x:a=8
b=x++:b=8,x++变为9
c=y:c=10
此时:a=8,b=8,c=10
故选D。追问

我疑惑的是B的值,他用的是--x:++y这边--x后的值吗?如果是的话题目最后要的不是b的值吗,那b=x++;副作用已发生那b的值不是x自增后的值吗?

追答

b=x++是先令b=x的当前值,然后将x+1。

追问

还有一个就是因为--x:++y只执行--x,使x两次-1得8,++y并不执行那c=y不就是等于原来y的值也就是9,为什么是10啊

追答

因为问号前的表达式--x==y++对y做了自增。

追问

好的,谢谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-08-21
D正确,选D——因为--x:++y只执行--x,使x两次-1得8,++y并不执行。所以最后a==8,b==8,c==10。追问

若是b=x++;,b是表达式x++的值,如果还有个输出x,那就是操作数x=9吧?

追答

回答追问:是。

追问

好的,谢谢

第2个回答  2018-08-19
D追问

求解析

追答

1、--x == y++ x=9, y=9 y++是到下次才自增成10的,
2、由于第一步9==9是真,所以执行--x x=8 a=8
3、b = x++ x到下次才变成9,所以b = 8。
4、此时y已经变成10了,所以C = 10。
比如++a 和 a++一个是立刻马上就自增,一个是稍后,等下一步再自增记住这点就行

本回答被提问者采纳