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

C 語言求和邏輯漏洞:當 m > n 時為何輸出兩次?

     編輯:程式設計疑難解答

初學者常寫出這類求和程式:輸入 m、n,計算從 m 加到 n 的總和。乍看邏輯無誤,但當輸入 m > n 時,程式卻會輸出兩次結果。問題出在兩個獨立的 if 判斷上。

錯誤分析

程式碼結構如下:

if (n >= m) {
    // 分支 A:包含 for 迴圈,迴圈結束時 m 已遞增至 n+1
}
if (n < m) {   // 這是第二個獨立 if,非 else
    // 分支 B:交換 m、n 後再次求和
}

當輸入滿足 n >= m 時,進入分支 A,for 迴圈執行完畢後 m 變為 n+1。此時第二個條件 n < m 成立,程式再次進入分支 B,導致重複計算並輸出兩次。

修正方法

  1. 將第二個 if 改為 else if,確保互斥。
  2. 或在分支 A 中使用暫存變數迭代,不修改原始 m。
  3. 最佳實務:先確保 m <= n(必要時交換),再用單一迴圈計算。

正確範例

int start = m, end = n;
if (start > end) { int tmp = start; start = end; end = tmp; }
long sum = 0;
for (int i = start; i <= end; i++) sum += i;
printf("%ld", sum);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved