計算 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;
}
| i | i % 2 == 1 | 動作 | sum 累計 |
|---|---|---|---|
| 1 | 真 | sum += 1 | 1 |
| 2 | 假 | 略過 | 1 |
| 3 | 真 | sum += 3 | 4 |
| 4 | 假 | 略過 | 4 |
| 5 | 真 | sum += 5 | 9 |
| 6 | 假 | 略過 | 9 |
| 7 | 真 | sum += 7 | 16 |
| 8 | 假 | 略過 | 16 |
| 9 | 真 | sum += 9 | 25 |
| 10 | 假 | 略過 | 25 |
最終結果:25 (1+3+5+7+9)。
#define BEGIN 1
#define END 100
for (int i = BEGIN; i <= END; ++i)
int i = BEGIN:初始化 (C99 允許在迴圈宣告變數)i <= END:繼續條件 (含邊界)++i:前置遞增,效能略優於 i++ (無暫存副本)if (i % 2 == 1)
if (i & 1) (更快,編譯器通常自動優化)。1~100 奇數為等差數列:
a1 = 1an = 99n = (99-1)/2 + 1 = 50S = 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 |
for (int i = BEGIN | 1; i <= END; i += 2) { // BEGIN|1 確保起始為奇數
sum += i;
}
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;
}
while 迴圈版本。這個簡單練習串起了巨集、迴圈、條件判斷、模數運算、累加器模式等 C 語言入門核心概念。掌握邊界條件 (≤ vs <)、累加器初始化、位元運算優化,是寫出正確、高效迴圈的基礎。