【C++ 筆記】迴圈(loop) - part 6 === 目錄(Table of Contents): [TOC] --- 很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 三大迴圈式 --- ### while 迴圈 --- while 迴圈語法: ```cpp= while(condition) { statement(s); } ``` while 迴圈可以帶有條件,條件成立(True)時才會執行 `statement(s);` 的區塊。 True 時,一直執行直到 False 停止,跳出 while 迴圈。 ![image](https://hackmd.io/_uploads/rJfmINnwC.png) Image Source:[While迴圈 - 維基百科,自由的百科全書](https://zh.wikipedia.org/wiki/While%E8%BF%B4%E5%9C%88) 以下是一個簡單範例: ```cpp= #include <iostream> using namespace std; int main() { int number, sum = 0, i = 1; cout << "請輸入一個正整數:"; cin >> number; // 使用 while 迴圈計算總和 while (i <= number) { sum += i; i++; } cout << "從 1 加到 " << number << " 的總和是: " << sum << endl; return 0; } ``` ### for 迴圈 --- for 迴圈語法: ```cpp= for ( init; condition; increment ) { statement(s); } ``` 如同大多數程式語言一樣,for 迴圈就是做類似等差數列的遞增遞減。 在 C++ 中,init 被認定為設定初始值,通常設定為 i, j, k ....,以 i 為例,init 處會設定成 i = 0。 condition:與 while 迴圈一樣,條件必須是 True 才能執行迴圈,直到條件 False 為止。 increment:針對初始值 init 所需設定的增加量,比如說 i++、i*2 等等,這會在每一次迴圈執行完後,再次執行此語法。 ![image](https://hackmd.io/_uploads/rkFCcYdQJx.png) Image Source:[For loop - Wikipedia](https://en.wikipedia.org/wiki/For_loop) 最重要的就是練習!以下是一些練習範例: ```cpp= #include <iostream> using namespace std; int main() { int number; cout << "請輸入一個正整數:"; cin >> number; // 使用 for 迴圈列印九九乘法表 cout << "數字 " << number << " 的乘法表:" << endl; for (int i = 1; i <= 9; i++) { cout << number << " x " << i << " = " << (number * i) << endl; } return 0; } ``` 註:init 不一定是要設定全新的變數,也可設定外部變數,如下: ```cpp= #include <iostream> using namespace std; int main() { int number, i; cout << "請輸入一個正整數:"; cin >> number; // 使用 for 迴圈列印九九乘法表 cout << "數字 " << number << " 的乘法表:" << endl; for (i = 1; i <= 9; i++) { cout << number << " x " << i << " = " << (number * i) << endl; } return 0; } ``` 再來一題! ```cpp= #include <iostream> using namespace std; int main () { for( int a = 10; a < 20; a = a + 1 ) { cout << "a 的值:" << a << endl; } return 0; } ``` Source:https://www.runoob.com/cplusplus/cpp-for-loop.html ### 補充:三個運算式可省略 for 迴圈當中的 init、condition、increment 是可以省略的,但唯一要注意不能省略分號。 ***不能省略分號!*** ***不能省略分號!*** ***不能省略分號!*** 很重要所以說三次。 例: ```cpp= #include <iostream> using namespace std; int main() { int sum, i; for(i=1; i<=100; i++) { sum += i; } cout << sum; return 0; } ``` 可以寫成: ```cpp= #include <iostream> using namespace std; int main() { int sum, i=1; for(;i<=100;) { sum += i; i++; // 須注意, 拿掉 increment 後要自己加上去 } cout << sum; return 0; } ``` 而 for 迴圈的第二個運算式也是可以拿掉的,如下: ```cpp= #include <iostream> using namespace std; int main() { for (;;){ cout << 1; } return 0; } ``` 這樣子你就得到了無限循環的 1111111 ......。 如果自己沒有填寫的話,C++ 預設運算式 2(condition)為 1,也就是永遠為 True,形成一個無限迴圈。 ### do...while --- do...while 語法: ```cpp= do { statement(s); }while( condition ); ``` do...while 就是**先做後判斷**,必須先執行內部程式碼,再來進行迴圈判斷,本質上與 while 是相同的,但仍有些許差異。 生活上的應用有許多是用到 do...while的,例如:自動販賣機必須先投錢,再檢查錢幣面額;密碼輸入時,也必須要由用戶先輸入,再從後端檢查密碼是否相符等等。 ![image](https://hackmd.io/_uploads/B18Il9dXJg.png) Image Source:[Do while loop - Wikipedia](https://en.wikipedia.org/wiki/Do_while_loop) 以下是一個簡單範例: ```cpp= #include <iostream> using namespace std; int main() { int number, sum = 0; // 使用 do...while 迴圈進行輸入和累加 do { cout << "請輸入一個數字(輸入 0 結束):"; cin >> number; sum += number; } while (number != 0); cout << "所有輸入數字的總和是:" << sum << endl; return 0; } ``` 二大迴圈控制式 --- ### break --- 用途: 1. 中斷迴圈執行,直接跳出迴圈,無論迴圈條件是否已達到 True。 2. 中斷 switch 語句中的 case。 以下是一範例: ```cpp= #include <iostream> using namespace std; int main() { int number; for (int i = 1; i <= 5; i++) { cout << "請輸入一個正整數(輸入負數結束):"; cin >> number; // 如果輸入的是負數, 跳出迴圈 if (number < 0) { cout << "輸入了負數,程式提前結束" << endl; break; } cout << "第 " << i << " 次輸入的數字是:" << number << endl; } cout << "程式執行完畢" << endl; return 0; } ``` ### continue --- 與 break 相似但不同,continue 是中斷目前執行的迴圈,直接進行下一次的迴圈,並不會直接跳出迴圈哦。 以下是一範例: ```cpp= #include <iostream> using namespace std; int main() { int number; cout << "請輸入一個正整數範圍(輸出範圍內的奇數):"; cin >> number; cout << "範圍內的奇數為:" << endl; for (int i = 1; i <= number; i++) { if (i % 2 == 0) { continue; // 如果數字是偶數, 跳過本次迴圈 } cout << i << " "; // 僅列印奇數 } cout << endl << "程式執行完畢" << endl; return 0; } ``` 總結 --- 本文主要介紹 C++ 中的三種迴圈結構:while 迴圈、for 迴圈、do...while 迴圈。 ### 三大迴圈式 --- #### while 迴圈 語法:`while(condition) { statement(s); }` 當 condition 為 1,也就是 True 時才會執行 statement(s),持續執行直到 condition = 0 為止,也就是 False。 範例:計算從 1 到輸入正整數的總和。 #### for 迴圈 語法:`for (init; condition; increment) { statement(s); }` init 設定初始值,可視為等差數列的首項 a1;condition 即為迴圈執行的條件,同 while 解釋;increment 設定欲在每次迴圈時增加的值,可視為等差數列的公差 d。 範例:列印九九乘法表,並可省略初始值、條件或增量,但必須保留分號。 #### do...while 迴圈 語法:`do { statement(s); } while(condition);` :::success 注意這個結構要在最後面加上分號。 ::: 先執行一次內部程式碼,再檢查條件,確保至少執行一次。其餘同 while。 示例:用於累加輸入的數字,直到輸入零為止。 ### 二大迴圈控制式 --- #### break 用於中斷迴圈的執行,無論條件是否達成。 範例:當用戶輸入負數時,提前結束輸入迴圈。 #### continue 用於跳過當前迴圈的剩餘部分,直接進入下一次迴圈。 示例:在範圍內輸出奇數,偶數則跳過。 參考資料 --- [C++ While Loop - GeeksforGeeks](https://www.geeksforgeeks.org/cpp-while-loop/) [C++ Loops - GeeksforGeeks](https://www.geeksforgeeks.org/cpp-loops/) [C++ For Loop](https://www.w3schools.com/cpp/cpp_for_loop.asp) [C++ 循环 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-loops.html) [C++ continue 语句 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-continue-statement.html) [C++ break 语句 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-break-statement.html) [C++ do…while 循环 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-do-while-loop.html) [C++ while 循环 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-while-loop.html) [C++ for 循环 | 菜鸟教程](https://www.runoob.com/cplusplus/cpp-for-loop.html)