
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境搭建
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林型別
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof 運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if 語句
- C - if...else 語句
- C - 巢狀 if 語句
- C - switch 語句
- C - 巢狀 switch 語句
- C語言中的迴圈
- C - 迴圈
- C - while 迴圈
- C - for 迴圈
- C - do...while 迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break 語句
- C - continue 語句
- C - goto 語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者自定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 向函式傳遞陣列
- C - 從函式返回陣列
- C - 變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指標到指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void 指標
- C - 野指標
- C - 解引用指標
- C - 近、遠和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點 (.) 運算子
- C - 列舉 (或 enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入 & 輸出
- C - 檔案 I/O (檔案處理)
- C 預處理器
- C - 預處理器
- C - 指令
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static 關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的迴圈
包括 C 語言在內的許多程式語言都支援 **for** 關鍵字來構建迴圈。在 C 語言中,其他與迴圈相關的關鍵字有 **while** 和 **do-while**。與其他兩種型別不同,**for** 迴圈被稱為 **自動迴圈**,通常是程式設計師的首選。
**for 迴圈** 是一種入口控制迴圈,它執行語句直到給定條件滿足。所有元素(初始化、測試條件和增量)都放在一起,使用 **for** 關鍵字在括號內形成一個 **for** 迴圈。
for 迴圈的語法
C 程式語言中 **for** 迴圈的語法如下:
for (init; condition; increment){ statement(s); }
for 迴圈的控制流程
以下是 "for" 迴圈的控制流程:
**init** 步驟首先執行,並且只執行一次。此步驟允許您宣告和初始化任何迴圈控制 變數。您不需要在此處放置語句,只要出現分號即可。
接下來,評估條件。如果為真,則執行迴圈體。如果為假,則不執行迴圈體,控制跳轉到 "for" 迴圈之後緊隨其後的下一條語句。
在 "for" 迴圈體執行之後,控制流跳轉回增量語句。此語句允許您更新任何迴圈控制變數。此語句可以留空,只要在條件之後出現分號即可。
現在再次評估條件。如果為真,則執行迴圈並重復該過程(迴圈體,然後增量步驟,然後再次條件)。條件變為假後,"for" 迴圈終止。
for 迴圈的流程圖
以下流程圖表示 **for** 迴圈的工作原理:

當開發人員預先知道要執行多少次迭代時,他們更喜歡使用 **for** 迴圈。可以將其視為 **while** 和 **do-while** 迴圈的簡寫,這些迴圈遞增並測試迴圈變數。
**for** 迴圈可以採用不同的變體。讓我們瞭解 **for** 迴圈在不同情況下的工作原理。
示例:基本 for 迴圈
這是 **for** 迴圈最基本的形式。請注意,括號內(在 **for** 關鍵字之前)的所有三個子句都是可選的。
#include <stdio.h> int main(){ int a; // for loop execution for(a = 1; a <= 5; a++){ printf("a: %d\n", a); } return 0; }
輸出
執行程式碼並檢查其輸出:
a: 1 a: 2 a: 3 a: 4 a: 5
在迴圈語句之前初始化 for 迴圈計數器
初始化步驟可以放在 **for** 迴圈的頭部上方。在這種情況下,必須透過放置分號來使 **init** 部分為空。
示例
#include <stdio.h> int main(){ int a = 1; // for loop execution for( ; a <= 5; a++){ printf("a: %d\n", a); } return 0; }
輸出
您仍然會得到相同的輸出:
a: 1 a: 2 a: 3 a: 4 a: 5
在 for 迴圈體內部更新迴圈計數器
您也可以在增量子句的位置放置一個空語句。但是,您需要在迴圈體內部放置增量語句,否則它將變成一個 無限迴圈。
示例
#include <stdio.h> int main(){ int a; // for loop execution for(a = 1; a <= 5; ){ printf("a: %d\n", a); a++; } return 0; }
輸出
在這裡,您也將獲得與上一個示例相同的輸出:
a: 1 a: 2 a: 3 a: 4 a: 5
在 for 迴圈體內部使用測試條件
您還可以省略括號中測試條件的第二個子句。在這種情況下,您需要使用 **break** 語句 終止迴圈,否則迴圈將無限執行。
示例
#include <stdio.h> int main(){ int a; // for loop execution for(a = 1; ; a++){ printf("a: %d\n", a); if(a == 5) break; } return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
a: 1 a: 2 a: 3 a: 4 a: 5
使用多個計數器的 for 迴圈
在 **for** 語句中可能有多個變數的初始化和/或多個增量語句。但是,只能有一個測試條件。
示例
#include <stdio.h> int main(){ int a, b; // for loop execution for(a = 1, b = 1; a <= 5; a++, b++){ printf("a: %d b: %d a*b: %d\n", a, b, a*b); } return 0; }
輸出
當您執行此程式碼時,它將產生以下輸出:
a: 1 b: 1 a*b: 1 a: 2 b: 2 a*b: 4 a: 3 b: 3 a*b: 9 a: 4 b: 4 a*b: 16 a: 5 b: 5 a*b: 25
for 迴圈中的遞減
您還可以形成一個遞減的 **for** 迴圈。在這種情況下,迴圈變數的初始值大於其在測試條件中的值。for 語句中的最後一個子句使用遞減運算子。
示例
以下程式按降序列印數字 5 到 1:
#include <stdio.h> int main(){ int a; // for loop execution for(a = 5; a >= 1; a--){ printf("a: %d\n", a); } return 0; }
輸出
執行程式碼並檢查其輸出:
a: 5 a: 4 a: 3 a: 2 a: 1
使用 for 迴圈遍歷陣列
**for 迴圈** 非常適合一次遍歷陣列的一個元素。請注意,陣列中的每個元素都具有從 "0" 開始遞增的索引。
示例
#include <stdio.h> int main(){ int i; int arr[] = {10, 20, 30, 40, 50}; // for loop execution for(i = 0; i < 5; i++){ printf("a[%d]: %d\n", i, arr[i]); } return 0; }
輸出
當您執行此程式碼時,它將產生以下輸出:
a[0]: 10 a[1]: 20 a[2]: 30 a[3]: 40 a[4]: 50
示例:使用 for 迴圈計算陣列元素的和
以下程式計算給定陣列中所有整數的平均值。
#include <stdio.h> int main(){ int i; int arr[] = {10, 20, 30, 40, 50}; int sum = 0; float avg; // for loop execution for(i=0; i<5; i++){ sum += arr[i]; } avg = (float)sum / 5; printf ("Average = %f", avg); return 0; }
輸出
執行程式碼並檢查其輸出:
Average = 30.000000
示例:使用 for 迴圈計算階乘
以下程式碼使用 **for** 迴圈計算數字的階乘值。請注意,數字的階乘是 1 到給定數字之間所有整數的乘積。階乘在數學上用以下公式表示:
x! = 1 * 2 * . . . * x
以下是計算階乘的程式碼:
#include <stdio.h> int main(){ int i, x = 5; int fact = 1; // for loop execution for(i=1; i<= x; i++){ fact *= i; } printf("%d != %d", x, fact); return 0; }
輸出
當您執行此程式碼時,它將產生以下輸出:
5! = 120
當重複次數已知時,for 迴圈非常適合。但是,迴圈行為可以透過 **for** 迴圈體內的 **break** 和 **continue** 關鍵字 來控制。巢狀 **for** 迴圈也經常用於處理二維 陣列。