三目运算符也叫条件运算符、三元运算符,它是唯一有 3 个操作数的运算符。三目运算符和 if else 条件判断类似。
语法结构
<表达式1> ? <表达式2> : <表达式3>;
意思是先求表达式 1 的值,如果为真,则执行表达式 2,并返回表达式 2 的结果;如果表达式 1 的值为假,则执行表达式 3,并返回表达式 3 的结果。
三目运算符与if else的比较
先简单举个例子:
int a,b,c;
a=7;
b=6;
if (a>b){
c=a;
}
else {
c=b;
}
等同于
int a,b,c;
a=7;
b=6;
c=(a>b)?a:b;
二者输出的结果都是c=7
相比较之下使用三目运算符更优美不是么,然而它却是一朵带刺的玫瑰。(要上强度了)
eg:1.输入三个正整数并给它们排序(汗流浃背)
int min, mid, max, x, y, z;
scanf("%d %d %d",&x,&y,&z);
min = (x > y ? y : x) > z ? z : (x > y ? y : x);
max = (x > y ? x : y) > z ? (x > y ? x : y) : z;
mid = x + y + z - min - max;
printf("min=%d\nmid=%d\nmax=%d", min, mid, max);
解释:假设x=1,y=2,?z=3,显而易见min=x=1。首先分析(x > y ? y : x),可见 x>y?为假,则返回x此时将(x > y ? y : x)当作 x 处理。则(x > y ? y : x) > z ? z : (x > y ? y : x)就变成了x > z ? z : x? 可见 x>z 为假,在、于是返回 x 的值给min。
? 2.使用三目运算符嵌套判断year是不是闰年,是则返回1,不是返回0。
int year;
year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0);
可见三目运算符的使用有时难以理解,所以三思而后行。
如果使用if else:
int leap_year(int year) {
if (year % 4 == 0 && year % 100 != 0) {
printf("是闰年");
}
else if (year % 400 == 0) {
printf("是闰年");
}
else {
printf("不是闰年");
}
}
突然头脑清晰。