同一問題用三種循環實現,驗證結果一致性,理解各循環適用場景。
等差數列求和:首項 2,末項 100,項數 50
Sum = n × (a₁ + aₙ) / 2 = 50 × 102 / 2 = 2550
#include <stdio.h>
int main() {
int sum, i;
/* 1. for 循環:已知次數,最適合 */
sum = 0;
for (i = 2; i <= 100; i += 2) {
sum += i;
}
printf("for 循環結果:%d\n", sum);
/* 2. while 循環:條件驅動 */
sum = 0;
i = 2;
while (i <= 100) {
sum += i;
i += 2;
}
printf("while 循環結果:%d\n", sum);
/* 3. do-while 循環:至少執行一次 */
sum = 0;
i = 2;
do {
sum += i;
i += 2;
} while (i <= 100);
printf("do-while 循環結果:%d\n", sum);
return 0;
}
for 循環結果:2550 while 循環結果:2550 do-while 循環結果:2550
| 維度 | for | while | do-while |
|---|---|---|---|
| 判斷時機 | 每次迭代前 | 每次迭代前 | 每次迭代後 |
| 可能零次執行 | 是 | 是 | 否 (至少一次) |
| 適用場景 | 計數器控制、已知範圍 | 條件驅動、未知次數 | 菜單交互、至少一次處理 |
| 初始化/增量位置 | 集中在頭部 | 分散在體外/體內 | 體外初始化、體內增量 |
| 語義清晰度 | 最高 (循環控制集中) | 中等 | 較低 (易忽略後判斷) |
int n = 50; // 項數
int sum = n * (2 + 100) / 2; // 2550,O(1) 時間複雜度
實際工程中優先選擇 O(1) 數學解,循環僅用於無法求閉式解的情況。