Cprogramming 简明教程
Ternary Operator in C
C 中的三元运算符 (?:) 是一种条件运算符。术语 “三元” 暗示运算符有三个操作数。三元运算符通常用于以更简洁的方式放置多个条件(if-else)语句。
Syntax of Ternary Operator in C
三元运算符与以下语法一起使用:
exp1 ? exp2 : exp3
它使用三个 operands −
-
exp1 − 一个布尔表达式,返回 true 或 false
-
exp2 − 当 exp1 为 true 时,由 ? 操作符返回
-
exp3 − 当 exp1 为 false 时,由 ? 操作符返回
Example 1: Ternary Operator in C
下面的 C 程序使用三元运算符检查变量是否为偶数或奇数。
#include <stdio.h>
int main(){
int a = 10;
(a % 2 == 0) ? printf("%d is Even \n", a) : printf("%d is Odd \n", a);
return 0;
}
Example 2
条件运算符是 if-else 结构的紧凑表示。我们可以通过以下代码来改写检查奇数/偶数的逻辑 −
#include <stdio.h>
int main(){
int a = 10;
if (a % 2 == 0){
printf("%d is Even\n", a);
}
else{
printf("%d is Odd\n", a);
}
return 0;
}
Example 3
下面的程序比较变量 "a" 和 "b",并将其中一个较大值分配给变量 "c"。
#include <stdio.h>
int main(){
int a = 100, b = 20, c;
c = (a >= b) ? a : b;
printf ("a: %d b: %d c: %d\n", a, b, c);
return 0;
}
Example 4
使用 if-else 结构所对应的代码如下 −
#include <stdio.h>
int main(){
int a = 100, b = 20, c;
if (a >= b){
c = a;
}
else {
c = b;
}
printf ("a: %d b: %d c: %d\n", a, b, c);
return 0;
}
Example 5
如果你需要在三元运算符的 true 和/或 false 操作中输入多个语句,那么你必须用逗号将它们分开,如下所示 −
#include <stdio.h>
int main(){
int a = 100, b = 20, c;
c = (a >= b) ? printf ("a is larger "), c = a : printf("b is larger "), c = b;
printf ("a: %d b: %d c: %d\n", a, b, c);
return 0;
}
Example 6
使用 if-else 语句的相应程序如下 −
#include <stdio.h>
int main(){
int a = 100, b = 20, c;
if(a >= b){
printf("a is larger \n");
c = a;
}
else{
printf("b is larger \n");
c = b;
}
printf ("a: %d b: %d c: %d\n", a, b, c);
return 0;
}
Nested Ternary Operator
就像我们可以使用嵌套的 if-else 语句一样,我们可以在 True 操作数和 False 操作数中使用三元运算符。
exp1 ? (exp2 ? expr3 : expr4) : (exp5 ? expr6: expr7)
首先,C 检查 expr1 是否为 true。如果是,则检查 expr2。如果为 true,则结果为 expr3;如果为 false,则结果为 expr4。
如果 expr1 变为 false,则它可能会检查 expr5 是否为 true,然后返回 expr6 或 expr7。
Example 1
让我们开发一个 C 程序来确定一个数字是能被 2 和 3 整除,还是仅能被 2 整除,或仅能被 3 整除,还是不能被 2 和 3 整除。我们将为此使用嵌套条件运算符,如下面的代码所示 −
#include <stdio.h>
int main(){
int a = 15;
printf("a: %d\n", a);
(a % 2 == 0) ? (
(a%3 == 0)? printf("divisible by 2 and 3") : printf("divisible by 2 but not 3"))
: (
(a%3 == 0)? printf("divisible by 3 but not 2") : printf("not divisible by 2, not divisible by 3")
);
return 0;
}
检查不同的值 −
a: 15
divisible by 3 but not 2
a: 16
divisible by 2 but not 3
a: 17
not divisible by 2, not divisible by 3
a: 18
divisible by 2 and 3
Example 2
在此程序中,我们针对相同目的使用了嵌套 if-else 语句代替条件运算符 −
#include <stdio.h>
int main(){
int a = 15;
printf("a: %d\n", a);
if(a % 2 == 0){
if (a % 3 == 0){
printf("divisible by 2 and 3");
}
else {
printf("divisible by 2 but not 3");
}
}
else{
if(a % 3 == 0){
printf("divisible by 3 but not 2");
}
else {
printf("not divisible by 2, not divisible by 3");
}
}
return 0;
}
当你运行这段代码时,它将产生以下输出:
a: 15
divisible by 3 but not 2