歡迎加入我的 Discord 群組與我討論程式相關的問題!

條件判斷

這部分要搭配上一章學到的邏輯運算來判斷,這邊主要介紹兩種語法

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()) 

Blog at WordPress.com.