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

C語言 for 迴圈完全指南:語法、巢狀、邊界控制與常見陷阱

     編輯:關於C語言

前言:迴圈的「瑞士刀」

for 迴圈將初始化、條件判斷、增量更新集中在一行,是處理已知次數迭代的首選結構。Turbo C 2.0 完整支援 ANSI C for 語義。

一、標準語法


for (初始化; 條件表達式; 增量運算式)
    語句;  // 或複合語句 { ... }
  • 三部分以分號分隔,分號不可省略
  • 任一部分可為空,但分號必須保留

二、執行流程

1. 執行「初始化」(僅一次)
2. 評估「條件表達式」
   ├─ 真(非0) → 執行「語句」 → 執行「增量運算式」 → 回步驟2
   └─ 假(0)   → 結束迴圈,執行後續代碼

三、基礎範例:1 到 10 累加


int sum = 0;
for (int i = 1; i <= 10; ++i)  // C99 允許在初始化處宣告變數
    sum += i;
printf("Sum = %d\n", sum);  // 55

四、三大靈活變體

變體語法適用場景
省略初始化for (; i < n; ++i)迴圈變數在外部已初始化
省略條件for (;;) 或 for (; ; ++i)無限迴圈,內部用 break 跳出
省略增量for (i=0; i增量邏輯複雜,放在迴圈體內

五、巢狀迴圈:多維迭代


for (int i = 0; i < 2; ++i)
    for (int j = 0; j < 2; ++j)
        for (int k = 0; k < 2; ++k)
            printf("%d %d %d\n", i, j, k);

輸出(8 組排列):

0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1

關鍵點:內層迴圈完整跑完一次,外層才推進一步。時間複雜度為各層迴圈次數乘積。

六、進階技巧

1. 多變數初始化/增量(逗號運算子)


for (int i = 0, j = 10; i < j; ++i, --j) {
    printf("%d %d\n", i, j);
}

2. 迴圈變數作用域(C99)


for (int i = 0; i < 5; ++i) { /* i 可見 */ }
// i 在此處不可見(編譯錯誤若使用)

Turbo C 2.0 (C89) 不支援,需在區塊開頭宣告。

3. 範圍基礎迴圈模擬(C 無原生支援)


#define FOR_EACH(arr, var) \
    for (int _i = 0, *var = &(arr)[0]; _i < sizeof(arr)/sizeof(arr[0]); ++_i, ++var)

int a[] = {1,2,3};
FOR_EACH(a, p) { printf("%d ", *p); }

七、常見陷阱與修正

陷阱錯誤代碼問題修正
分號誤置for (i=0; i<10; ++i); stmt;迴圈體為空,stmt 只執行一次移除分號
邊界錯誤for (i=0; i<=n; ++i) 存取 a[i]陣列越界 (0..n-1)i < n
修改迴圈變數迴圈體內 i = 0導致無限迴圈或邏輯錯誤避免修改,或改用 while
浮點數作計數器for (float f=0; f<1; f+=0.1)精度誤差導致次數不準用整數計數,內部換算
無符號倒序for (unsigned i=n; i>=0; --i)永真 (i>=0 恆成立)for (int i=n; i>=0; --i) 或 do { } while (i-- > 0)

八、for vs while 選擇指南

  • 已知迭代次數/計數器驅動 → for(語義清晰、變數作用域可控)
  • 條件驅動/次數未知 → while(如讀檔直到 EOF、等待旗標變化)
  • 至少執行一次 → do-while

結語

for 迴圈以「初始化、條件、增量」三段式設計,將迭代控制邏輯集中暴露,是結構化程式設計的基石。掌握「三部分可空但分號必留、巢狀順序、邊界條件、避免浮點計數」等核心技巧,並根據語義在 for/while/do-while 中選擇,能寫出無 Bug、易閱讀的迴圈代碼。

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