Noob's Space

我要學會 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<=5;i++){
		for(j=1;j<=i;j++){
			printf("*");
		}
		printf("\n");
	}
	return 0;
}

輸出結果會是:

*
**
***
****
*****

原則上,使用 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 語言 目錄

註:感謝 iGene 大大協助 lazy Noob 撰文 XD

你可能會有興趣......?

廣告