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

C語言條件控制:if-else if 多重分支與巢狀 if 陷阱完整指南

     編輯:關於C語言

if...else if 多重分支結構

面對多重選擇時,可將 if...else 擴展為 if...else if 鏈:

if (運算式1) 陳述句1
else if (運算式2) 陳述句2
else if (運算式3) 陳述句3
else 陳述句4

依序判斷,首個條件成立即執行對應區塊,其餘略過。若皆不成立則執行 else 區塊(可選)。

實戰範例:貨物分級課稅

需求:依價格區間分段累計稅率(避免重複課稅)。

  • ≥10000 元:超過部分課 5%
  • 5000~9999 元:超過部分課 3%
  • 1000~4999 元:超過部分課 2%
  • <1000 元:免稅

演算法邏輯

若 price >= 10000
    tax = 0.05 * (price - 10000); price = 10000;
否則若 price >= 5000
    tax += 0.03 * (price - 5000); price = 5000;
否則若 price >= 1000
    tax += 0.02 * (price - 1000); price = 1000;

關鍵技巧:逐級遞減 price,確保各區間僅課一次稅。

完整程式碼

#include <stdio.h>
main() {
    float price, tax = 0;
    printf("input price: ");
    scanf("%f", &price);

    if (price >= 10000.0) {
        tax = 0.05 * (price - 10000) + tax;
        price = 10000;
    }
    if (price >= 5000.0) {
        tax = 0.03 * (price - 5000) + tax;
        price = 5000;
    }
    if (price >= 1000.0) {
        tax = 0.02 * (price - 1000) + tax;
    }
    printf("thetax=%10.3f", tax);
}

執行範例:輸入 15000 → 輸出 thetax=480.000(5000*5% + 5000*3% + 4000*2% = 250+150+80=480)。

if 陳述句巢狀與 else 配對陷阱

在 if 區塊內再出現 if 即為巢狀。最常見錯誤:else 與最近的 if 配對(C 標準規定)。

錯誤範例

y = 0;
if (x >= 0)
    if (x > 0)
        y = 1;
    else
        y = -1;  // 實際與內層 if 配對!

意圖:x>=0 時 y=1,x==0 時 y=0,x<0 時 y=-1。
實際:x>=0 且 x>0 → y=1;x>=0 且 x==0 → y=-1(錯誤)。

修正方法:使用複合陳述句(大括號)明確界定範圍

y = 0;
if (x >= 0) {
    if (x > 0)
        y = 1;
}
else
    y = -1;

現在 else 確實與外層 if (x>=0) 配對,邏輯正確。

最佳實務建議

  1. 多重分支優先使用 if...else if 扁平化,避免深層巢狀。
  2. 巢狀 if 必須加大括號明確區塊範圍。
  3. 條件判斷順序影響效率:將最可能成立或篩選力最強的條件前置。
  4. 區間判斷採用「逐級遞減變數」技巧,避免重複計算與邏輯漏洞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved