---
# System prepended metadata

title: 第七次上課
tags: [C++講義]

---

# 迴圈
## 題目:

請輸出1~100的數字。
```cpp
#include <bits/stdc++.h> // 引入所有標準庫
using namespace std;     // 省略 std:: 的使用

int main() {
    cout <<"1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 57 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 75 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100"
    return 0;                        // 程序正常結束
}
```
不可能這樣打吧????? 

沒錯！這樣手動輸出 1 到 100 是不合理的，也不符合程式設計的靈活性。這就是為什麼程式語言中有「**迴圈**」的概念。

在 C++ 中，迴圈能夠讓我們簡潔地重複執行一段程式碼，而不需要手動輸出每一個數字。我們可以用 `for` 迴圈來完成這個工作。
## `for`迴圈的寫法
```cpp
for(int i=0;i<n;i++){
    //程式碼放這裡
}
```

在寫`for`迴圈時他**小括號**裡面的分為三個部分，用分號`;`隔開
```cpp
for(第一部分;第二部分;第三部分){要重複執行的程式}
```

| 部分     | 作用與說明                                               | 範例                           |
|----------|----------------------------------------------------------|--------------------------------|
| 第一部分。初始化   | 設定迴圈變數的初始值。這段程式碼只在**迴圈開始時**執行一次。 | `int i = 0;`                   |
| 第二部分。條件     | 每次迴圈執行前檢查的**條件**。若條件為 `true`，則執行迴圈；若為 `false`，則結束迴圈。 | `i <= 100;`                    |
| 第三部分。更新     | 每次執行完迴圈內容後，都會執行一次這邊的內容。通常是自增 (`i++`) 或自減 (`i--`) 操作。 | `i++`（每次迴圈後將 `i` 加 1） |


## 舉例
### 使用 `for` 迴圈來輸出 1 到 100 的數字

讓我們改寫程式碼，讓它更簡潔並且更有彈性：

```cpp
#include <iostream>
using namespace std;

int main() {
    for (int i = 1; i <= 100; i++) {
        cout << i << " ";
    }
    return 0;
}
```

### 程式碼說明：

1. **`for` 迴圈**：  
   - `int i = 1;`：將變數 `i` 初始化為 1。
   - `i <= 100;`：當 `i` 小於或等於 100 時，繼續執行迴圈。
   - `i++`：每次執行完迴圈內的程式碼後，將 `i` 增加 1。

2. **`cout << i << " ";`**：在每次迴圈中將目前的數字 `i` 輸出，並以空格分隔。

程式碼執行順序:

- 定義i=1
- 檢查i是否小於100(是)
- 執行cout << i << " ";
- 檢查i是否小於100(是) 
- 執行cout << i << " "; 
- i++(i等於本身值+1)
- 檢查i是否小於100(是) 
- 執行cout << i << " "; 
- i++(i等於本身值+1)
- 檢查i是否小於100(是) 
- 執行cout << i << " "; 
- i++(i等於本身值+1)
- 檢查i是否小於100(是) 
- 執行cout << i << " "; 
- i++(i等於本身值+1)
- 檢查i是否小於100(是) 
- 執行cout << i << " "; 
- i++(i等於本身值+1)
- 檢查i是否小於100(是) 
- 執行cout << i << " "; 
- i++(i等於本身值+1)

## `while` 迴圈
## 題目: 請輸出某數的大於1000的最小倍數

像是7大於1000最小的倍數是1001
5大於1000最小倍數是1005
11大於1000最小倍數是????
如果今天不是教迴圈，其實你可以這樣寫。
```cpp
#include <bits/stdc++.h> // 引入所有標準庫
using namespace std;     

int main() {
    int x; //定義x
    cin >> x; //毒入x
    cout << 1000+(x-1000%x);//輸出1000加上x減掉x除以1000的餘數
    return 0;                        
}
```
但我們今天是教迴圈不是教四則運算，所以你需要用`while`迴圈來解決這問題

`while`迴圈是指在**滿足條件**的情況下會**重複執行**包含在`{}`裡面的程式

### `while` 迴圈的寫法
`while` 迴圈的基本語法如下：

```cpp
while (條件) {
    // 迴圈內的程式碼
}
```

- **條件**：每次執行前都會檢查這個條件，若條件為 `true`，則繼續執行迴圈內容；若條件為 `false`，則結束迴圈。

---

### 使用 `while` 迴圈來找大於 1000 的最小倍數

假設我們希望找出某個數字的最小倍數，且這個倍數必須大於 1000。這樣的問題非常適合使用 `while` 迴圈，因為我們不知道需要進行幾次相乘才能達成條件，所以無法直接用 `for` 迴圈設定固定的次數。

例如，如果輸入數字為 7，我們希望得到的答案是 1001，因為 7 × 143 = 1001 是大於 1000 的最小倍數。

```cpp
#include <bits/stdc++.h> // 引入所有標準庫
using namespace std;

int main() {
    int x;         // 定義 x
    cin >> x;      // 輸入 x
    int gino = x;   // 初始化 gino 為 x

    // 使用 while 迴圈，直到找到大於 1000 的最小倍數
    while (gino <= 1000) {
        gino += x;  // 每次將 gino 增加 x，形成 x 的倍數
    }

    cout << "大於 1000 的最小 " << x << " 的倍數為: " << gino << endl;

    return 0;
}
```

### 程式碼說明：

1. **變數 `gino` 初始化**：我們先將 `gino` 設為輸入數字 `x`，這樣 `gino` 一開始就會是 `x` 的倍數。
2. **`while` 迴圈的條件**：在 `gino` 小於或等於 1000 的情況下，迴圈會持續執行。
3. **增加 `gino` 的值**：每次迴圈執行時，我們都將 `gino` 增加 `x`，這樣 `gino` 會變成 `x` 的下一個倍數。
4. **條件不成立時結束**：當 `gino` 大於 1000 時，迴圈停止，此時的 `gino` 即為我們要找的答案。

### 執行流程
假設 `x = 7`，那麼程式的執行流程如下：
- `gino = 7`（初始值）
- `gino` 小於或等於 1000，繼續迴圈：`gino = 14`
- `gino` 小於或等於 1000，繼續迴圈：`gino = 21`
- 這樣重複，直到 `gino = 1001`，此時跳出迴圈，輸出答案。

---

### 小結：`for` 迴圈與 `while` 迴圈的異同

| 迴圈類型 | 適用情境                     | 特點                                                                 |
|-----------|------------------------------|----------------------------------------------------------------------|
| `for`     | 重複次數已知                 | 適合用在確定執行次數的情況，初始化、條件和更新放在同一行            |
| `while`   | 重複次數不確定，需持續判斷   | 適合重複次數不確定的情境，每次執行前都會檢查條件，變數更新放迴圈內 |

---



### [簡單題目：輸出1到n](http://120.101.182.21/d/hd112/p/43)
### [簡單題目：請輸出某數的大於1000的最小倍數](http://120.101.182.21/d/hd112/p/44)
### [題目 1：找質數](http://120.101.182.21/d/hd112/p/39)
### [題目 2：算階乘](http://120.101.182.21/d/hd112/p/40)
### [題目 3：小於 100 的奇數](http://120.101.182.21/d/hd112/p/41)
### [題目 4：尋找數字中的偶數位數和奇數位數](http://120.101.182.21/d/hd112/p/42)