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

C語言簡易計算器演進:從單文件到模塊化設計

     編輯:關於C語言

C語言簡易計算器演進:從單文件到模塊化設計

本文展示一個 C 語言控制台計算器的兩個版本迭代:初版將所有邏輯塞在 main 中,耦合度高;重構版引入函數分離、菜單函數、密碼驗證函數,結構清晰,易維護擴展。

版本一:面條代碼

  • 所有變量全局聲明,作用域混亂。
  • main 函數超過 200 行,包含密碼驗證、菜單顯示、四則運算、求餘、循環控制。
  • 密碼邏輯硬編碼在 do-while 中,嘗試三次機制寫法生硬。
  • 運算函數(加減乘除模)雖獨立,但調用方式重複冗余。

版本二:模塊化重構

// 功能函數聲明
int yanzheng(int);      // 密碼驗證
void caidan();          // 顯示菜單
void jiafa(int,int);    // 加法
void jianfa(int,int);   // 減法
void chengfa(float,float); // 乘法
void chufa(float,float);   // 除法
void mo(int,int);       // 求餘

// 主流程
void main() {
    int x, m, y;
    float a, b;
    printf("請輸入密碼:\n");
    scanf("%d", &x);
    m = yanzheng(x);
    if (m == 1) {
        caidan();
        for (; y != 6; ) {
            printf("請輸入選項:\n");
            scanf("%d", &y);
            if (y >= 1 && y < 6) {
                printf("請輸入要運算的兩個數:\n");
                scanf("%f%f", &a, &b);
            }
            switch(y) {
                case 1: jiafa(a,b); break;
                case 2: jianfa(a,b); break;
                case 3: chengfa(a,b); break;
                case 4: chufa(a,b); break;
                case 5: mo(a,b); break;
                case 6: break;
                default: printf("選項輸入錯誤!請重試\n");
            }
        }
    }
}

重構亮點

維度版本一版本二
密碼驗證內聯 do-while,邏輯分散獨立函數 yanzheng,邏輯集中
菜單顯示重複打印在循環中獨立函數 caidan,復用性強
運算函數返回值輸出內部直接打印,簡化調用
變量作用域大量全局變量局部化,減少副作用
類型一致性混用 int/float,格式化字符串易錯統一用 float 接收,內部按需轉換

進一步優化建議

  • 除法增加除零檢查。
  • 菜單選項用枚舉常量替代魔術數字。
  • 引入結構體封裝計算器狀態(歷史記錄、精度設置等)。
  • 使用函數指針表驅動 switch,實現開閉原則。

總結

從「能跑通」到「好維護」,關鍵在於職責分離:輸入輸出、業務邏輯、流程控制各司其職。這個小計算器完美演示了重構的核心價值。

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