为什么输出结果是6 最后一行是什么意思?怎么解读?还有c语言中的问号表示什么
#include<stdio.h>
main(0
{int a=5,b=4,c=6,d;
printf("%d\n",d=a>b?(a>c?a:c):(b));
}
最佳答案
可以了解一下条件表达式,大致是 x=<表达式1>?<表达式2>:<表达式3>;意思是如果表达式1为真,则x取表达式2的值,否则取表达式3的值。
例中只是将两个条件表达式复合在一起,看上去比较复杂而已。对最后一行的可以进行如下分析:
首先看整体:如果 a > b,则取 (a > c ? a : c)的值,否则取b的值。
其次看局部:a > c ? a : c;的意思是如果 a < c,则取a的值,否则取c的值。
最终的意思就是,先对a和c比较,取两者最大值,然后再用a和b比较,如果 a 比较大,就取 a,c的最大值,否则取b的值。
但是发现一个问题,根据表达式的意思,应该是求abc三个数中的最大值,但事实上,假设a=3,则计算结果是d = 4,而不是6。所以表达式使用上应该有错误。楼主可以思考下为什么这个表达式会有错误,又该怎么修正。
不好意思,中间有句打错符号了,应该是“其次看局部:a > c ? a : c;的意思是如果 a > c,则取a的值,否则取c的值。”
其他回答
其它网友回答:
三目运算符:如果问号前面的表达式为真,那么整个表达式的值就等于冒号前面的那个数
其它网友回答:
a>c?a:c
其它网友回答:
如果a>c为真,就是a>b?a:b; 如果a>c为假,就是a>b?c:b;
其它网友回答:
其它网友回答:
三个数比较,输出最大的