奧林匹亞資訊班
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++;
}
}
複習!邏輯運算
邏輯運算符
邏輯運算符處理『多個真偽值』的關係
- 且 (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!
一起努力快樂寫程式吧!
class 10/26 if - else
By Wayne Wu
class 10/26 if - else
- 63