为什么输出结果是6 最后一行是什么意思?怎么解读?还有c语言中的问号表示什么

原问题:为什么输出结果是6 最后一行是什么意思?怎么解读?还有c语言中的问号表示什么
分类:编程开发 > 最后更新时间:【2016-12-18 06:57:25】
问题补充:

#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的值。”
    最佳答案由网友  听枫2005  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    9

    分享到:

    其他回答

    其它网友回答:
    三目运算符:如果问号前面的表达式为真,那么整个表达式的值就等于冒号前面的那个数

    其它网友回答:
    a>c?a:c

    其它网友回答:
    如果a>c为真,就是a>b?a:b; 如果a>c为假,就是a>b?c:b;

    其它网友回答:

    其它网友回答:
    三个数比较,输出最大的

      推荐