Conditions

if - else / switch - case

by 洪翠憶

簡介

如果⋯

發下段考成績單時:

  如果退步了⋯

  ->藏成績單

  否則

  ->乖乖讓家長簽名

當爸媽叫你跑腿時:

「幫忙買2瓶可樂,如果有雪碧的話,買1瓶」

  如果架上有雪碧

  ->買1瓶可樂

  否則

  ->買2瓶可樂

expression(表示式)

  • 簡介
  • 範例
  • and vs or
  • 運算子

簡介

  • 如果的條件
  • true / false    //小寫
  • 句尾沒分號

舉例

  • a == 11 //a是否等於11
  • score >= 60
  • age >= 20 || bool_married //是否滿20歲或者是否結婚

&&(and) vs ||(or)

  • &&須所有條件成立

  true && true && true -> true

  true && true && true && false -> false

  • ||只要有條件成立就可

  false && true && true -> true

  false && true && false && false -> true

運算子

邏輯運算子:

==(等於), !=(不等於), >(大於), <(小於),

>=(大於等於), <=(小於等於), &&(且), ||(或)

運算子優先級

3

16

圖表來源:https://zh.wikipedia.org/wiki/C%E5%92%8CC%2B%2B%E9%81%8B%E7%AE%97%E5%AD%90

if - else

  • 語法
  • 舉例
  • 練習

語法

if(條件式){
    陳述句1;
    陳述句2;
}else if(條件式){
    陳述句1;
    陳述句2;
}else{
    陳述句1;
    陳述句2;
}
if 條件式:
  陳述句1
  陳述句2
elif 條件式:
  陳述句1
  陳述句2
else:
  陳述句1
  陳述句2

C++

Python

語法補充

if(條件式)
    陳述句;
else if(條件式)
    陳述句;
else
    陳述句;

只有單行時

例子

#include<iostream>

int main(){
    int NumberOfMates;
    std::cout << "請問目前交往中的對象有幾個?";
    std::cin >> NumberOfMates;
    
    if(NumberOfMates > 1){
        std::cout << "好渣......";
    }else if(NumberOfMates == 1){
        std::cout << "好好喔有伴侶";
    }else{
        std::cout << "早日脫單~";
    }
    
    return 0;
}

檢測專情程度

練習(基礎)

題目:請寫出能輸出三個整數中最小數的程式。

輸入:共三個整數。

輸出:三個數字中最小的數。

範例輸入:

5 60 -8

範例輸出:

-8

練習(進階)

題目:老師請三位同學吃午餐,想知道各品項的價格,但同學們只有跟老師說自己吃的品項數量和總額。已知三人都各點一杯可樂,請你幫助老師算出各品項價格。(提示:解方程式)

輸入:共三行正整數,每行有三個值。

第一個值為所吃的米漢堡份數,

第二個為所吃的雞塊份數,

第三個為單人晚餐花費。

輸出:有三種可能。

第一種是只有一組解,請輸出 "RiceBurger: [米漢堡單價], Cola: [可樂單價], ChickenNugget: [雞塊單價]"。

第二種是無限多組解,請輸出 "Too many !!"。

第三種是無解,請輸出 "Are you kidding me ??"

範例輸入:

0 0 35
1 0 135
0 1 80

範例輸出:

RiceBurger: 100, Cola: 35, ChickenNugget: 45

原題目來源:https://zerojudge.tw/ShowProblem?problemid=b888

基礎題參考答案

#include<iostream>

int main(){
    int a, b, c;
    std::cin >> a >> b >> c;
    
    if(a < b && a < c){
        std::cout << a;
    }else if(b < a && b < c){
        std::cout << b;
    }else{
        std::cout << c;
    }
    
    return 0;
}

補充解法

#include<iostream>
#include<algorithm>

int main(){
    int arr[3];
    for(int i=0;i<3;i++){
        std::cin >> arr[i];
    }
    
    std::sort(arr, arr+3);
    
    std::cout << arr[0];
    
    return 0;
}

進階題參考答案

#include<iostream>

