C语言 有个问题不太懂啊

来源:百度知道 编辑:UC知道 时间:2024/06/07 14:04:23
原题是这样的:
main()
{int a,b,c,x=10,y=9;
a=(--x==y++)?--x:++y;
b=x++;c=y;
printf("%d,%d,%d\n",a,b,c);}
此题结果为:8,8,10
请问是为什么?谢了!
不好意思,还有一个:
main()
{int a=3,b=2,c=1,k=4;
printf("\n%d\n",k<a?k:c?c:a);}
结果是什么啊? 说说原理呗!谢了!

a=(--x==y++)?--x:++y;
第一个语句是这样, --x是先减1 , 再与y相比较(这里y比较完后才+1) 这时x = y = 9; (这时y再+1 =10)因为 X = y, 取 --x,即 x = 8=a;
这相当于一个选择句,if( --X == Y++) {--X;}
else{++Y;}
b=x++;这句是先取 B =X,再对X进行+1, 所以B = 上面的X值8
c=y 这里y =10(第一句执行后y的结果),

上面的自增运算,健是先自增再运算还是先运算再自增,自己再看下书吧!

第一个
--x=9 y++=9 (++a,先取a当前值,再对a加;a++取a+1的值)
所以相等是成立的。此时x=9 x=10根据判断
这其实是一个if判断句。条件成立a=--x.条件不成立a=++y
所以a=--x=8 此时x=8

第二个
b=x++ =8,此时x=9(同一)

第三个
c=10.