int k=-4,a=3,b=2,c=1;printf("%d\n",k<a?k:c<b?c:a);答案是多少呢?先算后面的问号还是前面的

如题所述

答案是-4

a?b:c的意思是如果a为真,那么执行b否则执行c
所以这个程序是先判断k<a,这个表达式的值是真,那么执行k,k=-4所以输出-4

先计算前面的问号哈追问

如果按你说先是计算前面的,k<a?k:c<b?c:a,得到k<b?c:a,这样子不就得到C了吗?

追答

k<a?k:c<b?c:a

先判断k是否小于a,k=-4,a=3所以k<a为真,所以返回的是k,是冒号前面的表达式。。。

追问

好像懂又好像不懂。。你能用括号区分开 先算哪个问号,再算哪个问号吗?

追答

(k<a)?(k):(c<b?c:a);

追问

在C语言中。我看了书上说条件表达式的结合是自右向左,所以我这样子理解对吗?就是先算c<b,得到答案是c,然后再算k<a?k:c得到K 这样子说法对???

追答

正确~

追问

还有点小问题,你说程序结束后,k,a,b,c,的值是否会发生变化?

追答

不会发生变化,因为这里面根本都没有赋值语句哈~

追问

哦哦,呵呵,谢谢你啊

追答

采纳一下拉~

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-29
先算前面的 k<a?k:c<b?c:a等价于k<a?k:(c<b?c:a)所以结果是-4追问

在C语言中。我看了书上说条件表达式的结合是自右向左,所以我这样子理解对吗?就是先算c<b,得到答案是c,然后再算k<a?k:c得到K 这样子说法对???