# switch ## 題目: 給定一個整數,輸入 1 表示「星期一」,2 表示「星期二」…… 7 表示「星期日」。請輸出對應的星期名稱。 ```cpp #include <iostream> using namespace std; int main() { int day; cin >> day; if (day == 1) cout << "星期一"; else if (day == 2) cout << "星期二"; else if (day == 3) cout << "星期三"; else if (day == 4) cout << "星期四"; else if (day == 5) cout << "星期五"; else if (day == 6) cout << "星期六"; else if (day == 7) cout << "星期日"; else cout << "輸入錯誤"; return 0; } ``` ### 不要這樣寫啦!很醜 用一堆 `if-else` 實在太麻煩了!這種情況下,`switch` 語句可以讓我們的程式碼更簡潔、更易讀。 --- ## `switch` 語句的寫法 `switch` 語句根據變數的「值」,執行對應的程式碼,語法如下: ```cpp switch (變數) { case 值1: // 當變數等於 值1 時執行的程式碼 break; case 值2: // 當變數等於 值2 時執行的程式碼 break; ... default: // 當變數不符合任何 case 時執行的程式碼 } ``` ### 語法說明: 1. **`switch (變數)`**:檢查變數的值。 2. **`case 值:`**:當變數的值等於 `值` 時,執行該 `case` 下的程式碼。 3. **`break;`**:表示結束當前的 `case`,跳出 `switch` 語句。 4. **`default:`**:當所有 `case` 都不符合時,執行 `default` 中的程式碼(可選)。 --- ## 舉例 ### 使用 `switch` 輸出星期名稱 我們將剛剛的程式碼改寫成使用 `switch`: ```cpp #include <iostream> using namespace std; int main() { int day; cin >> day; // 輸入一個數字 switch (day) { case 1: cout << "星期一"; break; case 2: cout << "星期二"; break; case 3: cout << "星期三"; break; case 4: cout << "星期四"; break; case 5: cout << "星期五"; break; case 6: cout << "星期六"; break; case 7: cout << "星期日"; break; default: cout << "輸入錯誤"; break; } return 0; } ``` --- ### 程式碼說明: 1. **`switch (day)`**:根據 `day` 的值選擇執行對應的 `case`。 2. **`case 1:` 到 `case 7:`**:輸出對應的星期名稱。 3. **`default:`**:當輸入不在 1 到 7 之間時,輸出「輸入錯誤」。 4. **`break;`**:防止程式繼續執行其他的 `case`,跳出 `switch` 結構。 --- ## 注意事項 1. **`break` 的重要性** 如果沒有 `break`,程式會「穿透」到下一個 `case`,繼續執行下面的程式碼,直到遇到 `break` 或結束 `switch`。 **示範:忘記加 `break` 的結果** ```cpp switch (2) { case 1: cout << "星期一"; case 2: cout << "星期二"; case 3: cout << "星期三"; default: cout << "輸入錯誤"; } ``` **輸出結果:** `星期二星期三輸入錯誤` 所以記得在每個 `case` 後加上 `break`! 2. **`default` 是選配的** 如果不需要處理例外情況,可以省略 `default`。 3. **`switch` 只支援整數、字元類型** - `switch` 只能用整數或字元作為條件判斷,不能使用浮點數或字串。 --- ## 小結 | 語法 | 適用情境 | 特點 | |------------|----------------------|--------------------------------------------| | `if-else` | 判斷範圍或多個條件 | 彈性較高,但程式碼可能較冗長 | | `switch` | 判斷固定的數值 | 適合單一變數、固定值的情況,程式碼簡潔清晰 | --- ### 練習題 ### [題目 1:四季有你真好](http://120.101.182.21/d/hd112/p/46) ### [題目 3:座標移動](http://120.101.182.21/d/hd112/p/47) ### 額外練習題(不用switch) ### [題目 2:數字島](http://120.101.182.21/d/hd112/p/45) ### [題目 4:考拉茲猜想—愛情歸宿](http://120.101.182.21/d/hd112/p/48)