面對多重選擇時,可將 if...else 擴展為 if...else if 鏈:
if (運算式1) 陳述句1
else if (運算式2) 陳述句2
else if (運算式3) 陳述句3
else 陳述句4
依序判斷,首個條件成立即執行對應區塊,其餘略過。若皆不成立則執行 else 區塊(可選)。
需求:依價格區間分段累計稅率(避免重複課稅)。
若 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 區塊內再出現 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) 配對,邏輯正確。
if...else if 扁平化,避免深層巢狀。if 必須加大括號明確區塊範圍。