當分支較多時,if-else if 顯得冗長。switch 專為多分支設計,結構清晰、效率高。
switch(表達式) {
case 常量1: 語句序列1; break;
case 常量2: 語句序列2; break;
...
default: 語句n+1;
}
case 執行,**無 break 則貫穿執行後續所有 case**.break 跳出整個 switch。case 1: case 2: case 3: 語句; break;
int month, day;
scanf("%d", &month);
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12: day=31; break;
case 4: case 6: case 9: case 11: day=30; break;
case 2: day=28; break;
default: day=-1;
}
if(day==-1) printf("Invalid month!");
else printf("1999.%d has %d days", month, day);
利用 case 堆疊實現「大月/小月/二月」三組邏輯,代碼極其簡潔。
求解 ax²+bx+c=0,係數鍵盤輸入,需覆蓋所有數學情況:
x=-c/bc=0 時無確定根(恒等式),c≠0 時無解Δ=b²-4ac:
#include
#include
main() {
float a,b,c,s,x1,x2; double t;
scanf("%f%f%f", &a,&b,&c);
if(a==0.0) {
if(b!=0.0) printf("Root: %f", -c/b);
else if(c==0.0) printf("x indeterminate");
else printf("No root!");
} else {
s = b*b - 4*a*c;
if(s>=0.0) {
if(s>0.0) {
t = sqrt(s);
x1 = -0.5*(b+t)/a;
x2 = -0.5*(b-t)/a;
printf("Two different roots: %f and %f", x1, x2);
} else printf("Two equal roots: %f", -0.5*b/a);
} else {
t = sqrt(-s);
x1 = -0.5*b/a; // 實部
x2 = fabs(0.5*t/a); // 虛部絕對值
printf("Two complex roots: %f+i%f and %f-i%f", x1,x2,x1,x2);
}
}
}
Input: 1 2 3 → Δ=-8 <0 → -1.000000+i1.000000 -1.000000-i1.000000
Input: 2 5 3 → Δ=1 >0 → -1.500000 and -1.000000
Input: 0 0 3 → a=0,b=0,c≠0 → No root!
這個案例展示了如何用嵌套 if 系統性覆蓋所有數學分支,配合 math.h 庫函數 sqrt、fabs 實現完整求解器。掌握 switch 的 case 堆疊與貫穿機制,結合嵌套條件邏輯,能應對複雜的多分支決策場景。