做者 謝恩銘,公衆號「程序員聯盟」。 轉載請註明出處。 原文:www.jianshu.com/p/9193259c0…git
《C語言探索之旅》全系列程序員
上一課是 C語言探索之旅 | 第一部分第八課:條件表達式 。github
下一課咱們就要一塊兒編寫第一個 C語言的小程序啦,激動嗎?那就快點把今天這課學完吧。小程序
循環,是什麼呢?bash
簡單地說:循環使你可以重複執行一樣的指令。學習
放輕鬆,這一課的內容相對比較簡單,不像以前的【變量】和【條件表達式】那麼難以消化,因此好好享受這一課吧。由於第二部分就要開始難起來咯!ui
循環是一種結構,使指令能夠被執行屢次。spa
與 條件語句/條件表達式 相似,循環語句也有幾種形式。可是至終,目的仍然是同樣的:屢次執行一樣的指令。3d
咱們一塊兒來看看 C語言中經常使用的三種循環:code
這三種循環的基本原理都是同樣的,以下圖所示:
上圖中,依次進行的是:
上圖中存在的問題是:若是咱們不中止循環,那麼電腦是有能力一直執行下去的(「我一路向北,離開有你的季節,方向盤周圍,迴轉着個人後悔」 -- 歌詞來自周杰倫的歌曲《一路向北》)。
是的,咱們的電腦兄不像有些人,它是歷來不抱怨的,叫它幹什麼就幹什麼,這也是咱們喜歡它的緣由。
永不中止的循環有一個術語叫「死循環」,陷入死循環的電腦很容易卡機,這也是程序員常常抱怨的問題之一。
怎麼可以讓循環停下來呢?
聰明的讀者已經想到了:條件表達式 。
對了,上一課咱們學了條件表達式,如今到它派用場的時候了。
事實上,咱們建立循環語句的時候,總會給它一個條件,這個條件指明:在條件爲真時,才繼續執行循環,不然中止。
下面咱們就來看看第一種循環: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 循環中循環條件是在一開始,而 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語言探索之旅 | 第一部分第十課:第一個C語言小遊戲
下一課咱們將編寫第一個 C語言小遊戲!
我是 謝恩銘,公衆號「程序員聯盟」運營者,慕課網精英講師 Oscar 老師,終生學習者。 熱愛生活,喜歡游泳,略懂烹飪。 人生格言:「向着標杆直跑」