# 【知識精講】for循環
## Part1
除了`while`循環之外,在 C++ 語言編程中,還有一種極為常見的循環——`for`循環。`for`循環的功能非常強大,它的使用條件靈活,完整地包含了`while`循環所具有的所有功能,并且還具有賦初值、循環變量自增等一系列功能。此外,在很多情況下,`for`循環層次清晰,擁有更好的可讀性。
## Part2
跟`while`循環相比,`for`循環的結構稍顯復雜,其語法形式如下:
~~~
for (初始語句;表達式1;表達式2) {
循環體
}
~~~
看起來有點復雜?其實這很好理解。`for`循環的執行流程是:首先執行一次初始語句,然后對表達式1 的值進行計算,并根據表達式1 的計算結果決定是否執行循環——如果表達式1 的值為`true`那就進入循環體開始執行。
當循環體執行完一次之后,計算表達式2 的值,然后再回到表達式1 并判斷是否繼續執行循環體;而如果表達式1 的計算結果為`false`的話,那就會退出循環。
## Part3
這樣用語言描述的話,大家看起來可能會有點暈——所以我們直接來看代碼吧!舉個簡單的例子,如果我們想要在屏幕上依次輸出 111 到 100100100 的話,那么借助`for`循環,我們便可以使用這樣一段代碼來實現這個功能:
~~~
for (int i = 0; i < 100; i++) {
cout << i+1 <<endl;
}
~~~
對照之前介紹過的流程,我們可以分析一下`for`循環執行的過程:首先我們可以看到,`for`循環初始化了一個計數器變量`i`,并且賦給它初值 000,然后執行循環體,也就是`cout`輸出語句。每執行完一次循環體之后,再執行一次`i++;`操作,對`i`進行自增。
`i`的值從 000 一直加到 999999 ,正好執行了 100100100 次——這里需要特別注意的是,對于從 000 開始計數的`i`,如果你希望循環執行`n`次的話,條件判斷的形式就應該寫成`i<n;`;而如果`i`是從 111 開始計數的話,那么條件判斷就要寫成`i<=n;`了。作為初學者,大家務必要注意這一點。
## Part4
除此之外,有幾個要點還要特別強調,請大家務必注意:
* `for`循環中的初始語句,表達式1 和表達式2 都不是必須的——我們可以省略它們,但**分號不能省略**。如果將這三者全部省略的話,形式如下所示:`for(;;)`相當于`while(true)`——如果在循環體中沒有可以跳出循環的語句的話(后面的章節會介紹),那么整個循環將進入死循環。
如果你在自己的電腦上寫程序不小心進入了死循環的話,那么你可以按`Ctrl+C`來強行終止程序。在實際編程中,你應該小心地避免程序陷入死循環。
## Part5
* `for`循環帶有初始語句——從上面的例子中我們可以看到,我們在初始語句中使用`int i=0;`對計數變量`i`進行了聲明。這種寫法定義的變量只在循環內部有效,用途專一而明確,可以有效增強程序的可讀性而不出錯,建議大家盡量都這么寫,養成良好的編程習慣。
此外,初始語句中可以定義多個變量,例如`int i=0,j=0;`,或者使用逗號連接多個表達式,例如`i=0,j=100;`
## Part6
如果循環體只有一句代碼的話,那么大括號可以省略——如下所示:
~~~
for (int i = 0; i < 100; i++) cout << i+1 << endl;
~~~
但是這么做容易破壞代碼的可讀性,所以不推薦大家使用這種寫法。
## Part7
任意兩個循環結構,或者是循環結構與選擇結構之間,都可以自由地嵌套使用。比如說,我們可以將兩個`for`循環嵌套,如下所示:
~~~
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 12; j++) {
循環體
}
}
~~~
對于這個循環來說,內層循環執行 121212 次,外層循環執行 101010 次,這樣算下來整個循環體一共執行了 12?10\=12012\*10=12012?10\=120 次
- 教材介紹
- 《編程初學入門常識》
- 什么是程序語言
- 【知識精講】編程與編程語言
- 【選擇測試】編程語言分類
- 【知識精講】高級語言分類
- 【選擇測試】編譯與解釋
- 【選擇測試】程序員笑話-Java
- 熟悉鍵盤上用于編程的鍵位
- 【知識精講】認識你的鍵盤
- 【知識精講】中文和英文字符
- 【匹配測試】識別中英文符號
- 【選擇測試】中英文符號的影響
- 【伴隨編程】不要使用中文引號
- 【伴隨編程】不要使用中文分號
- 【伴隨編程】正確地輸入符號
- 【選擇測試】找出程序中的錯誤
- 初始工程師思維
- 【知識精講】二進制思想
- 【選擇測試】程序員笑話-湊整
- 【知識精講】閉合的邏輯
- 【選擇測試】程序員笑話-條件
- 程序員職業與生活
- 【知識精講】程序員的發展方向
- 【知識精講】程序員的裝備
- 【知識精講】程序員的健康
- 【選擇測試】做一名健康的程序員
- 《C++程序設計》
- 前言
- 【知識精講】編程與計算機科學
- 【知識精講】編程與軟件工程
- 【知識精講】如何學習編程
- 你好C++
- 【知識精講】你好,C++
- 【知識精講】C++程序是如何開發的
- 【知識精講】成為一名Power User
- 【伴隨編程】讓我們一起說你好
- 【知識精講】你的第一個C++語言程序
- 【伴隨命令】編譯、運行你的程序
- 【伴隨編程】將變量流式輸出
- 【選擇測試】變量的作用域
- 【知識精講】變量與數據類型
- 【匹配測試】C++語言的入門概念
- 【知識精講】在程序中學會換行
- 【選擇測試】正確地換行
- 簡單數學運算
- 【知識精講】重新認識基本運算
- 【選擇測試】運算符的理解
- 【伴隨編程】做一下簡單的運算
- 【伴隨編程】a 的 n 次方
- 【知識精講】數學函數
- 【伴隨編程】讓C++語言變成計算器
- 【伴隨編程】計算球的體積
- 【匹配測試】數學世界知多少
- 【知識精講】在程序中添加注釋
- 【選擇測試】正確地寫注釋
- 從伴隨輸入到變量地址
- 【伴隨編程】 一個數字復讀機器
- 【選擇測試】理解標準輸入輸出
- 【伴隨編程】一個加法計算器
- 【程序設計】A+B+C問題
- 【伴隨編程】簡單的I/O格式控制
- 【知識精講】地址與取地址符
- 【伴隨編程】看看我們的地址
- 習題一:面積與周長
- 【程序設計】矩形面積與周長
- 【程序設計】三角形面積與周長
- 【程序設計】圓形面積與周長
- 程序中的是與非
- 【知識精講】是非的表示與關系運算
- 【伴隨編程】驗一驗關系運算式
- 【選擇測試】關系運算式求值
- 【知識精講】如果的意義
- 【伴隨編程】分段函數求值
- 【知識精講】如果之后的如果
- 【伴隨編程】五則運算器
- 【選擇測試】分支的嵌套
- 【伴隨編程】問號表達式
- 【知識精講】是非之間的邏輯組合
- 【伴隨編程】判斷閏年
- 【程序設計】日期合法性
- 【知識精講】多路順序結構
- 【知識精講】在程序中學會縮進
- 【選擇測試】正確的縮進
- C++程序中的苦力
- 【知識精講】使用循環結構
- 【選擇測試】對比兩種循環
- 【伴隨編程】使用while循環
- 【填空測試】理解循環結構
- 【知識精講】自減和自增運算符
- 【伴隨編程】使用自增運算符
- 【知識精講】for循環
- 【選擇測試】for循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》