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

C 語言練習:計算 1~100 奇數和 (巨集、迴圈、條件判斷綜合應用)

     編輯:關於C語言

題目需求

計算 1 到 100 (含) 之間所有奇數的總和,要求使用巨集定義範圍、for 迴圈與條件判斷。

完整程式碼

#include 

#define BEGIN 1
#define END   100

int main(void) {
    int sum = 0;

    for (int i = BEGIN; i <= END; ++i) {
        if (i % 2 == 1) {        // 判斷奇數:餘數為 1
            sum += i;
        }
    }

    printf("1 到 %d 之間奇數和 = %d\n", END, sum);
    return 0;
}

執行流程逐步追蹤 (以 1~10 為例)

ii % 2 == 1動作sum 累計
1真sum += 11
2假略過1
3真sum += 34
4假略過4
5真sum += 59
6假略過9
7真sum += 716
8假略過16
9真sum += 925
10假略過25

最終結果:25 (1+3+5+7+9)。

關鍵語法解析

1. 巨集定義範圍

#define BEGIN 1
#define END   100
  • 前置處理器純文字替換,無型別、無分號。
  • 修改範圍只需改兩行,不動邏輯代碼,符合單一真實來源原則。

2. for 迴圈三段式

for (int i = BEGIN; i <= END; ++i)
  • int i = BEGIN:初始化 (C99 允許在迴圈宣告變數)
  • i <= END:繼續條件 (含邊界)
  • ++i:前置遞增,效能略優於 i++ (無暫存副本)

3. 奇數判斷

if (i % 2 == 1)
  • 正整數模 2 餘 1 ⇔ 奇數。
  • 位元運算替代:if (i & 1) (更快,編譯器通常自動優化)。

數學驗證 (等差數列求和)

1~100 奇數為等差數列:

  • 首項 a1 = 1
  • 末項 an = 99
  • 項數 n = (99-1)/2 + 1 = 50
  • 和 S = n * (a1 + an) / 2 = 50 * 100 / 2 = 2500

程式輸出應為 2500。

常見錯誤與修正

錯誤代碼問題修正
#define BEGIN 1;巨集含分號導致語法錯誤移除分號
for (i=BEGIN; i漏掉 END (100)改 i <= END
if (i % 2 = 1)單等號賦值非比較改 ==
sum = i覆蓋而非累加改 sum += i

進階優化版本

版本 A:步進 2 直接遍歷奇數 (無需判斷)

for (int i = BEGIN | 1; i <= END; i += 2) {  // BEGIN|1 確保起始為奇數
    sum += i;
}

版本 B:數學公式 O(1) 直接計算

int first = (BEGIN % 2) ? BEGIN : BEGIN + 1;
int last  = (END % 2)   ? END   : END - 1;
if (first <= last) {
    int n = (last - first) / 2 + 1;
    sum = n * (first + last) / 2;
}

擴展練習

  1. 修改巨集計算 1~1000 奇數和。
  2. 改寫為 while 迴圈版本。
  3. 加入使用者輸入範圍 (scanf 讀取 BEGIN/END)。
  4. 計算偶數和、奇數個數、奇數平均值。

結語

這個簡單練習串起了巨集、迴圈、條件判斷、模數運算、累加器模式等 C 語言入門核心概念。掌握邊界條件 (≤ vs <)、累加器初始化、位元運算優化,是寫出正確、高效迴圈的基礎。

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