c语言 条件运算符

#include <stdio.h>
int fun(int a, int b, int c)
{
int t;
/**********found**********/
t = (a>b) ? (b>c? b :(a>c?c:a)) : ((a>c)?a : ((b>c)?c:b));
return t;
}
main()
{int a1=3, a2=5, a3=4, r;
r = fun(a1, a2, a3);
printf("\nThe middle number is : %d\n", r);
}
请问 (a>b) ? (b>c? b :(a>c?c:a)) : ((a>c)?a : ((b>c)?c:b))这段是什么意思,这么多?和:和()程序执行顺序是什么,每一个?和:和()的作用是什么,详细跟我说一下,这段程序根本不知道怎么入手

条件运算符(? : )是一个三目运算符,即有三个操作数。

使用条件运算符(?:)可以实现 If else 的功能,其一般形式为:

表达式1 ? 表达式2 : 表达式3

例如条件语句:

if(a>b)  max=a;
else max=b;
可用条件表达式写为 

max=(a>b) ? a : b;

执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max。

if条件语句例子如下:

直接编译,程序输出结果中任意输入年龄,程序执行结果如下图所示:

知识扩展:

    条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符

    条件运算符?和:是一对运算符,不能分开单独使用。

    条件运算符的结合方向是自右至左。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-27

<条件>? <表达式1>:<表达式2>

这个是三元运算符,C语言运算符的一种,运算规则是:先判断<条件>表达式是否为真,如果为真,则取<表达式1>的值,如果为假,则取<表达式2>的值。

c = (a>b)?a:b;
相当于:
if(a>b)
    c = a;

else
    c = b;

C语言无论什么运算符,其优先级都不可能高于括号,所以总是先计算括号内的表达式的值,再用这个值参与括号外的表达式计算。

所以你这里这句话翻译一下就是:

if(a>b)
    if(b>c)

        t=b;

    else

        if(a>c)

            t=a;

        else

            t=c;

else
    if(a>c)

        t=a;

    else

        if(b>c)

            t=c;

        else

            t=b;

追问

(a>b) ? (b>c? b :(a>c?c:a)) : ((a>c)?a : ((b>c)?c:b))
else

if(a>c)

t=a;

else

t=c;

错了把,是不是
else

if(a>c)

t=c;

else

t=a;

追答

这是在else分支里,你再看看

追问

哪里 你详细说一下
明明就是a>c?c:a不是a>c?a:c

追答

不好意思,是我看错了,你是对的。

本回答被网友采纳
第2个回答  推荐于2017-09-28

一个括号对是一个,解析一下就能看明白了,以下就是解析的结果。

if (a > b){
    if (b > c)return b;
    else {
        if (a > c)return c;
        else return a;
    }
}
else {
    if (a > c)return a;
    else {
        if (b > c)return c;
        else return b;
    }
}

 ?:是三目运算符,可以和if-else进行转换,如a>b?a:b的意思就是

if(a>b)return a;
else return b;

本回答被提问者采纳
第3个回答  2020-04-30
相似回答