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
廣告