--- tags: C++教學筆記 --- # 選擇結構 在前一章節,我們說明了運算子與條件式,這節我們要實際應用所學到的內容在我們的程式中,在我們的判斷式中,時常伴隨著 **關係運算子** 與 **邏輯運算子** 。 --- ## if的使用 如果條件式成立,才會執行內部程式敘述,否則會跳過當下`if`內部的敘述,我們稱為 **雙向選擇結構** ,`if`的語法如下: ```cpp if (條件式) 敘述; ``` 或 ```cpp if (條件式) { 敘述1; 敘述2; /* ... */ } ``` ### if-else 你覺得單單只有`if`可能會不夠嗎?或許該學學如何可以增加否則的敘述,我們稱為 **雙向選擇結構**,語法如下: ```cpp if (條件式) 敘述1; else 敘述2; ``` 或 ```cpp if (條件式) { 敘述1; /* ... */ } else { 敘述2; /* ... */ } ``` 我們學道雙向選擇結構後,是否有回想起 **條件運算子** `? :`呢?再撰寫程式中,我們有時可以利用 **條件運算子** 來簡化`if-else`的語法的敘述歐。 ### if-else if 條件還是不夠多的話我們可以利用`else-if`來實現,語法如下: ```cpp if (條件式1) { 敘述1; /* ... */ } else if (條件式2) { //不滿足條件式1,滿足條件式2 敘述2; .......; } else { //都不滿足時... 敘述3; /* ... */ } ``` ### 巢狀選擇結構 學會上面`if`的各種語法後,相信聰明的你會想到可以在`if` `else` `if else`內增加`if`吧,這種結構被稱為 **巢狀選擇結構** ,範例如下: ```cpp if (條件式1) { if (條件式3) { //滿足條件式1與條件式3 敘述3; /* ... */ } else { //滿足條件式1,不滿足條件式3 敘述4; /* ... */ } } else if (條件式2) { //不滿足條件式1,滿足條件式2 敘述2; /* ... */ } else { //不滿足條件式1與條件式2 敘述5; /* ... */ } ``` ## switch-case的使用 當我今天如果想要在某個變數在特定幾個範圍有不同的敘述結果,會有大量的`if`再使用,想必程式碼會又臭又長,這時候我們就要使用`switch-case`了,語法如下: ```cpp switch (運算式 或 變數) { case 值1: 敘述1; break; case 值2: 敘述2; break; case 值3: 敘述3; break; default: 敘述; } ``` 在`switch-case`中,你可以利用`運算式`的結果 或 `變數`的值,分別執行不同的敘述,但變數只可以是 **整數`int`** 或 **字元`char`**。 切記,每一個`case`敘述結束後要利用`break`跳出`switch`,否則會程式回繼續往下執行其他的敘述。 如果你`case`的值是個範圍 可以利用`...`來達成目的,我們舉個例子,今天老師說要程式自動判斷學生成績是否及格,並分別在不同分數輸出不同鼓勵學生的話,用`switch`解法如下: ```cpp switch (score) { case 100: cout << "狠角色,請繼續保持" << endl; break; case 80 ... 99: cout << "很強歐!還不錯" << endl; break; case 60 ... 79: cout << "恭喜及格" << endl; break; case 0 ... 59: cout << "不及格,繼續加油吧" << endl; break; default: cout << "你的分數不是在 0~100之間" << endl; } ``` --- ## 短路運算 c++的邏輯判斷使用的是**短路運算**`Short Circuit Evaluation`, 代表若前者的條件已經可以決定整個運算式的結果,便不會去判斷後者。 即`AND`邏輯只要前者為`false`,就直接回傳`false`, 而`OR`邏輯只要前者為`true`,就直接回傳`true`, 以上兩者**都不會再去判斷後者的真假值**, 這帶給使用者很大的便利(可以用這項特性防止許多問題發生)。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up