
- 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 - return 語句
- 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 語言中,一個迴圈結構被用在另一個迴圈的迴圈體中時,我們稱之為巢狀迴圈(或迴圈中的迴圈)。其中,包含另一個迴圈的迴圈稱為外迴圈。被包含的迴圈稱為內迴圈。
巢狀迴圈的通用語法
巢狀迴圈的一般形式如下所示:
Outer loop { Inner loop { ... ... } ... }
C 提供了三個用於迴圈構造的關鍵字 - while、do-while 和 for。這三種類型的迴圈都可以進行巢狀。這意味著你可以在for迴圈內放置一個while迴圈,在do-while迴圈內放置一個for迴圈,或者其他任何組合。
巢狀迴圈的一般行為是,對於外迴圈的每次迭代,內迴圈都會完成所有的迭代。
巢狀 for 迴圈
巢狀 for 迴圈非常常見。如果內外迴圈都預期執行三次迭代,則最內層語句的總迭代次數將是“3 * 3 = 9”。
示例:巢狀 for 迴圈
請看下面的例子:
#include <stdio.h> int main(){ int i, j; // outer loop for(i = 1; i <= 3; i++){ // inner loop for(j = 1; j <= 3; j++){ printf("i: %d j: %d\n", i, j); } printf("End of Inner Loop \n"); } printf("End of Outer Loop"); return 0; }
輸出
執行此程式碼時,將產生以下輸出:
i: 1 j: 1 i: 1 j: 2 i: 1 j: 3 End of Inner Loop i: 2 j: 1 i: 2 j: 2 i: 2 j: 3 End of Inner Loop i: 3 j: 1 i: 3 j: 2 i: 3 j: 3 End of Inner Loop End of Outer loop
巢狀迴圈的解釋
現在讓我們分析一下上面程式的工作原理。當遇到外迴圈時,外迴圈的迴圈變數“i”被初始化為 1。由於測試條件(a <= 3)為真,程式進入外迴圈體。
程式到達內迴圈,控制內迴圈的變數“j”被初始化為 1。由於內迴圈的測試條件(j <= 3)為真,程式進入內迴圈。列印“a”和“b”的值。
程式到達內迴圈的末尾。它的變數“j”自增。控制跳轉到步驟 4,直到條件(j <= 3)為真。
當測試條件變為假(因為“j”變為 4)時,控制跳出內迴圈。遇到外迴圈的末尾。控制外迴圈的變數“i”自增,控制跳轉到步驟 3。由於這是內迴圈的開始,因此“j”再次設定為 1。
內迴圈完成其迭代並再次結束。步驟 4 到 8 將重複,直到外迴圈的測試條件(i <= 3)變為假。在外迴圈結束時,“i”和“j”分別變為 4 和 4。
結果表明,對於外迴圈變數的每個值,內迴圈變數都會取所有值。列印的總行數為“3 * 3 = 9”。
在 for 迴圈內巢狀 while 迴圈
任何型別的迴圈都可以在任何其他型別的迴圈中巢狀。讓我們透過在外迴圈for迴圈中放置一個while迴圈來重寫上面的例子。
示例:巢狀迴圈(for 迴圈內巢狀 while 迴圈)
請看下面的例子:
#include <stdio.h> int main(){ int i, j; // outer for loop for (i = 1; i <= 3; i++){ // inner while loop j = 1; while (j <= 3){ printf("i: %d j: %d\n", i, j); j++; } printf("End of Inner While Loop \n"); } printf("End of Outer For loop"); return 0; }
輸出
i: 1 j: 1 i: 1 j: 2 i: 1 j: 3 End of Inner While Loop i: 2 j: 1 i: 2 j: 2 i: 2 j: 3 End of Inner While Loop i: 3 j: 1 i: 3 j: 2 i: 3 j: 3 End of inner while Loop End of outer for loop
程式設計師在許多應用程式中使用巢狀迴圈。讓我們再看一些巢狀迴圈的例子。
C 巢狀迴圈示例
示例:打印表格
以下程式使用兩個巢狀for迴圈列印 1 到 10 的表格。
#include <stdio.h> int main(){ int i, j; printf("Program to Print the Tables of 1 to 10 \n"); // outer loop for(i = 1; i <= 10; i++){ // inner loop for(j = 1; j <= 10; j++){ printf("%4d", i*j); } printf("\n"); } return 0; }
輸出
執行程式碼並檢查其輸出:
Program to Print the Tables of 1 to 10 1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
示例:列印字元金字塔
以下程式碼列印來自字串的遞增數量的字元。
#include <stdio.h> #include <string.h> int main(){ int i, j, l; char x[] = "TutorialsPoint"; l = strlen(x); // outer loop for(i = 0; i < l; i++){ // inner loop for(j = 0; j <= i; j++){ printf("%c", x[j]); } printf("\n"); } return 0; }
輸出
執行此程式碼時,將產生以下輸出:
T Tu Tut Tuto Tutor Tutori Tutoria Tutorial Tutorials TutorialsP TutorialsPo TutorialsPoi TutorialsPoin TutorialsPoint
示例:列印二維陣列
在這個程式中,我們將展示如何使用巢狀迴圈來顯示一個二維整數陣列。外迴圈控制行號,內迴圈控制列號。
#include <stdio.h> int main(){ int i, j; int x[4][4] = { {1, 2, 3, 4}, {11, 22, 33, 44}, {9, 99, 999, 9999}, {10, 20, 30, 40} }; // outer loop for (i=0; i<=3; i++){ // inner loop for(j=0; j <= 3; j++){ printf("%5d", x[i][j]); } printf("\n"); } return 0; }
輸出
執行此程式碼時,將產生以下輸出:
1 2 3 4 11 22 33 44 9 99 999 9999 10 20 30 40