【C++ 筆記】迴圈(loop) - part 6
===
目錄(Table of Contents):
[TOC]
---
很感謝你點進來這篇文章。
你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧!
三大迴圈式
---
### while 迴圈
---
while 迴圈語法:
```cpp=
while(condition)
{
statement(s);
}
```
while 迴圈可以帶有條件,條件成立(True)時才會執行 `statement(s);` 的區塊。
True 時,一直執行直到 False 停止,跳出 while 迴圈。

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 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 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)