# 【2-1】選擇結構 — if-else-else if 1. 如果會下雨,就帶傘出門 2. 如果考試及格,就不用罰寫,否則要罰寫兩遍 3. 如果數學90分以上,就不用寫作業,或者英文85分以上,就不用寫作業,否則要寫作業 諸如此類的假設語氣,就是選擇結構,如果成立...就怎樣,如果不成立...就怎樣 讓我們來看看怎麼用程式寫出來! ## if ![image](https://hackmd.io/_uploads/BkAdhwYNle.png) `if` 就是我們口頭上說的「如果...」,當我們給予的「條件」成立時,程式就會執行你指定的「內容」,反之,程式將會跳過這個判定式,繼續執行下去。 舉剛才的例子 1 ``` 如果 會下雨 就 帶傘出門 ``` 拆解一下語句 ``` 如果 條件A成立 就 執行動作B ``` 再換成程式寫法 ```c++ if(條件A){ 執行動作B; } ``` ### Python對照 ```python if 條件A: 執行動作B ``` ## if-else ![image](https://hackmd.io/_uploads/HySqnDtVle.png) `if-else` 就是我們口頭上說的「如果...否則...」,當我們給予的「條件」成立時,程式就會執行你指定的「內容」,反之,條件不成立時,程式將會執行 `else` 的部分。 舉剛才的例子 2 ``` 如果 考試及格 就 不用罰寫 否則 要罰寫兩遍 ``` 拆解一下語句 ``` 如果 條件A成立 就 執行動作B 否則 執行動作C ``` 再換成程式寫法 ```c++ if(條件A){ 執行動作B; } else{ 執行動作C; } ``` ### Python對照 ```python if 條件A: 執行動作B else: 執行動作C ``` ## else if ![image](https://hackmd.io/_uploads/Sywo6jc4lg.png) `else if` 通常用在需假設的條件數量 >=3 時,其意思和 `if` 相同。 ``` 如果 數學90分以上 就 不用寫作業 或者 英文85分以上 就 不用寫作業 否則 要寫作業 ``` 拆解一下語句 ``` 如果 條件A成立 就 執行動作B 否則 條件C成立 就 執行動作D 否則 執行動作E ``` 再換成程式寫法 ```c++ if(條件A){ 執行動作B; } else if(條件C){ 執行動作D; } else{ 執行動作E; } ``` ### Python對照 ```python if 條件A: 執行動作B elif 條件C: 執行動作D else: 執行動作E ``` ## 想一想 1. 下方兩組程式碼功能有何不同? ```cpp= int x; cin >> x; if(x>=90){ cout << "S rank"; } if(x>=80){ cout << "A rank"; } if(x>=70){ cout << "B rank"; } if(x>=60){ cout << "C rank"; } else{ cout << "F rank"; } ``` ```cpp= int x; cin >> x; if(x>=90){ cout << "S rank"; } else if(x>=80){ cout << "A rank"; } else if(x>=70){ cout << "B rank"; } else if(x>=60){ cout << "C rank"; } else{ cout << "F rank"; } ``` <details> <summary>解答</summary> 第一組程式碼會針對**每個條件都判斷**,只要成立就輸出,以及最後一組判斷是 `if-else`,成立(x >= 60)會輸出 C,不成立會輸出 F;第二組程式碼會從頭(x >= 90)開始判斷,只要成立就執行,然後離開選擇結構。 舉例 x = 82 第一組程式碼會輸出 ``` ABC ``` 第二組程式碼會輸出 ``` A ``` 再舉一例 x = 45 第一組程式碼會輸出 ``` F ``` 第二組程式碼會輸出 ``` F ``` </details> ## 高手過招 三元運算符(ternary operator)是一種簡化的條件表達式,這個表達式在APCS觀念題很愛考。 ```cpp= if(condition){ expression1; } else{ expression2; } ``` 可以寫成 ```cpp condition ? expression1 : expression2; ``` ### Python對照 ```python expression1 if condition else expression2 ``` --- ## 練習題 [U0007-這頓我請](https://code.dali.tc.edu.tw/problem/U0007) [U0008-做點心](https://code.dali.tc.edu.tw/problem/U0008) --- 聯絡方式:codecodefunny@gmail.com 最後編修時間:2025/07/22 子柚筆