奧林匹亞資訊班

10/16

講師:吳崇維(wayne)

今日目標~

 

  • 作業檢討
  • 上週變數釐清&補充
  • 如何跟著程式的思維?
  • if - else - else if
  • 巢狀結構
  • (有時間)迴圈初步

作業檢討

 Homework #2 pA:

題目:輸入一個 -100 ~ 100 的整數,如果是

偶數,輸出1,否則輸出0

 Homework #2 pB:

題目:輸入一個四位數,輸出他們的位數和

例子:輸入:1234   輸出:10

(1+2+3+4 = 10)           

 Homework #2 pC:

題目:輸入3個整數, 輸出他們的最小值

例子:輸入:5 100 123   輸出:5

變數釐清

int 整數

  • 範圍:-2^31 ~ 2^31-1
  • –2,147,483,648 到 2,147,483,647

long long

  • 範圍:-2^63 ~ 2^63-1

if (如果)

 

『如果當時我...』

程式中也有如果!

語法:

 

 

 

 

其中條件就是前面提到的真偽!

如果條件為真=>進入處理

如果條件為偽=>跳過這部份

if - else (如果..不然)

 

if - else 語法可以簡潔處理對立!

語法:

 

 

 

 

兩者必只會執行其中一個!

if (condition) {
    statement;
} else {
    statement;
}

執行看看!

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    if (x == 10) {
        cout << "x == 10" << '\n';
    } else {
        cout << "x != 10" << '\n';
    }
    if (x % 2 == 0) {
        cout << "x is even" << '\n';
    } else {
        cout << "x is odd" << '\n';
    }
}

if - else if - else 

 

if - else if - else

這樣的語法可以再延伸!

語法:

 

 

 

 

 

 

 

if (condition) {
    statement;
} else if (condition2) {
    statement;
} else if (condition3) {
    statement;
} else {
    statement;
}

多個敘述由上往下判斷

一定只會執行一個!

遵循剛剛的原則,下面的程式怎麼運作呢?

#include <iostream>
using namespace std;

int main() {
    if (1) {
        cout << 'a' << '\n';
    } else if (1) {
        cout << 'b' << '\n';
    } else if (0) {
        cout << 'c' << '\n';
    } else {
        cout << 'd' << '\n';
    }
}

那這樣呢?

#include <iostream>
using namespace std;

int main() {
    int x = 10;
    if (x == 9) {
        x++;
    } else if (x == 10) {
        x++;
    } else if (x == 11) {
        x++;
    } else {
        x++;   
    }
}

複習!邏輯運算

邏輯運算符

邏輯運算符處理『多個真偽值』的關係

 

  1. 且 (and)  符號: &&

處理兩個敘述間的關係,都是真的才為真

 

例子 :1+1=2 且 2+2=4    =>   真

          1+1=2 且 2+2=5    =>   偽

邏輯運算符

邏輯運算符處理『多個真偽值』的關係

 

2.   或 (or)  符號: ||     (shift+\)

處理兩個敘述間的關係,其中一個為真就為真

 

例子 :1+1=2 或 2+2=4    =>   真

          1+1=2 或 2+2=5    =>   真

          1+1=3 或 2+2=5    =>   偽

邏輯運算符

 

3.   反 (not)  符號: !     

處理一個敘述

(!真)=偽      (! 偽) = 真

例子 :1+1=2      =>   真

         !(1+1=2)   =>   偽

結合if - else, 邏輯運算

小例子:

判斷x是否介於0~100

#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;
    if (0 <= x <= 100) {
        cout << "yes" << '\n';
    }
}
#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;
    if (0 <= x <= 100) {
        cout << "yes" << '\n';
    }
}
#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;
    if (0 <= x && x <= 100) {
        cout << "yes" << '\n';
    }
}
#include <iostream>
using namespace std;

int main() {
    int x;
    cin >> x;
    if ( x < 0 || x > 100) {
        cout << "no" << '\n';
    } else {
        cout << "yes" << '\n';
    }
}

巢狀結構

if - else if - else

閏年規則

除以4不可整除,為平年。

除以4可整除但除以100不可整除,為閏年。

除以100可整除但除以400不可整除,為平年。

年分除以400可整除,為閏年

敘述複雜?程式很簡潔!

Tricky! 一行搞定, 各有優缺

挑戰!自己寫一次

  • 除以4不可整除,為平年。
  • 除以4可整除但除以100不可整除,為閏年。
  • 除以100可整除但除以400不可整除,為平年。
  • 年分除以400可整除,為閏年

(補充) 快捷運算

 

​對於  && , ||

程式有時候會偷懶

 

如果 x == 0 , 不會判斷 y

-------------------------------------

如果 x == 1 , 不會判斷 y

if (x && y)

if (x || y)

Bouns題目:

寫一個找零錢的程式!

輸入一個介於0~2000的整數

換成 1000, 500, 100, 50 ,10, 5, 1的零錢

並輸出各種零錢個數!

 

Note: 活用 if 的判斷 , 並且時常更新變數值

if - else 結束

迴圈初步

什麼是迴圈?

電腦比起人腦,最突出的一項能力:

          重複一件事情而不犯錯!

程式設計自然也有重複執行的能力!

 

有了迴圈,程式的能力大幅提升

while

最基本迴圈

while

語法:

 

 

 

condition 是真偽的邏輯判斷

大括號裡頭想做什麼都可以!

 

這個迴圈會持續到condition為假

while (condition) {
    do something;
}

無窮迴圈!

不要這麼做...

計算1~100總和

如果忘了 i++; 

今日小練習!

分別輸出1 ~ 1000 中的

奇數, 偶數總和

活用 while + if-else

補充, 小技巧!

 

當我想要重複作一件事情

有個簡潔的while寫法

int cnt;
cin >> cnt;
while (cnt--) {
    do something;
}

迴圈恰好會跑cnt次!

補充中的補充

int i = 10;
int x = i++;

V.S.

int i = 10;
int x = ++i;

i++: 程式跑完一行指令之後

        才執行 i = i + 1; 的動作

++i: 程式先執行i = i + 1;

        才執行該行程式

開心的作業時間~

HomeWork#3

Problem B.

         小明很討厭偶數,他只要看到偶數,就會反覆把它除以二,直到這個數字變成奇數為止。給定一個正整數,經過小明的處理,會變成多少呢?

---------------------------------------

範例輸入: 64

範例輸出: 1

----------------------------------------

範例輸入: 188416

範例輸出: 23

Problem A.

     18:30 ~ 20:05 是奧林匹亞資訊班的上課時間。19:25~19:30是表定的短暫下課。

     給你現在的時、分(24小時制),判斷現在是否為上課時間?

---------------------------------------

範例輸入: 18 45

範例輸出: YES

----------------------------------------

範例輸入: 17 25 

範例輸出: NO

注意新的作業繳交方式!

FeedBack!

一起努力快樂寫程式吧!

Made with Slides.com