首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C語言數值積分程序邏輯錯誤:do-while循環條件判斷顛倒導致無限循環

     編輯:程式設計綜合問答

錯誤代碼片段


do {
    scanf("%lf%lf", &leftlimit, &rightlimit);
    if (leftlimit > rightlimit)
        printf("積分下限應該小於上限,請重新輸入:");
} while (leftlimit < rightlimit); // ❌ 條件反了

邏輯分析

  • **需求**:用戶輸入下限 `leftlimit`、上限 `rightlimit`,要求 `leftlimit < rightlimit`。若輸入錯誤 (`leftlimit > rightlimit`),提示重新輸入。
  • **當前代碼**:`do...while(leftlimit < rightlimit)`。
    • 若用戶**正確輸入** (如 `0 10`):`leftlimit < rightlimit` 為真 → **循環繼續** → 要求重新輸入 → **陷入無限循環**。
    • 若用戶**錯誤輸入** (如 `10 0`):`leftlimit < rightlimit` 為假 → **循環結束** → 程序繼續執行錯誤數據。
  • **結論**:循環條件**完全相反**。

修正代碼


do {
    printf("請輸入被積分函數的上限及下限 (下限 < 上限):\n");
    scanf("%lf%lf", &leftlimit, &rightlimit);
    if (leftlimit >= rightlimit) { // 允許等於? 通常積分上下限不相等
        printf("錯誤:下限必須小於上限,請重新輸入!\n");
    }
} while (leftlimit >= rightlimit); // ✅ 條件:只要不合法就繼續循環

同類邏輯錯誤避坑指南

意圖正確 while 條件口訣
輸入合法才退出`while (!合法條件)`「不合法就繼續」
輸入非法才退出`while (合法條件)`「合法就繼續」

完整積分程序關鍵修正點

  • 上下限輸入驗證邏輯修正 (如上)。
  • 劃分數 `n` 非法處理:`if (n <= 0) n = -n;` → 應為 `if (n <= 0) { printf("劃分數必須為正整數"); continue; }` 或循環讀取直到合法。
  • 梯形公式實現正確:`area += h * (f(x_i) + f(x_{i+1})) / 2;`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved