-- 簡書作者 謝恩銘 轉載請註明出處
第一部分第七課:循環語句
上一課C語言探索之旅 | 第一部分第六課:條件表達式結束後,今天我們來學習《循環語句》。
下一課我們就來一起編寫第一個C語言的小程序啦,激動不?那就快點把今天這課學完吧!
循環是什麼呢?
簡單地說:循環使你能夠重複執行同樣的指令
放輕鬆,這一課的內容比較簡單,不像之前的【變量】和【條件表達式】那麼難以消化,所以好好享受這一課,因爲第二部分要開始難起來咯!
循環是什麼
循環是一種結構,使指令可以被執行多次
與 條件語句/條件表達式 類似,循環語句也有幾種形式。但是至終,目的仍然是一樣的:多次執行同樣的指令。
我們一起來看看C語言中常用的三種循環:
-
while循環
-
do...while循環
-
for循環
這三種循環的基本原理都是一樣的,如下圖所示:
上圖中,依次進行的是:
-
電腦從上到下執行各條指令,像往常一樣
-
執行完最後一條命令,重新回到第一條命令,從上往下開始執行
-
如此周而復始
上圖中存在的問題是:如果我們不停止循環,那麼電腦是有能力一直執行下去的(我一路向北 離開有你的季節 方向盤周圍 迴轉着我的後悔...)。
是的,我們的電腦兄不像有些人,它是從來不抱怨的,叫它幹什麼就幹什麼,這也是我們喜歡它的原因。
永不停止的循環有一個術語叫“死循環”,陷入死循環的電腦很容易卡機,這也是程序員經常抱怨的問題之一。
怎麼能夠讓循環停下來呢?
聰明的讀者已經想到了:條件表達式
對了,上一課我們學了條件表達式,現在到它派用場的時候了。
事實上,我們創建循環語句的時候,總會給它一個條件,這個條件指明: 在條件爲真時,才繼續執行循環,否則停止。
下面我們就來看看第一種循環: while循環
while循環
while循環的結構是這樣的:
while (/* 條件 */)
{
// 重複執行的指令
}
不難理解吧,while在英語中是“當...時”,即是說:
當括號裏的“條件”爲真時,執行大括號裏的指令,一旦條件變爲假,不執行指令,while循環結束。
用一個小程序來看一下吧,這個程序中,我們要讓用戶輸入數字27,只有當用戶輸入的是27時,程序纔會停止,否則會一直讓用戶輸入數字(我懂的,我懂的,我很任性):
#include <stdio.h>
int main(int agrc, char *argv[]) {
int number = 0;
while (number != 27) {
printf("請輸入 27 ! ");
scanf("%d", &number);
}
return 0;
}
運行程序,會如下顯示:
請輸入 27 ! 10
請輸入 27 ! 17
請輸入 27 ! 30
請輸入 27 ! 27
接下來,我們用while循環來做一點更有意思的事情:讓循環執行一定次數
int counter = 0;
while (counter< 10) {
printf("你好 !\n");
counter++;
}
它會顯示10次“你好!”,如下:
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
邏輯到底是怎麼樣的呢?
-
counter初始值爲0
-
我們的while循環的循環條件是 counter < 10,也就是說,只有在counter變量的值小於10的時候,纔會執行循環體(大括號裏)的指令: 打印“你好!”
-
因爲初始counter是0,循環條件爲真,所以執行printf,顯示“你好!”
-
在循環體中,我們將counter的值加1
-
第二次判斷條件的時候,counter的值已經是1了,但還是滿足counter < 10這個條件,因此再次顯示“你好!”
-
如此這般,一直到counter的值變爲10,不滿足counter < 10這個條件了,while循環才結束,所以一共打印了十個“你好!”
爲了加深理解,我們再來寫一個小程序,這次我們讓while循環每次輸出變量的值:
int counter= 0;
while (counter< 10) {
printf("變量的值是 %d\n", counter);
counter++;
}
執行程序,顯示如下:
變量的值是 0
變量的值是 1
變量的值是 2
變量的值是 3
變量的值是 4
變量的值是 5
變量的值是 6
變量的值是 7
變量的值是 8
變量的值是 9
這下是否理解得更透徹了?
do...while循環
這種類型和while循環非常類似,不過比較少用到。
與while循環唯一的不同點就是循環條件的位置,while循環中循環條件是在一開始,而do...while循環中是在最後:
int counter = 0;
do {
printf("你好 !\n");
counter++;
} while (counter < 10);
這樣的不同改變了什麼呢?
-
很簡單,while循環可能會一次也不執行循環體(大括號裏)的指令,假如條件一開始就不滿足。
-
而do...while循環是先執行循環體的指令,再做條件判斷,所以do...while的指令至少會被執行一次
如果我們將do...while循環中的變量counter初始化爲40,那麼do...while會顯示一次“你好!”,對於while循環,如果counter初始爲40,那麼一次也不會顯示“你好!”
for循環
理論上,for循環可以實現我們想要的任何類型循環。
之前已經說過,for循環就是另一種形式而已。
之前while循環的例子:
int counter = 0;
while (counter < 10) {
printf("你好 !\n");
counter++;
}
以上的代碼,我麼可以寫一個for循環的版本,它們做的是同樣的事情:
int counter;
for (counter = 0 ; counter < 10 ; counter++) {
printf("你好 !\n");
}
這兩個循環都會顯示十次“你好!”
for循環和while循環有什麼區別呢?
-
for循環的例子中,counter變量並沒有在聲明的時候初始化
-
在for後面的括號中,有更多的東西(下面我們會詳述)
-
在循環體(大括號裏的內容)中,沒有counter++這個指令
我們最感興趣的是for後面的括號中的內容,因爲那也是for循環吸引人的地方
可以看到括號中有三條指令,用分號(;)分隔:
-
第一條指令用於初始化:在我們的情況,我們將counter的值初始化爲0
-
第二條指令用於規定條件:和while循環一樣,這個條件用於判斷循環是否繼續執行,當這個條件爲真時,for循環纔會繼續
-
第三條指令用於做自增:這條指令是在循環體中的指令執行完後才執行的,用於更新變量的值;大多數情況下我們是做自增,當然我們也可以做自減(counter--)或者減少任意值(counter-=2) (關於自增和自減,請回去看之前的運算符那一課)
因此,for循環的邏輯是這樣的:
-
括號裏的第一句指令用於初始化變量,只會執行一次,之後不再執行
-
對括號裏的第二句指令做判斷,如果條件爲真,則執行循環體(大括號裏)的指令,如果爲假,則不執行循環體,for循環結束
-
執行完循環體裏的指令,接着執行括號裏的第三句指令,用於更新變量的值
-
再次對括號裏的第二句指令做判斷,如果條件爲真,則執行循環體(大括號裏)的指令,如果爲假,則不執行循環體,for循環結束
-
如此周而復始,注意,括號裏的第一句指令只會執行一次,之後就用不上了
簡單說來,for循環濃縮了很多內容在for後面的括號裏。
一定要熟練掌握for循環,因爲會很常用
總結
-
循環能夠使我們的程序重複執行一系列指令。
-
有好幾種循環:while,do...while,for 。依場景不同,選擇某個循環會更適合。
-
for循環可能是使用最頻繁的循環語句了,在裏面我們經常會做變量的增減。
第一部分第八課預告
今天的課就到這裏,一起加油咯。
下一次我們學習第八課,來編寫我們的第一個C語言小遊戲吧!