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

C語言實現交替加減總和:正確處理迴圈邊界避免越界

     編輯:程式設計綜合問答

問題背景

在C語言程式設計中,常遇到需要計算陣列元素交替加減的需求,例如計算 data[0] - data[1] + data[2] - data[3] + ... - data[99]。一位初學者編寫程式時,發現執行結果顯示 -1.QNAN00000000(無效數值),而使用標記變數 sign = -sign 的寫法卻能得到正確結果。

錯誤程式碼分析

錯誤的核心在於迴圈條件判斷。原程式碼中迴圈條件設為 i < 100,但每次迴圈處理兩個元素(一減一加),實際上只需迴圈 50 次。當 i 達到 50 時,存取 data[100] 已經超出陣列範圍(有效索引 0~99),導致未定義行為,產生 NaN(非數值)。

正確解法:使用標記變數控制正負號

int sum = 0;
int sign = 1;
for (int i = 0; i < 100; i++) {
    sum += sign * data[i];
    sign = -sign; // 正負號交替翻轉
}

這種寫法邏輯清晰:sign 初始為 1,每次迴圈結束翻轉符號,自然實現 + - + - 的效果,且迴圈條件 i < 100 完全正確,不會越界。

關鍵點總結

  • 處理成對操作時,迴圈次數應為元素總數的一半,或改用單次迴圈配合狀態變數。
  • 陣列下標越界是 C 語言常見錯誤,會導致不可預期的結果(如 NaN、程式崩潰)。
  • sign = -sign 是切換正負號的經典技巧,簡潔高效。

錯誤程式碼截圖

正確程式碼截圖

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