條件判斷
這部分要搭配上一章學到的邏輯運算來判斷,這邊主要介紹兩種語法
1. if / else
- 可以用來判斷一個條件是否成立,以及如果成立及不成立的話該做什麼事情要放在大括號裡表示
- 最常用的一種語法
if 是 “如果”
而 else if 則是 “不然如果” 的意思。
最後,else 是 “否則“ 就是當前面的條件都不成立的話,會進入這裡。
語法的部分就是用 if, else if, else 關鍵字配上小括號裡面放上判斷式。
if(/*判斷式*/){
// statement
} else if(/*判斷式*/) {
// statement
} else {
// statement
}
當 if 下面要執行的程式碼只有一行時,也可以省略大括號:
if(/*判斷式*/)
// statement
else
// statement
以下是一段範例程式碼
int x = 60;
if(x <= 60){
cout << "不及格" << '\n';
} else if(x <= 70){
cout << "還可以" << '\n';
} else {
cout << "夠好了" << '\n';
}
在以上的範例程式碼,程式會先判斷 x 是否小於60,是的話就會 cout << “不及格”。
如果 x 不小於 60 的話,就會進去 else if 的判斷,是的話就會 cout << “還可以”。
最後,上述都不符合的話就會進入最後的 else cout << “夠好了”。
提醒:
- 使用 else if 的話,程式至多只會進入這串 if 的其中一個部分,而使用很多個 if 的話就可能會進入很多個。如果範例程式碼中前兩個都是 if ,那程式就會進入兩個部分因為 x <= 60 也 <= 70。但是,因為第二個條件是 else if,當離開第一個部分時,就會直接跳出整個判斷式。
2. switch
- 用來判斷一個變數的不同變量
- 較為簡潔,在有非常多判斷結果時會比較好用
- 實務上來說 if / else 的用途會比 switch 比較廣泛 / 常用
語法:
switch (/*運算式 or 變數*/){
case /*結果*/:
//statement
break;
case /*結果*/:
//statement
break;
... // 可以有很多個 case
default:
//statement
break;
}
case 的部份可以有很多個,可以根據情況加上不同的 case。而 default 則是很像上面 if 語法的 else,處理當結果不符合上面任何一個 case 的情況。
以下是一段範例程式碼:
char grade = 'A';
switch (grade){
case 'A':
cout << "你好棒\n";
break;
case 'B':
cout << "再加油\n";
break;
case 'C':
cout << "請加油\n";
break;
default:
cout << "沒了\n";
break;
}
這段程式碼會輸出 “你好棒” 的結果。
迴圈 / 迴路
接下來要介紹的迴圈應該是寫程式最常用到的語法之一了。迴圈可以讓你做重複的操作很多次!
例題: 輸出 1 – 100 中的偶數
遇到這題的你該不會想自己慢慢 cout << 2 << ‘\n’ << 4 << ‘\n’ …. 這樣下去吧 ?
太麻煩了! 我們可以用迴圈快速搞定這個!
C++ 主要有兩種迴圈語法: while 跟 for
語法
//while loop
while(條件式){ // 當條件滿足就繼續執行迴圈
// 要做甚麼事
}
//for loop
for(初始變數;條件式;改變變數){ // 當條件滿足就繼續執行迴圈
// 要做甚麼事
}
範例
// while
int n = 17;
while(n != 1){
if(n % 2 == 0) n /= 2;
else n = n * 3 + 1;
}
以上這個是著名的 3n + 1 猜想。這個猜想是再說給任何一個正整數 n ,如果 n 是偶數就除以2,奇數就乘以3加上1,最後都會得到1。以上的code就是在模擬這個過程。因此,當 n != 1,就繼續判斷要怎麼改變 n。
// for
for(int i = 1;i <= 100;i++){
if(i % 2 == 0)
cout << i << '\n';
}
這份code是在處理一開始提到的例題。我們將初始變數int i 從 1 開始,每次加上 1 (改變變數那邊是每次都加上 1),直到 i > 100 停止。而在過程中,只要 i 是偶數就輸出。
在for 迴圈中,在初始化完變數後,每次程式都會先判斷條件是否滿足 -> 做迴圈裡的事 -> 改變變數
提醒:
- 可以看到,兩個迴圈都有著相似的架構,都要有終止條件,並且在迴圈過程中都要改變變數,以達到終止條件。
- 如果迴圈達不到終止條件的話,就會產生無窮迴圈,程式將被強制終止。因此要程式一定要有辦法達到終止條件!
- for 跟 while loop 其實是一樣的,兩種都可以寫,但是:
- for 比較適合處理有次序的問題,例如,依序輸出1 – 100,輸入陣列
- while 比較適合每次變數改變可能會不一樣的狀況,例如 3n + 1 問題,或是其他改變變數比較複雜的問題。例如之後會學到的:
queue <int> q;
while(!q.empty())