在慕课上学浙大线性结构课程,看到有个算法用到C语言的三目运算符,研究测试了下,方便后面复习。
基本表达式:
A?B:C
意思是:如果A为真,继续比较A与B,否则返回C,是一个精简版的if else表达。但嵌套的就不那么好看懂了。
代码如下:
#include <stdio.h>
//给定三个数ABC比较大小
int Max3( int A, int B, int C )
{ /* 返回3个整数中的最大值 */
/*
int s = A>B?A:(B>C?B:C);
int s = A>B?A:B>C?B:C;
int s = A > B ? A > C ? A : C : B > C ? B : C;
int s = (A > B )? (A > C ? A : C ): (B > C ? B : C);
//以上返回的是对的,有没有括号一样,说明是从右往左读取的
*/
int s = A > B ? A > C ? A : C : B > C ? B : C;
printf("max is %d\n",s);
}
int main(){
int A,B,C;
A = 999;
B = 200;
C = 4;
Max3(A,B,C);
}
比较绕的A > B ? A > C ? A : C : B > C ? B : C 给它加上括号实际就是下面这样:
(A > B )? (A > C ? A : C ): (B > C ? B : C)
逻辑都是比较A与B,A与C,B与C。
改变ABC的大小,测试都完全正确。