int main(){
    int a0, a1, a2, b0, b1, b2, c0, c1, c2;
    std::cin >> a0 >> a1 >> a2 >> b0 >> b1 >> b2 >> c0 >> c1 >> c2;
    
    int RiceBurger, Cola, ChickenNugget;
    bool val = 1;
    if(a0 == 0 && a1 == 0){
        Cola = a2;
        b2 -= Cola;
        c2 -= Cola;
        if(b0 == 0){
            ChickenNugget = b2;
            RiceBurger = (c2 - c1*ChickenNugget) / c0;
        }else if(b1 == 0){
            RiceBurger = b2;
            ChickenNugget = (c2 - c0*RiceBurger) / c1;
        }else if(c0 == 0){
            ChickenNugget = c2;
            RiceBurger = (b2 - b1*ChickenNugget) / b0;
        }else if(c1 == 0){
            RiceBurger = c2;
            ChickenNugget = (b2 - b0*RiceBurger) / b1;
        }else{
            RiceBurger = (c2/c1 - b2/b1) / (c0/c1 - b0/b1);
            ChickenNugget = (b2 - b0*RiceBurger) / b1;
        }
    }else if(b0 == 0 && b1 == 0){
        Cola = b2;
        a2 -= Cola;
        c2 -= Cola;
        if(a0 == 0){
            ChickenNugget = a2;
            RiceBurger = (c2 - c1*ChickenNugget) / c0;
        }else if(a1 == 0){
            RiceBurger = a2;
            ChickenNugget = (c2 - c0*RiceBurger) / c1;
        }else if(c0 == 0){
            ChickenNugget = c2;
            RiceBurger = (a2 - a1*ChickenNugget) / a0;
        }else if(c1 == 0){
            RiceBurger = c2;
            ChickenNugget = (a2 - a0*RiceBurger) / a1;
        }else{
            RiceBurger = (c2/c1 - a2/a1) / (c0/c1 - a0/a1);
            ChickenNugget = (a2 - a0*RiceBurger) / a1;
        }
    }else if(c0 == 0 && c1 == 0){
        Cola = c2;
        b2 -= Cola;
        a2 -= Cola;
        if(b0 == 0){
            ChickenNugget = b2;
            RiceBurger = (a2 - a1*ChickenNugget) / a0;
        }else if(b1 == 0){
            RiceBurger = b2;
            ChickenNugget = (a2 - a0*RiceBurger) / a1;
        }else if(a0 == 0){
            ChickenNugget = a2;
            RiceBurger = (b2 - b1*ChickenNugget) / b0;
        }else if(a1 == 0){
            RiceBurger = a2;
            ChickenNugget = (b2 - b0*RiceBurger) / b1;
        }else{
            RiceBurger = (a2/a1 - b2/b1) / (a0/a1 - b0/b1);
            ChickenNugget = (b2 - b0*RiceBurger) / b1;
        }
    }else{
        std::cout << "Too many !!";
        val = 0;
    }
    if(val && (Cola < 0 || RiceBurger < 0 || ChickenNugget < 0)){
        std::cout << "Are you kidding me ??";
    }else if(val){
        std::cout << "RiceBurger: " << RiceBurger << ", Cola: " << Cola << ", ChickenNugget: " << ChickenNugget;
    }
    
    return 0;
}

比較整齊的寫法

#include<iostream>

int RiceBurger, Cola, ChickenNugget;

void res(int a, int b[3], int c[3]){
    Cola = a;
    b[2] -= Cola;
    c[2] -= Cola;
    if(b[0] == 0){
        ChickenNugget = b[2];
        RiceBurger = (c[2] - c[1]*ChickenNugget) / c[0];
    }else if(b[1] == 0){
        RiceBurger = b[2];
        ChickenNugget = (c[2] - c[0]*RiceBurger) / c[1];
    }else if(c[0] == 0){
        ChickenNugget = c[2];
        RiceBurger = (b[2] - b[1]*ChickenNugget) / b[0];
    }else if(c[1] == 0){
        RiceBurger = c[2];
        ChickenNugget = (b[2] - b[0]*RiceBurger) / b[1];
    }else{
        RiceBurger = (c[2]/c[1] - b[2]/b[1]) / (c[0]/c[1] - b[0]/b[1]);
        ChickenNugget = (b[2] - b[0]*RiceBurger) / b[1];
    }
}

int main(){
    int **arr;
    arr = new int*[3];
    for(int i=0;i<3;i++){
        arr[i] = new int[3];
    }
    
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            std::cin >> arr[i][j];
        }
    }
    
    bool val = 1;
    
    if(arr[0][0] == 0 && arr[0][1] == 0){
        res(arr[0][2], arr[1], arr[2]);
    }else if(arr[1][0] == 0 && arr[1][1] == 0){
        res(arr[1][2], arr[0], arr[2]);
    }else if(arr[2][0] == 0 && arr[2][1] == 0){
        res(arr[2][2], arr[1], arr[0]);
    }else{
        std::cout << "Too many !!";
        val = 0;
    }
    if(val && (Cola < 0 || RiceBurger < 0 || ChickenNugget < 0)){
        std::cout << "Are you kidding me ??";
    }else if(val){
        std::cout << "RiceBurger: " << RiceBurger << ", Cola: " << Cola << ", ChickenNugget: " << ChickenNugget;
    }
    
    for(int i=0;i<3;i++){
        delete [] arr[i];
    }
    delete [] arr;
    return 0;
}

switch - case

  • 語法
  • 舉例

語法

switch(變數){
    case 值:
        陳述句;
        break;
    case 值:
        陳述句;
        break;
    default:
        陳述句;
        break;
}

3

9

3

case

case

default

9

8

例子

#include<iostream>

int main(){
    int num;
    std::cout << "現在要發給誰?";
    std::cin >> num;
    
    switch(num){
        case 13:
            std::cout << "喔耶是我朋友,給他10顆!";
            break;
        case 17:
            std::cout << "哼,討厭的傢伙,給他1顆就好";
            break;
        default:
            std::cout << "給5顆~";
            break;
    }
    
    return 0;
}

發糖果 

ternary operator(三元運算子)

  • 語法
  • 舉例

語法

條件式 ? true的回傳值 : false的回傳值

例子

#include<iostream>
#include<string>

int main(){
    std::string whether;
    std::cout << "是否認同「哪裡跌到,就在哪裡躺下」這句話?(y/n)";
    std::cin >> whether;
    
    std::cout << (whether=="y" ? "看來我們有同樣的想法" : "好吧,你跟我不一樣");
    
    return 0;
}

遇到困難時

kahoot!

試教

By justhentai

試教

就是試教的簡報啦加油

  • 285