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

C語言switch語句進階與一元二次方程求解實戰:多分支選擇、貫穿特性、嵌套if邏輯構建

     編輯:關於C語言

switch 語句:多路分支的優雅實現

當分支較多時,if-else if 顯得冗長。switch 專為多分支設計,結構清晰、效率高。

語法與流程


switch(表達式) {
    case 常量1: 語句序列1; break;
    case 常量2: 語句序列2; break;
    ...
    default: 語句n+1;
}
  • 表達式值必須為**整型、字符型、枚舉類型**。
  • 匹配後從該 case 執行,**無 break 則貫穿執行後續所有 case**.
  • break 跳出整個 switch。
  • 多個 case 共用語句可堆疊:case 1: case 2: case 3: 語句; break;

案例:輸入月份輸出天數(1999年)


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,係數鍵盤輸入,需覆蓋所有數學情況:

邏輯分支分析

  1. a=0 退化為一次/常數方程:
    • b≠0 → 線性方程 x=-c/b
    • b=0 → c=0 時無確定根(恒等式),c≠0 時無解
  2. a≠0 二次方程,判別式 Δ=b²-4ac:
    • Δ>0 → 兩個不等實根
    • Δ=0 → 兩個相等實根
    • Δ<0 → 兩個共軛複根

嵌套 if 實現完整程序


#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 堆疊與貫穿機制,結合嵌套條件邏輯,能應對複雜的多分支決策場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved