我要學會 C 語言(六):繞啊繞轉啊轉的迴圈結構
到目前為止,我們的程式差不多都是由上往下走,很循序漸進的執行。如果想要讓重複性的執行某些動作,就必須使用迴圈結構。
迴圈是什麼?迴圈就是重複性的執行某個區段裡的程式碼。但要重複幾次?什麼情況下要重複?迴圈有幾種?慢慢把它看完你就懂了!
在 C 語言裡面,迴圈主要有三種:for
、while
、do while
。
for 迴圈
for 迴圈的基本架構是這樣的:
for(初始化動作; 執行條件 ; 增加動作){
敘述
}
通常我們會使用一個變數來當作計數器(counter),初始化動作會給這個計數器一個起始值;第二個是執行條件,只有當符合執行條件的時候才會進到 for 迴圈裡執行敘述;第三個則是每次做完敘述要增加的動作。
例如下面這段程式碼,可以輸出 1~5 的數字:
#include <stdio.h>
int main(){
int i;
for(i=1;i<=5;i++){
printf("%d ", i);
}
}
輸出結果會是:
1 2 3 4 5
看似困難的 for 迴圈,其實只要搞清楚他的脈絡是怎麼走的,就不會亂掉了。
同樣的,也可以用巢狀 for 迴圈來印出直角三角形。
#include <stdio.h> int main(){ int i, j; for(i=1;i
輸出結果會是:
*
**
***
****
*****
原則上,使用 for
迴圈的時機為需要一個計數器從小到大(或從大到小)慢慢做某件事情。
while 迴圈
while 迴圈的基本架構則是這樣,其實比 for 還要簡單:
while(條件){
敘述
}
只要條件成立,就會一直執行敘述。所以 while
迴圈的使用時機為:達成某個條件時就一直做某件事情的時候。
例如我一樣要輸出 1~5 的數字:
#include <stdio.h>
int main(){
int i=1;
while(i<=5);
printf("%d ", i);
i++;
}
}
輸出結果:
1 2 3 4 5
當然,while
也可以弄成巢狀迴圈。
do-while 迴圈
do while
迴圈其實不太重要?畢竟他就是 while
迴圈,只是迴圈開始之前再做一件事情而已,架構如下:
do {
敘述
} while (條件);
一開始會先執行一次敘述,接著去判斷條件是否成立,成立的話再回去執行敘述,直到條件不成立為止。
值得注意的是 while (條件);
最後面有個分號。
不過 do while
迴圈還是有它的用途,例如我要計算正整數的位數:
#include <stdio.h>
int main(){
int digits = 0, n;
printf("輸入一個正整數:");
scanf("%d", &n)
do {
n /= 10;
digits++;
} while (n>0);
printf("這個整數是 %d 位數\n", digits);
return 0;
}
如果我們單純使用 while(n>0) 的迴圈的話,那輸入 0 會顯示 0 位數,但答案應該是 1 位數,這時候使用 do-while 迴圈就可以解決這個問題了。
以上就是 C 語言中的三種迴圈。從 while
和 for
的範例中可以發現,同樣的結果其實用三種迴圈都可以寫得出來,不過通常我們會選擇看起來最簡潔的,或是自己最習慣的方式。可別小看 C 語言只有三種迴圈,這三種迴圈搭配起來就可以做到很多不同的事情唷!
再者,巢狀迴圈中需要注意:通常當你有 n 層迴圈,你就會至少用到 n 個變數。
我要學會 C 語言 目錄
- 我要學會 C 語言(一):Hello, World!
- 我要學會 C 語言(二):有小數點的數不是整數之資料型態
- 我要學會 C 語言(三):加加減減乘除的變數運算
- 我要學會 C 語言(四):輸入與輸出好好玩
- 我要學會 C 語言(五):如果這樣會怎樣之選擇結構
- 我要學會 C 語言(六):繞啊繞轉啊轉的迴圈結構
- 我要學會 C 語言(七):寫一遍就能用好幾遍好方便的函式
註:感謝 iGene 大大協助 lazy Noob 撰文 XD