C語言探索之旅 | 第一部分第七課:迴圈語句
-- 簡書作者 謝恩銘 轉載請註明出處
第一部分第七課:迴圈語句
上一課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語言小遊戲吧!
相關文章
- C語言goto語句以及用goto語句構成迴圈C語言Go
- C#教程第四課:迴圈控制語句C#
- C#程式設計基礎第七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用C#程式設計While
- Java語言程式設計—迴圈語句Java程式設計
- c語言中,while(1)語句使用break語句跳出迴圈C語言While
- c語言基礎語法二——迴圈控制條件語句(完節)C語言
- Matlab的if語句switch語句for迴圈while迴圈語句練習MatlabWhile
- Vue.js第五課 迴圈語句Vue.js
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-基本迴圈(EXIT語句)SQL
- JavaScript 流程控制語句詳解:if語句、switch語句、while迴圈、for迴圈等JavaScriptWhile
- TypeScript 迴圈語句TypeScript
- JavaScript for 迴圈語句JavaScript
- MySQL迴圈語句MySql
- Oracle迴圈語句Oracle
- [C語言] 第一章|C語言入門第一課C語言
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-FOR迴圈SQL
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- c語言中的三種迴圈語句結構C語言
- Web 探索之旅 | 第二部分第一課:客戶端語言Web客戶端
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-FOR迴圈-FOR迴圈中的索引SQL索引
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-WHILE迴圈SQLWhile
- JavaScript跳出for迴圈語句JavaScript
- java 迴圈語句(轉)Java
- C++之for迴圈、範圍for語句探究C++
- C語言探索之旅 | 第二部分第八課:動態分配C語言
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-FOR迴圈-下限和上限SQL
- Python-條件語句和迴圈語句Python
- Object-C,迴圈語句for,while,do-whileObjectWhile
- Python的迴圈語句Python
- 流程控制、 迴圈語句
- swift控制流——迴圈語句Swift
- 6、迴圈結構語句
- linux 迴圈控制語句Linux
- PL/SQL迴圈控制語句SQL
- 《快學 Go 語言》第 3 課 —— 分支與迴圈Go
- Java基礎 迴圈語句 for while do.....while語句JavaWhile
- Java 可以採用什麼語句跳出迴圈語句Java
- C語言實驗——for迴圈列印圖形(迴圈結構)(sdut oj)C語言