C 語言中非 0 為真,0 為假。任何表達式皆可作為條件。
if (表達式) 語句1;
// 多語句
if (表達式) {
語句體;
}
if (表達式) 語句1;
else 語句2;
範例:絕對值
if (x >= 0) y = x;
else y = -x;
if (expr1) stmt1;
else if (expr2) stmt2;
else if (expr3) stmt3;
...
else stmtN; // 預設分支
自上而下匹配,命中即執行並跳出結構。
{} 關鍵作用// 錯誤:else 匹配最近的 if
if (x > 20 || x < -10)
if (y <= 100 && y > x)
printf("Good");
else
printf("Bad"); // 屬於內層 if
// 正確:用 {} 明確歸屬
if (x > 20 || x < -10) {
if (y <= 100 && y > x)
printf("Good");
}
else
printf("Bad"); // 屬於外層 if
規則:else 永遠匹配最近的未配對 if。
float num; scanf("%f", &num);
if (num > 0) printf("plus");
else if (num < 0) printf("negative");
else printf("zero");
fabs() 更佳)#include <math.h>
y = fabs(x);
if (x < -5) y = x;
else if (-5 <= x && x < 1) y = 2*x + 5;
else if (1 <= x && x < 4) y = x + 6;
else y = 3*x - 2;
注意:C 不支援連續不等式 -5 <= x < 1,必須拆分為 -5 <= x && x < 1。
巢狀 if 實現全排列比較,{} 必不可少。
switch (變量) {
case 常量1: 語句1; break;
case 常量2: 語句2; break;
...
default: 語句N;
}
case 只能是整型常量表達式(int/char/enum),不可為浮點數。break 會貫穿執行下一 case(fall-through)。if-else 更清晰高效。