# 簡介 迴圈的目的是進行<font color="#EB6E41">大量的重複運算</font>,符合條件便會<font color="#EB6E41">執行其內容直至條件不符合</font>。 # for迴圈 ## 流程圖 <center> <img src="https://i.imgur.com/oFlGJ0z.png" width = "450px"/> </center> ## 語法 ```cpp= for(A初始運算式; B條件式; C控制運算式){ D迴圈內程式; } ``` ### A初始運算式 進入迴圈後第一個執行的程式,只會執行一次,在這可執行任何命令,通常是設定一個變數。 ::: warning 通常我們初始變數都是設定為`0`,原因是要配合後續`Array`的課程,除非是特殊的使用條件才會使用其他數字。(ex.九九乘法表) ::: ### B條件式 在執行完`A`或是`C`後都會進行的一次,<font color="#EB6E41">判斷判斷式不限制,只要可以回傳`true`或是`false`就好</font>,判斷為`true`就會繼續執行`D`,反之為`false`就結束迴圈,再進行迴圈後的程式碼,<font color="#EB6E41">通常是對`A`內設定的判斷操作。</font> ### C控制運算 每當運行完`D`就會執行,<font color="#EB6E41">通常是對`A`內設定的變數進行操作</font>。 ### D迴圈內運算式 每當`B`條件式為`true`時就會執行。 ## 運用 ```cpp= int n = 10,sum = 0; for(int i = 1; i <= n; i++){ sum += i; } cout << sum << '\n'; //輸出55也就是1加到10的和。 ``` :::info :::spoiler 上述程式的執行過程。 int n = 10, sum = 0; int i = 1; i <= n (現在i為1) --> sum += i (現在sum為1) --> i++ (現在i為2)。 i <= n (現在i為2) --> sum += i (現在sum為3) --> i++ (現在i為3)。 i <= n (現在i為3) --> sum += i (現在sum為6) --> i++ (現在i為4)。 i <= n (現在i為4) --> sum += i (現在sum為10) --> i++ (現在i為5)。 i <= n (現在i為5) --> sum += i (現在sum為15) --> i++ (現在i為6)。 i <= n (現在i為6) --> sum += i (現在sum為21) --> i++ (現在i為7)。 i <= n (現在i為7) --> sum += i (現在sum為28) --> i++ (現在i為8)。 i <= n (現在i為8) --> sum += i (現在sum為36) --> i++ (現在i為9)。 i <= n (現在i為9) --> sum += i (現在sum為45) --> i++ (現在i為10)。 i <= n (現在i為10) --> sum += i (現在sum為55) --> i++ (現在i為11)。 cout << sum = 55 ::: ## 特殊用法 ### 省略初始值 說是省略,其實是把初始值移出去。 ```cpp= int sum = 0; int i = 1 ; for(; i <= 13 ; i++) { sum += i; } ``` ### 省略判斷式 由於沒有判斷式,`sum` 會一直累加,此為無限迴圈。 ```cpp= int sum = 0; for(int i = 1 ; ; i++) { sum += i; } ``` ### 省略變化量 由於沒有變化量,`i` 的值不變,`i <= 13` 永遠成立,`sum` 會一直累加,此為無限迴圈。 ```cpp= int sum = 0; for(int i = 1 ; i <= 13 ; ) { sum += i; } ``` ### 省略全部 跟上述規則一樣,此為無限迴圈。 ```cpp= int sum = 0 ; for(;;){ sum ++ } ``` # while迴圈 ## 流程圖 <center> <img src="https://i.imgur.com/3XfCidV.png" width = "450px"/> </center> ## 語法 ```cpp= while(A條件式){ B迴圈內程式 } ``` ### A條件式 當條件式為`true`時,就會進入迴圈,反之為`false`時就會離開迴圈,再進行迴圈後的程式碼。判斷式也是不限制,只要可以回傳`true`或是`false`就好。 ### B迴圈內程式 當條件式為`true`後,進入迴圈,當迴圈內的程式執行完成後,就會再回到`A`條件式進行判斷。 ## 運用 ::: warning `while`和`for`概念是一樣的。 ```cpp= int i = 0; while(i < 10){ cout << i << '\n'; i++; } ``` ```cpp= for(int i = 0; i < 10 ; i++){ cout << i << '\n'; } ``` 這兩個意思是一樣的,但這種情況我們通常都用for。 ::: 有時可以看到題目寫本題<font color="#EB6E41">有t筆測資時,就可以用`while`</font>。 ```cpp= int t; cin >> t; while(t--){ //當t減到0時while就會結束。 //解題code } ``` 也有可能看到題目會寫<font color="#EB6E41">多筆輸入,這時也可以用`while`</font>。 ```cpp= while(cin >> n){ //當程式執行成功也會回傳true。 //解題code } ``` :::info :::spoiler 上述程式的執行過程。 int n = 10, sum = 0; int i = 1; i <= n; (現在i為1) --> sum += i; --> i++ (現在i為2)。 i <= n; (現在i為2) --> sum += i; --> i++ (現在i為3)。 i <= n; (現在i為3) --> sum += i; --> i++ (現在i為4)。 i <= n; (現在i為4) --> sum += i; --> i++ (現在i為5)。 i <= n; (現在i為5) --> sum += i; --> i++ (現在i為6)。 i <= n; (現在i為6) --> sum += i; --> i++ (現在i為7)。 i <= n; (現在i為7) --> sum += i; --> i++ (現在i為8)。 i <= n; (現在i為8) --> sum += i; --> i++ (現在i為9)。 i <= n; (現在i為9) --> sum += i; --> i++ (現在i為10)。 i <= n; (現在i為10) --> sum += i; --> i++ (現在i為11)。 cout << sum = 55 ::: # continue&break ## continue 當執行到此程式,就回到最上面的迴圈,不會執行接下來的迴圈內程式。 例如for就是回到`C`控制運算式,也就是我們平常寫`i++`的地方,而`while`就是回到`A`條件式。 ```cpp= #include<iostream> using namespace std; int main(){ for(int i = 1; i <= 10; i++){ if(i % 2 == 0){ continue; //如果判斷i是偶數,就回到i++,不執行cout。 } cout << i << '\n'; } } ``` ## break 當執行到此程式,就會離開迴圈直接執行迴圈後的下一行程式。 # 例題 ###### 有什麼題目沒提到或有新增的煩請留言告知。 [a011: 加減乘除](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a011) [a004: 經濟大恐荒](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a004) [a005: 獨角蟲進化計算器](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a005) [a025: 文文的求婚--續集 (n 行版)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a025) [a026: 文文的求婚--續集 (0 尾版)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a026) [a027: 文文的求婚--續集 (EOF 版)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a027) [a028: 文文的求婚--續集 (Case 版)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a028) [a030: 電腦教室](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a030) [a036: 我也愛偶數](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a036) [a037: 我也愛偶數 (swap 版)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a037) [a038: 我不說髒話](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a038) [a040: 文文的求婚 (三)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a040) [a059: pB 升職蛤蠣](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a059) [a128: 斗漏! 蒙斯塔卡都!](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a128) [a142: 肥宅快樂水...再...再一口](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a142) [a134: 判斷質數](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a134) [a163: 健康檢查前的檢查](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a163) [a175: 水仙花數](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a175) [a180: 複習複習複習考](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a180) [a191: Rex 看牙1](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a191) [a192: Rex 看牙2](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a192) [a193: Rex 看牙3](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a193) [a198: 可以出題啦!](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a198) [a200: 排列組合符號計算練習](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a200) [a207: 倒三角形](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a207) [a256: FAIRY WOOBANG](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a256) [a363: 同學,再借我一張衛生紙。](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a363) [a365: 客家主管](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a365) [a379: 端盤子](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a379) [a382: 安安採南瓜](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a382) [a396: Cerulean Crescent's Debut](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a396) [a503: 顯示1到N的連加過程及結果](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a503) [a540: Hello World!](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a540) [a542: Big Chocolate](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a542) [a558: 佛祖絕對不輸的宗教之戰 1](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a558) [a616: 平方和](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a616) [a692: H. 空間向量](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a692) [a839: 排球考試](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a839) [a844: 高歌離席](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a844) [a881: Only WAH purposely](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a881) [a906: BanG Dream ! It's MyGO!!!!!](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a906) [a918: 別再亂取變數了yuriyuriyuri(3)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a918) [b150: 六芒星](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=b150) [b151. 在程設班締造出美好的回憶 !(easy version)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=b151) [b152: 我要成為幾何大師 !](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=b152) [b159: 超躁的復旦工人!](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=b159) [b160: 趕作業](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=b160) [b170: Pote Liu 冒險外傳 (1)](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=b170) - [b173: 寶可夢賽跑](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=b173) ###### 都看到這了難道不按個愛心支持一下嗎?