# 【知識精講】使用循環結構
## Part1
在之前的課程中,我們已經向大家介紹了常規的順序結構,以及條件判斷結構——現在,我們要向大家介紹一種新的結構:循環結構。
什么是循環結構呢——簡單地說,有些時候我們可以一遍又一遍地執行相同的語句。比如說,如果我們需要求一個數列的和,1+2+31+2+31+2+3一直加到nnn,這個時候我們該怎么計算呢?有的同學就說了,這個很好辦啊——直接用算術級數求和公式就可以了。沒錯,在數學中,我們有很多的求數列前nnn項和的公式,用這樣的公式就可以計算出前n項和。
## Part2
不過有的時候,一個數列的每一項之間都有規律可循,但是并沒有總的求和公式(或者很難推導出求和公式)——這樣的情況也是存在的。而且,使用計算機解題的時候,我們的思路就應該開闊一些——我們不一定要推導出求和公式,而是可以化繁為簡,直接讓計算機手動進行一次一次的加法運算就可以了。
這個時候,就需要應用到我們接下來要學的循環結構了——執行重復性很高的工作,對于我們人來說顯然是低效而痛苦的,但是對于計算機來說就完全不存在這個問題了。計算機的運算速度很快,哪怕是幾千次甚至上萬次循環,它也可以在極短的時間內完成。
## Part3
簡而言之,對于計算機來說,進行用相同算法反復處理不同數據的運算,是非常合適的——計算機先天就適合做這種“苦力”的工作。而要讓計算機做這件工作,我們需要用到的,就是我們接下來要介紹的循環結構。
首先讓我們來認識一下第一種循環:`do...while`循環——它的常見形式如下:
~~~
do {
[代碼塊]
} while(a);
~~~
跟之前學過的`switch`一樣,這里的`a`也表示一個表達式——整個循環的流程是這樣的:程序**首先執行一次**`do`后面大括號中的代碼塊(也叫做**循環體**),當代碼塊中的所有代碼都執行完一遍之后,程序執行到`while`部分,然后會判斷目前是否滿足表達式`a`成立的條件。
如果表達式`a`的運算結果為`true`的話,就會回到循環體的開頭,進入下一輪循環,周而復始;而如果`a`的結果為`false`的話,循環就會終止,程序會繼續執行循環后面的代碼。
## Part4
除了`do...while`循環之外,我們還有另一種與之類似的循環結構:`while`循環。它的常見形式如下:
~~~
while (a) {
[代碼塊]
}
~~~
從結構上看,`while`循環跟`do...while`循環非常相似,其執行的流程也跟`do...while`循環差不多——區別在于,`do...while`循環是先執行一遍循環體,再來判斷表達式`a`的值是否為真,而`while`循環則是首先進行條件判斷,然后再執行循環體。也就是說,對于`do...while`循環,**程序會保證至少執行一次循環體**,而`while`循環則**有可能不進入循環,完全不執行循環體**。
在實際應用中,我們可以根據程序和算法的需要,靈活選擇使用哪一種循環。此外,我們還要注意,不管對于哪種循環,都應該確保循環體中含有改變循環條件表達式`a`的語句——如果表達式`a`的值始終為真的話,那么程序就會永遠陷在循環體中,也就是所謂的**死循環**。
- 教材介紹
- 《編程初學入門常識》
- 什么是程序語言
- 【知識精講】編程與編程語言
- 【選擇測試】編程語言分類
- 【知識精講】高級語言分類
- 【選擇測試】編譯與解釋
- 【選擇測試】程序員笑話-Java
- 熟悉鍵盤上用于編程的鍵位
- 【知識精講】認識你的鍵盤
- 【知識精講】中文和英文字符
- 【匹配測試】識別中英文符號
- 【選擇測試】中英文符號的影響
- 【伴隨編程】不要使用中文引號
- 【伴隨編程】不要使用中文分號
- 【伴隨編程】正確地輸入符號
- 【選擇測試】找出程序中的錯誤
- 初始工程師思維
- 【知識精講】二進制思想
- 【選擇測試】程序員笑話-湊整
- 【知識精講】閉合的邏輯
- 【選擇測試】程序員笑話-條件
- 程序員職業與生活
- 【知識精講】程序員的發展方向
- 【知識精講】程序員的裝備
- 【知識精講】程序員的健康
- 【選擇測試】做一名健康的程序員
- 《C++程序設計》
- 前言
- 【知識精講】編程與計算機科學
- 【知識精講】編程與軟件工程
- 【知識精講】如何學習編程
- 你好C++
- 【知識精講】你好,C++
- 【知識精講】C++程序是如何開發的
- 【知識精講】成為一名Power User
- 【伴隨編程】讓我們一起說你好
- 【知識精講】你的第一個C++語言程序
- 【伴隨命令】編譯、運行你的程序
- 【伴隨編程】將變量流式輸出
- 【選擇測試】變量的作用域
- 【知識精講】變量與數據類型
- 【匹配測試】C++語言的入門概念
- 【知識精講】在程序中學會換行
- 【選擇測試】正確地換行
- 簡單數學運算
- 【知識精講】重新認識基本運算
- 【選擇測試】運算符的理解
- 【伴隨編程】做一下簡單的運算
- 【伴隨編程】a 的 n 次方
- 【知識精講】數學函數
- 【伴隨編程】讓C++語言變成計算器
- 【伴隨編程】計算球的體積
- 【匹配測試】數學世界知多少
- 【知識精講】在程序中添加注釋
- 【選擇測試】正確地寫注釋
- 從伴隨輸入到變量地址
- 【伴隨編程】 一個數字復讀機器
- 【選擇測試】理解標準輸入輸出
- 【伴隨編程】一個加法計算器
- 【程序設計】A+B+C問題
- 【伴隨編程】簡單的I/O格式控制
- 【知識精講】地址與取地址符
- 【伴隨編程】看看我們的地址
- 習題一:面積與周長
- 【程序設計】矩形面積與周長
- 【程序設計】三角形面積與周長
- 【程序設計】圓形面積與周長
- 程序中的是與非
- 【知識精講】是非的表示與關系運算
- 【伴隨編程】驗一驗關系運算式
- 【選擇測試】關系運算式求值
- 【知識精講】如果的意義
- 【伴隨編程】分段函數求值
- 【知識精講】如果之后的如果
- 【伴隨編程】五則運算器
- 【選擇測試】分支的嵌套
- 【伴隨編程】問號表達式
- 【知識精講】是非之間的邏輯組合
- 【伴隨編程】判斷閏年
- 【程序設計】日期合法性
- 【知識精講】多路順序結構
- 【知識精講】在程序中學會縮進
- 【選擇測試】正確的縮進
- C++程序中的苦力
- 【知識精講】使用循環結構
- 【選擇測試】對比兩種循環
- 【伴隨編程】使用while循環
- 【填空測試】理解循環結構
- 【知識精講】自減和自增運算符
- 【伴隨編程】使用自增運算符
- 【知識精講】for循環
- 【選擇測試】for循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》