C語言探索之旅 | 第一部分第七課:循環語句

1240

-- 簡書作者 謝恩銘 轉載請註明出處

第一部分第七課:循環語句


上一課C語言探索之旅 | 第一部分第六課:條件表達式結束後,今天我們來學習《循環語句》。

下一課我們就來一起編寫第一個C語言的小程序啦,激動不?那就快點把今天這課學完吧!

循環是什麼呢?

簡單地說:循環使你能夠重複執行同樣的指令

放輕鬆,這一課的內容比較簡單,不像之前的【變量】和【條件表達式】那麼難以消化,所以好好享受這一課,因爲第二部分要開始難起來咯!

循環是什麼


循環是一種結構,使指令可以被執行多次

與 條件語句/條件表達式 類似,循環語句也有幾種形式。但是至終,目的仍然是一樣的:多次執行同樣的指令。

我們一起來看看C語言中常用的三種循環:

  • while循環

  • do...while循環

  • for循環

這三種循環的基本原理都是一樣的,如下圖所示:

1240

上圖中,依次進行的是:

  1. 電腦從上到下執行各條指令,像往常一樣

  2. 執行完最後一條命令,重新回到第一條命令,從上往下開始執行

  3. 如此周而復始

上圖中存在的問題是:如果我們不停止循環,那麼電腦是有能力一直執行下去的(我一路向北 離開有你的季節 方向盤周圍 迴轉着我的後悔...)。

是的,我們的電腦兄不像有些人,它是從來不抱怨的,叫它幹什麼就幹什麼,這也是我們喜歡它的原因。

永不停止的循環有一個術語叫“死循環”,陷入死循環的電腦很容易卡機,這也是程序員經常抱怨的問題之一。

怎麼能夠讓循環停下來呢?

聰明的讀者已經想到了:條件表達式

對了,上一課我們學了條件表達式,現在到它派用場的時候了。

事實上,我們創建循環語句的時候,總會給它一個條件,這個條件指明: 在條件爲真時,才繼續執行循環,否則停止。

下面我們就來看看第一種循環: 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次“你好!”,如下:

你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!
你好!

邏輯到底是怎麼樣的呢?

  1. counter初始值爲0

  2. 我們的while循環的循環條件是 counter < 10,也就是說,只有在counter變量的值小於10的時候,纔會執行循環體(大括號裏)的指令: 打印“你好!”

  3. 因爲初始counter是0,循環條件爲真,所以執行printf,顯示“你好!”

  4. 在循環體中,我們將counter的值加1

  5. 第二次判斷條件的時候,counter的值已經是1了,但還是滿足counter < 10這個條件,因此再次顯示“你好!”

  6. 如此這般,一直到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循環的邏輯是這樣的:

  1. 括號裏的第一句指令用於初始化變量,只會執行一次,之後不再執行

  2. 對括號裏的第二句指令做判斷,如果條件爲真,則執行循環體(大括號裏)的指令,如果爲假,則不執行循環體,for循環結束

  3. 執行完循環體裏的指令,接着執行括號裏的第三句指令,用於更新變量的值

  4. 再次對括號裏的第二句指令做判斷,如果條件爲真,則執行循環體(大括號裏)的指令,如果爲假,則不執行循環體,for循環結束

  5. 如此周而復始,注意,括號裏的第一句指令只會執行一次,之後就用不上了

簡單說來,for循環濃縮了很多內容在for後面的括號裏。

一定要熟練掌握for循環,因爲會很常用

總結


  1. 循環能夠使我們的程序重複執行一系列指令。

  2. 有好幾種循環:while,do...while,for 。依場景不同,選擇某個循環會更適合。

  3. for循環可能是使用最頻繁的循環語句了,在裏面我們經常會做變量的增減。

第一部分第八課預告


今天的課就到這裏,一起加油咯。

下一次我們學習第八課,來編寫我們的第一個C語言小遊戲吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章