巢狀迴圈也是很常見的應用之一,例如我們可以利用巢狀迴圈來印出九九乘法表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> int main( void ) { int i, j; //迴圈變數 printf ( "九九乘法表\n" ); for (i = 1; i <= 9; i++) { for (j = 1; j <= 9; j++) { printf ( "%3d " , i * j); } printf ( "\n" ); } return 0; } /* 《程式語言教學誌》的範例程式 檔名:nn.c 功能:示範利用巢狀迴圈印出九九乘法表 作者:張凱慶 時間:西元2010年7月 */ |
編譯後執行,結果如下

因為有兩層迴圈,所以需要兩個迴圈變數,此例中,我們用了 i 及 j 兩個迴圈變數。
這個巢狀迴圈是怎麼運作的呢? i 等於 1 的時候, j 從 1 、 2 、 3 ... 到 9 跑了一次,然後 i 遞增成 2 , j 又從 1 、 2 、 3 ... 到 9 跑了一次,餘下 i 等於 3 、 4 、 5 、 6 、 7 、 8 、 9 , j 同樣從 1 、 2 、 3 ... 到 9 跑了一次。
因此,按順序就得到個別的乘積,一列一列的印出九九乘法表出來。
我們再用另一個例子說明巢狀迴圈的應用,以下是列印聖誕樹的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <stdio.h> int main( void ) { int i, j; //迴圈變數 int s; s = 6; for (i = 0; i < 7; i++) { for (j = 0; j < s; j++) { printf ( " " ); } s--; for (j = 0; j < 2 * i + 1; j++) { printf ( "*" ); } printf ( "\n" ); } for (i = 0; i < 4; i++) { for (j = 0; j < 5; j++) { printf ( " " ); } for (j = 0; j < 3; j++) { printf ( "*" ); } printf ( "\n" ); } printf ( "\n" ); return 0; } /* 《程式語言教學誌》的範例程式 檔名:ct.c 功能:示範利用巢狀迴圈印出聖誕樹 作者:張凱慶 時間:西元2010年7月 */ |
編譯執行結果如下

這個例子看起來更複雜一點,原理其實很簡單,就是把所要印出的完整圖形,拆解成數個圖形就行了。
第一個 for 迴圈印到第 7 行,第二個 for 迴圈印餘下 4 行,兩個迴圈裡另有兩個 for 迴圈,這是因為我們總共有兩種符號頁列印,一種是空格 ' ' ,另一種是星號 '*' 。
所以兩個巢狀 for 迴圈就是兩個大子圖,每一個巢狀 for 迴圈各有兩個子圖,分別是印出 ' ' 及 '*' 的 for 迴圈。因此,全部可以看成有四個子圖,如下

四個子圖分別是用橘色、藍色、紅色、黃色框起來的部份,這樣理解怎麼畫出這棵聖誕樹了嗎?
問題與討論
- 說明印出九九乘法表的方法。
- 說明聖誕樹的畫法。
- 替聖誕樹加一點裝飾,例如有些地方印 '#' ,有些地方印 '$' 。
- 嘗試畫大一點的聖誕樹,想一想,有哪些地方需要做調整?
沒有留言:
張貼留言