if/else

Wu-Jun Pei@Sprout2018

參考自2017 Winston's講義

if

每天都會用到的技能

決定著你人生(X程式(O的走向

日常生活中的if

1. 如果今天可能下雨,就要帶雨傘出門

2. 如果明天作業死線,就要熬夜爆肝趕作業

3. 如果體重過重,就要去減肥

......

4. 如果昨天吃咖哩,今天就不能吃

程式中的if

if (condition) {
    statement
    ...
}

小括號判斷

大括號做事

日常生活中的if

1. 如果今天可能下雨,就要帶雨傘出門

2. 如果明天作業死線,就要熬夜爆肝趕作業

if (今天可能下雨) {
    帶雨傘出門
}

if (明天是作業死線) {
    熬夜爆肝趕作業
}

程式中的if

...
// notice the `==` below
if (1 + 1 == 2) {
    std::cout << "1+1=2!"
        << std::endl;
}
...

from: Google Image

程式中的if

if (1) {
    std::cout << "Welcome to Sprout" << std::endl;
}

if (0) {
    std::cout << "You should not see this message QQ"
        << std::endl;
}

常見的判斷式

(1 + 2 * 3) == 7
(1 + 2 * 3) != 9

a + b > c // Triangle Inequality
4 * a * b <= (a + b) * (a + b) // AM-GM Inequality

常見的判斷式

// !(expressionA): NOT

// example
if (!expressionA) {
    std::cout << "expressionA is not TRUE" << std::endl;
}

// !(true) -> false
// !(false) -> true

更多的if

利用"&&"(AND)、"||"(OR)串接判斷式

善用AND及IF的特性

if (A && B) {
    // 只有在A是True的時候才會判斷B
}

if (A || B) {
    // 只有在A是False的時候才會判斷B
}

更多的if

利用"&&"(AND)、"||"(OR)串接判斷式,請加括號

int A, B, C;
std::cin >> A >> B >> C;
if (A == 1 || B == 1 && C == 1) {
    std::cout << "Expression (A || B && C) is TRUE" << std::endl;
}
if ((A == 1 || B == 1) && C == 1) {
    std::cout << "Expression ((A || B) && C) is TRUE" << std::endl;
}

更多的if

WHY?

邏輯AND運算子(&&)的優先度 > 邏輯OR運算子 (||)

可以想成是&&是乘除,要先做
||是加減,要後做

 

Reference: Wikipedia

上課練習:基本的if

1. 季節判斷

2. 思考上面的例子中,怎樣的A, B, C會導致兩個判斷式不會同時是True

更多的if

WHY?

練習2

A = 1, B = 0, C = 0

時,會炸裂

請養成好習慣,該加括號就加括號,不然會被自己雷(?

if/else

如果,不然

如果樂法有開,就去喝樂法

不然如果一芳水果茶有開,就去喝一芳水果茶

不然就喝水

if (樂法有開) {
    喝樂法
} else if (一芳水果茶有開) {
    喝一芳水果茶
} else {
    喝水
}

如果,不然

請善用if/else的特性,有助於美化程式碼(?

if (N % 2 == 0) {
    std::cout << "Even!" << std::endl;
} else {
    std::cout << "Odd!" << std::endl;
}
if (N % 2 == 0) {
    std::cout << "Even!" << std::endl;
} 
if (N % 2 == 1) {
    std::cout << "Odd!" << std::endl;
}

如果,不然

請善用if/else的特性,有助於美化程式碼(?

if (score >= 90) {
    std::cout << "You are a genius!" << std::endl;
} 
if (90 > score && score >= 60) {
    std::cout << "Not bad!" << std::endl;
}
if (score > 60) {
    std::cout << "Keep trying!" << std::endl;
}

如果,不然

請善用if/else的特性,有助於美化程式碼(?

if (score >= 90) {
    std::cout << "You are a genius!" << std::endl;
} else if (score >= 60) {
    std::cout << "Not bad!" << std::endl;
} else {
    std::cout << "Keep trying!" << std::endl;
}

如果,不然

剛剛那題

if (N <= 3) {
	std::cout << "spring" << std::endl;
} else if (N <= 6) {
	std::cout << "summer" << std::endl;
} else if (N <= 9) {
	std::cout << "fall" << std::endl;
} else {
	std::cout << "winter" << std::endl;
}

nested if/else

怕大家不知道

對於複雜的狀況,我們可以利用巢狀 if 實作

if (condition_1) {
    if (condition_1_1){
        ...
    } else {
        ...
    }
} else if (condition_2) {
    if (condition_2_1) {
        ...
    }
} else {
    ...
}

利用if征服銀河系吧(X

[Sprout2018] if/else

By Wu-Jun Pei

[Sprout2018] if/else

  • 382