C語言巢狀迴圈



在程式設計環境中,“巢狀”指的是將一個特定的程式設計元素包含在另一個類似的元素中。例如,巢狀迴圈、巢狀結構體巢狀條件語句等。

巢狀迴圈

當在 C 語言中,一個迴圈結構被用在另一個迴圈的迴圈體中時,我們稱之為巢狀迴圈(或迴圈中的迴圈)。其中,包含另一個迴圈的迴圈稱為外迴圈。被包含的迴圈稱為內迴圈

巢狀迴圈的通用語法

巢狀迴圈的一般形式如下所示:

Outer loop {
   Inner loop {
      ...
      ...
   }
   ... 
}

C 提供了三個用於迴圈構造的關鍵字 - whiledo-whilefor。這三種類型的迴圈都可以進行巢狀。這意味著你可以在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
c_loops.htm
廣告