#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>:<表达式2>
这个是三元运算符,C语言运算符的一种,运算规则是:先判断<条件>表达式是否为真,如果为真,则取<表达式1>的值,如果为假,则取<表达式2>的值。
c = (a>b)?a:b;C语言无论什么运算符,其优先级都不可能高于括号,所以总是先计算括号内的表达式的值,再用这个值参与括号外的表达式计算。
所以你这里这句话翻译一下就是:
if(a>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
不好意思,是我看错了,你是对的。
本回答被网友采纳一个括号对是一个,解析一下就能看明白了,以下就是解析的结果。
if (a > b){?:是三目运算符,可以和if-else进行转换,如a>b?a:b的意思就是
if(a>b)return a;