迴圈是程式設計中實現重複執行邏輯的核心結構。在 C 語言中,主要提供三種迴圈語句:while、do-while 和 for。掌握它們的語法、執行流程與適用場景,能讓你靈活處理各種重複性任務。本文將系統整理這三種迴圈的用法,並輔以實戰範例與常見陷阱分析。
while (表達式) {
// 迴圈主體語句
}
先計算表達式的值:
#include <stdio.h>
int main() {
int i = 1, sum = 0;
while (i <= 100) { // 累加條件:i 小於等於 100
sum += i;
i++; // 關鍵:修改循環變量,避免無限迴圈
}
printf("sum=%d\n", sum); // 輸出 5050
return 0;
}
注意:使用 sum 和 i 前務必賦初始值;迴圈主體若為多條語句,必須用大括號包裹成複合語句;條件表達式中必須包含使迴圈趨向結束的語句。
#include <stdio.h>
int main() {
int a, x;
long sum = 0, n = 1, tn;
scanf("%d%d", &a, &x); // 輸入數字 a 與項數 x
tn = a;
while (n <= x) { // 控制項數
sum += tn;
tn = tn * 10 + a; // 構造下一項:a → aa → aaa ...
n++;
}
printf("result is %ld", sum);
return 0;
}
do {
// 迴圈主體語句
} while (表達式);
無條件先執行一次迴圈主體,隨後判斷表達式:非零則繼續,為零則退出。保證至少執行一次。
#include <stdio.h>
int main() {
int i = 2, sum = 0;
do {
sum += i;
i += 2;
} while (i <= 100);
printf("sum=%d\n", sum); // 輸出 2550
return 0;
}
| 特性 | while | do-while |
|---|---|---|
| 首次執行前判斷 | 是 | 否(無條件執行一次) |
| 適用場景 | 可能零次執行 | 至少需執行一次(如選單輸入驗證) |
for (表達式1; 表達式2; 表達式3)
迴圈主體;
#include <stdio.h>
int main() {
int i, sum = 0;
for (i = 1; i <= 100; i++)
sum += i;
printf("sum=%d", sum);
return 0;
}
; 不能省略for (i=0,j=10; i<j; i++,j--)#include <stdio.h>
#include <math.h>
int main() {
int n, m, flag = 1;
printf("\n enter n:");
scanf("%d", &n);
for (m = 2; m < n && flag; m++) {
if (n % m == 0)
flag = 0; // 發現因數,非素數
}
if (flag == 1)
printf("\n%d is a prime number.", n);
else
printf("\n%d is not a prime number.", n);
return 0;
}
在 switch 與迴圈中均可使用,提供多重出口。
for (i = 0; i < 10; i++) {
printf("%d", i);
if (i == 5) break; // i 達到 5 即跳出
}
僅用於迴圈結構,跳過剩餘主體,直接進入下一次判斷/迭代。
for (i = 0; i < 10; i++) {
if (i == 5) continue; // 跳過 5 的輸出
printf("%d", i);
}
#include <stdio.h>
int main() {
int i = 1, s = 0;
loop:
if (i <= 100) {
s += i;
i++;
goto loop; // 模擬迴圈
}
printf("1+2+...+100=%d\n", s);
return 0;
}
建議:結構化程式設計不提倡 goto,但在多層巢狀迴圈需一次跳出最外層時,可作為替代方案。
while/for 實現階乘計算三大迴圈各有優勢:while 適合未知次數的條件控制;do-while 適合至少一次的交互輸入;for 適合已知次數的計數遍歷。善用 break/continue 能簡化邏輯,少用 goto 保持程式結構清晰。熟練掌握迴圈,是演算法實現的基石。