C语言的简单题目,求答案及解释

已知:int k= 4,a=3,b=2,c=1;则表达式“k<a ? k : c<b ?c :a”的值为

结果是1。
< :是自右向左结合的,你这个表达式相当于: k<a ? k : (c<b ? c:a)
c<b 显然成立,取前面表达式(在这里是变量c),即表达式 (c<b ? c:a)的值是1;
k<a显然不成立,取冒号后面的值,就是表达式(c<b ? c:a)的值,明显是1.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-21
其实那个表达式可以理解为:(k<a ? k : (c<b ?c :a))
后面的(c<b ?c :a) 是返回b和c最小的那个,明显是1
然后剩下的就是(k<a ? k :1) ,这个的意思就是,如果k<a,返回k;如果k>a,返回1。明显是后者,因此返回的是1
第2个回答  2011-10-21
这个问题分为两部分,相当于内嵌式,应该是k<a ? k : (c<b ?c :a),这样,你就明白了。先算括号里的,然后在算整体。结果是1
第3个回答  2011-10-21
答案是1,k<a ? k : c<b ?c :a的结合性是自右向左的,可以和k<a ? k : (c<b ?c :a)相等,c<b ?c :a等于1.
k<a ? k : 1,最后结果等于1.
第4个回答  2011-10-21
首先条件运算符的结合方向为“自右至左”,然后是条件运算符的优先级别低于关系运算符。所以先算后面“ c<b ?c :a”的值,假设值为t,则t=1,然后算“k<a ? k : t”的值,结果为1
第5个回答  2011-10-21
答案是 1
相似回答