首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言條件判斷語句進階:if-else-if 多重分支與條件運算子優化

     編輯:關於C語言

if-else-if 多重分支結構

適用於多個互斥條件分支,依序判斷,滿足即執行對應區塊並跳出整個結構。

語法結構


if (運算式1)
    敘述1;
else if (運算式2)
    敘述2;
else if (運算式3)
    敘述3;
...
else if (運算式m)
    敘述m;
else
    敘述n;  // 所有條件皆假時執行

範例:字元類別判別(依 ASCII 碼範圍)

#include <stdio.h>

void main() {
    char c;
    printf("input a character: ");
    c = getchar();
    if (c < 32)
        printf("This is a control character\n");
    else if (c >= '0' && c <= '9')
        printf("This is a digit\n");
    else if (c >= 'A' && c <= 'Z')
        printf("This is a capital letter\n");
    else if (c >= 'a' && c <= 'z')
        printf("This is a small letter\n");
    else
        printf("This is an other character\n");
}

邏輯:ASCII 碼 < 32 為控制字元;'0'~'9' 為數字;'A'~'Z' 大寫;'a'~'z' 小寫;其餘為其他。輸入 'g' 輸出 "small letter"。

if 敘述四大使用細節

(1) 條件運算式型態彈性

if 後運算式不限邏輯/關係運算式,任何運算式皆可:

  • if (a = 5):指派運算式值為 5(真),後續敘述恆執行
  • if (b):變數值非 0 為真
  • if (a = b) printf("%d", a); else printf("a=0");:將 b 指派給 a,若非 0 輸出 a,否則輸出 "a=0" — 實務常見模式

(2) 語法強制規定

  • 條件運算式必須以括號括起
  • 敘述結尾必須加分號

(3) 複合敘述必要性

若分支需執行多敘述,必須用大括號包裹成複合敘述,且右大括號後不可加分號。

if (a > b) {
    a++;
    b++;
} else {
    a = 0;
    b = 10;
}

(4) if 巢狀與 else 配對規則

巢狀 if 易產生 else 配對歧義:


if (運算式1)
    if (運算式2)
        敘述1;
    else
        敘述2;

C 語言規定:else 永遠與最近的未配對 if 配對。上例中 else 屬於內層 if。

巢狀 vs if-else-if 比較


// 巢狀寫法:判斷兩數大小
if (a != b)
    if (a > b) printf("A>B\n");
    else printf("A b) printf("A>B\n");
else printf("A

建議:多分支優先使用 if-else-if,邏輯扁平、易讀、易維護;巢狀僅用於真正的階層決策。

條件運算子 ?: — 三元運算子優化簡單分支

適用於單純指派情境,程式碼簡潔、效率略高。

語法與求值規則


運算式1 ? 運算式2 : 運算式3
  • 運算式1 為真 → 整體值為 運算式2
  • 運算式1 為假 → 整體值為 運算式3

經典應用:求兩數最大值


// if-else 版本
if (a > b) max = a;
else max = b;

// 條件運算子版本
max = (a > b) ? a : b;
// 可省略括號:max = a > b ? a : b;  (優先級高於指派)

三大使用注意事項

  1. 優先順序:低於關係/算術運算子,高於指派運算子
  2. 成對性:? 與 : 必須成對出現,不可單獨使用
  3. 結合方向:自右向左(右結合性)
    範例:a > b ? a : c > d ? c : d 解析為 a > b ? a : (c > d ? c : d) — 條件運算子巢狀

完整範例:輸入兩數輸出較大者

void main() {
    int a, b, max;
    printf("\n input two numbers: ");
    scanf("%d%d", &a, &b);
    printf("max=%d", a > b ? a : b);
}

總結:條件控制選擇指南

情境推薦寫法理由
單一條件、單敘述if簡潔直觀
雙向分支if-else結構清晰
多重互斥分支if-else-if扁平結構、易讀、效率佳
階層決策(條件相依)巢狀 if符合邏輯層次
單純指派擇一條件運算子 ?:程式碼極簡、無分支跳轉開銷
多值比對(離散值)switch編譯器優化為跳轉表、O(1)查找
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved