C语言中的三元运算符



C语言中的三元运算符(?:)是一种条件运算符。“三元”表示该运算符有三个操作数。三元运算符通常用于以更紧凑的方式编写多个条件(if-else)语句。

C语言中三元运算符的语法

三元运算符使用以下语法:

exp1 ? exp2 : exp3

它使用三个**操作数**:

  • **exp1** - 求值为真或假的布尔表达式
  • **exp2** - 当 exp1 为真时,由 ? 运算符返回
  • **exp3** - 当 exp1 为假时,由 ? 运算符返回

示例 1: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;
}

输出

运行此代码时,将产生以下输出:

10 is Even

将“a”的值更改为 15 并再次运行代码。现在您将获得以下**输出**:

15 is Odd

示例 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;
}

输出

运行代码并检查其输出:

10 is Even

示例 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;
}

输出

运行此代码时,将产生以下输出:

a: 100 b: 20 c: 100

示例 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;
}

输出

运行代码并检查其输出:

a: 100 b: 20 c: 100

示例 5

如果需要在三元运算符的真操作数和/或假操作数中放置多个语句,则必须用逗号分隔它们,如下所示:

#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;
}

输出

在此代码中,较大的数字被赋值给“c”,并打印相应的提示信息。

a is larger a: 100 b: 20 c: 20

示例 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;
}

输出

运行代码并检查其输出:

a is larger
a: 100 b: 20 c: 100

嵌套三元运算符

就像我们可以使用嵌套 if-else 语句一样,我们可以在真操作数和假操作数中使用三元运算符。

exp1 ? (exp2 ? expr3 : expr4) : (exp5 ? expr6: expr7)

首先,C 检查 expr1 是否为真。如果是,则检查 expr2。如果为真,则结果为 expr3;如果为假,则结果为 expr4。

如果 expr1 为假,则它可能会检查 expr5 是否为真,并返回 expr6 或 expr7。

示例 1

让我们开发一个C程序来确定一个数字是否能被 2 和 3 整除,或者被 2 整除但不能被 3 整除,或者被 3 整除但不能被 2 整除,或者既不能被 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

示例 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
广告