Syllabus
內容 | 快速連結 |
---|---|
前導 Before class | Section 1 |
Relational Operator 關係運算子 | Section 2 |
if-else 選擇結構 | Section 3 |
Ex I - 電神裴裴隱匿錄 | Section 4 |
Nested if-else 巢狀選擇結構 | Section 5 |
Ex II - 我們與裴裴的距離 | Section 6 |
Logical Operator 邏輯運算子 | Section 7 |
Exercise III | Section 8 |
Conditional Operator 條件運算子 | Section 9 |
bool 專門存真/假的變數型態 | Section 10 |
Review | Section 11 |
Exercise IV | Section 12 |
Switch-case | Section 13 |
Before Before Class - 0
Esc後大概長這樣,你可以先Esc在上下左右選你要看哪頁投影片。
Before Before Class - 1
Before Class - 0
Before Class - 1
: 我接下來會出布,我沒出布結果贏了算平手。
如果 正常思考,出布勝率只有1/3,出石頭和剪刀顯然剪刀有利,所以 認為 會出石頭打剪刀,所以她會出布。所以我( )會出剪刀。
但如果 看了我靠北頗具挑釁的臉後冷靜下來,她會發現 出布是唯一贏的可能,所以預測 會出布, 該出剪刀。所以我( )會出石頭。
勝負表
Before Class - 2
: 我接下來會出布,我沒出布結果贏了算平手。
如果 正常思考,我( )會出剪刀。
但如果 看了我靠北頗具挑釁的臉後冷靜下來,我( )會出石頭。
人生就是這麼多如果。
那程式呢?
勝負表
Before Class - 3
循序結構例圖
選擇結構例圖
Relational Operator 關係運算子 - 0
符號 | 意思 | 舉例1 | 舉例1的結果 | 舉例2 | 舉例2的結果 |
---|---|---|---|---|---|
== | 判斷是否等於 | 1 == 2 | False | 1 == 2 - 1 | True |
!= | 判斷是否不等於 | 1 != 2 | True | 0 != 5 * 0 | False |
> | 判斷是否大於 | 7 > 5 | True | 5 + 1 > 5 + 1 | False |
< | 判斷是否小於 | 7 < 5 | False | 5 < 5 | False |
>= | 判斷是否大於等於 | 7 > 5 | True | 5 >= 5 | True |
<= | 判斷是否小於等於 | 7 < 5 | False | 5 <= 5 | True |
符號 | 意思 |
---|---|
== | 判斷是否等於 |
!= | 判斷是否不等於 |
> | 判斷是否大於 |
< | 判斷是否小於 |
>= | 判斷是否大於等於 |
<= | 判斷是否小於等於 |
怕你忘記,我把表放過來。
#include <iostream>
using namespace std;
int main () {
int x, y;
cin >> x >> y;
cout << (x != y) << endl;
return 0;
}
3 mins
Relational Operator 關係運算子 - 1
符號 | 意思 |
---|---|
== | 判斷是否等於 |
!= | 判斷是否不等於 |
> | 判斷是否大於 |
< | 判斷是否小於 |
>= | 判斷是否大於等於 |
<= | 判斷是否小於等於 |
怕你忘記,我把表放過來。
#include <iostream>
using namespace std;
int main () {
int x, y;
cin >> x >> y;
cout << (x = y) << endl;
cout << x << endl;
return 0;
}
這裡的==不是表情符號==
cout << x << endl;
Relational Operator 關係運算子 - 2
If-else 選擇結構 - 0
流程圖
// 前面的code
if (True 或 False) {
// 如果括號內是True,跑這個第一個大括號裡面的程式。
} else {
// 如果括號內是False,跑下面第二個大括號裡面的程式。
}
// 後面的code
// 前面的code
if (True 或 False) {
// 如果括號內是True,跑這個第一個大括號裡面的程式。
} else {
// 如果括號內是False,跑下面第二個大括號裡面的程式。
}
// 後面的code
範例的流程圖
int pin;
cin >> pin;
if (pin == 5356) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
If-else 選擇結構 - 1
// 前面的code
if (True 或 False) {
// 如果括號內是True,跑這個第一個大括號裡面的程式。
}
// 後面的code
範例的流程圖
int score;
cin >> score;
if (score == 100) {
cout << "Dian!" << endl;
}
If-else 選擇結構 - 2
if 是能長到哪裡去?
int pin;
cin >> pin;
if (pin == 5356)
cout << "Yes" << endl;
else
cout << "No" << endl;
int pin;
cin >> pin;
if (pin == 5356)
cout << "Yes" << endl;
cout << "Hi!" << endl;
else
cout << "No" << endl;
大括號內只有一行,
可以省略大括號
大括號不只一行,
不可以省略大括號
If-else 選擇結構 - 3
If-else 選擇結構 - 4
int pin;
cin >> pin;
if (pin == 5356)
cout << "Yes" << endl;
else
cout << "No" << endl;
int pin;
cin >> pin;
if (pin == 5356)
cout << "Yes" << endl;
else
cout << "No" << endl;
漂亮的縮排
(⌐■_■)
寫三小啦 看不懂啦
(╯‵□′)╯︵┴─┴
程式練習題
接下來有一題請你用
程式實做if-else的題目。
Exercise I - 電神裴裴隱匿錄 - 0
5 mins
就是有人這麼喜歡裝B,平均50不就好了?
Exercise I - 電神裴裴隱匿錄 - 1
5 mins
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if (a == 60)
cout << 'O';
else
cout << 'X';
if (b == 60)
cout << 'O';
else
cout << 'X';
if (c == 60)
cout << 'O';
else
cout << 'X';
cout << endl;
}
Nested if - 巢狀選擇結構 - 0
流程圖
我們來試試看巢狀的if-else吧!
Nested if - 巢狀選擇結構 - 1
流程圖
int x = 7, guess;
cin >> guess;
if (guess > x) {
cout << "Smaller.\n";
} else {
if (guess == x) {
cout << "Atari!\n";
} else {
cout << "Larger.\n";
}
}
Nested if - 巢狀選擇結構 - 2
流程圖
int x = 7, guess;
cin >> guess;
if (guess > x) {
cout << "Smaller.\n";
} else if (guess == x) {
cout << "Atari!\n";
} else {
cout << "Larger.\n";
}
int x = 7, guess;
cin >> guess;
if (guess > x) {
cout << "Smaller.\n";
} else {
if (guess == x) {
cout << "Atari!\n";
} else {
cout << "Larger.\n";
}
}
原本的code
if-else if-else的結構code
Nested if - 巢狀選擇結構 - 3
if (guess > x) {
cout << "Smaller.\n";
} else if (guess == x) {
cout << "Atari!\n";
} else {
cout << "Larger.\n";
}
省略大括號的code
if (guess > x) {
cout << "Smaller.\n";
} else {
cout << "HAHA!\n";
if (guess == x) {
cout << "Atari!\n";
} else {
cout << "Larger.\n";
}
}
不能省略的例子。
程式練習題
接下來有一題請你用
程式實做多重if-else的題目。
Exercise II - 我們與裴裴的距離 - 0
7 mins
分數等第對照表
某個老頭的語錄
Exercise II - 我們與裴裴的距離 - 1
7 mins
分數等第對照表
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
double avg_score = (double)(a+b+c) / 3;
if (avg_score >= 90)
cout << "A+\n";
else if (avg_score >= 85)
cout << "A\n";
else if (avg_score >= 80)
cout << "A-\n";
else if (avg_score >= 77)
cout << "B+\n";
else if (avg_score >= 73)
cout << "B\n";
else if (avg_score >= 70)
cout << "B-\n";
else
cout << "F\n";
}
Exercise II - 我們與裴裴的距離 - 2
7 mins
a && b (且) | a = True | a = False |
---|---|---|
b = True | True | False |
b = False | False | False |
Logical Operator 邏輯運算子 - 0
a || b (或) | a = True | a = False |
---|---|---|
b = True | True | True |
b = False | True | False |
! a | a = True | a = False |
---|---|---|
結果 | False | True |
且(and, &&)的運算表
或(or, ||)的運算表
Not(!)的運算表
a && b (且) | a = True | a = False |
---|---|---|
b = True | True | False |
b = False | False | False |
Logical Operator 邏輯運算子 - 1
a || b (或) | a = True | a = False |
---|---|---|
b = True | True | True |
b = False | True | False |
! a | a = True | a = False |
---|---|---|
結果 | False | True |
且(and, &&)的運算表
或(or, ||)的運算表
Not(!)的運算表
Logical Operator 邏輯運算子 - 2
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if (a >= b && a >= c)
cout << a << endl;
else if (b >= a && b >= c)
cout << b << endl;
else
cout << c << endl;
}
if (a 最大)
輸出a;
else if (b 最大)
輸出b;
else
輸出c;
大概念是這樣。
寫起來長這樣。
2 mins
Logical Operator 邏輯運算子 - 3
3 mins
你是在工三小?
if (y % 4 == 0 && y % 100 != 0 || y % 400 == 0 )
cout << "yes";
else
cout << "no";
if (y % 400 == 0)
cout << "yes";
else if (y % 100 == 0)
cout << "no";
else if (y % 4 == 0)
cout << "yes";
else
cout << "no";
一個簡單的實作
一個更簡單的實作,就照著題目寫下來就好了。
程式練習題
接下來有一題請你用
程式實做if-else的題目。
Exercise III - 魔王的考驗 - 0
如果能夠消滅JOI國王,則請輸出一行 "KATSU";否則,請輸出一行 "MAKE"。
10 mins
Exercise III - 魔王的考驗 - 1
如果能夠消滅JOI國王,則請輸出一行 "KATSU";否則,請輸出一行 "MAKE"。
10 mins
總之就是 (a && c) 和 (b && d) 其中一個是true,那麼就是(勝つ)KATSU,反之則是(負け)MAKE。
所以就是判斷 (a && c) || (b && d)而已。
#include <iostream>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
if((a && c) || (b && d)){
cout << "MAKE" << endl;
} else {
cout << "KATSU" << endl;
}
return 0;
}
範例 code
Conditional Operator 條件運算子 - 0
int max_value;
if (a > b) {
max_value = a;
} else {
max_value = b;
}
int max_value = ((a > b) ? a : b);
Conditional Operator 條件運算子 - 1
true或false ? A : B;
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
cout << (a == 60 ? 'O' : 'X');
cout << (b == 60 ? 'O' : 'X');
cout << (c == 60 ? 'O' : 'X');
cout << endl;
}
Conditional Operator 條件運算子 - 2
大致上的運算子優先順序。 不用記
cout << c == 60 ? 'X' : 'O';
cout << (c == 60 ? 'X' : 'O');
bool 布林型態 - 0
整數
布林值
英文: integer
英文: boolean
型態名稱: int
型態名稱: bool
宣告
宣告
int x;
int y = 4 + 1;
bool x = false;
bool y = true;
bool z = (2 > 1);
* true跟false都是關鍵字,都要小寫。
bool 布林型態 - 1
Review 小小複習 - 0
關係運算子 | 意思 |
---|---|
== | 判斷是否等於 |
!= | 判斷是否不等於 |
> | 判斷是否大於 |
< | 判斷是否小於 |
>= | 判斷是否大於等於 |
<= | 判斷是否小於等於 |
邏輯運算子 | T/T | T/F | F/T | F/F |
---|---|---|---|---|
a && b 結果 | True | False | False | False |
a || b 結果 | True | True | True | False |
邏輯運算子 | True | False |
---|---|---|
!a 結果 | False | True |
條件運算子 | c = True | c = False |
---|---|---|
a = (c ? 5 : 7) | a = 5 | a = 7 |
Review 小小複習 - 1
// Case 1:
if (true 或 false) {
// 做事情
}
// Case 2:
if (true 或 false) {
// 做事情
} else {
// 做事情
}
// Case 3:
if (true 或 false) {
// 做事情
} else if (true 或 false) {
// 做事情
} else {
// 做事情
}
Review 小小補充 - 0
#include <iostream>
using namespace std;
int main() {
if (2) cout << "A";
if (1) cout << "B";
if (0) cout << "C";
if (-1) cout << "D";
if (-2) cout << "E";
return 0;
}
ABDE
實驗程式
輸出
True
True
False
程式練習題
接下來有一題請你用
程式實做if-else的題目。
Exercise IV - 選擇障礙 - 0
10 mins
Exercise IV - 選擇障礙 - 1
10 mins
(第一個數字是1)
(第一個數字是0)
(第二個數字是1)
(第二個數字是0)
(第二個數字是1)
(第二個數字是0)
⚀⚁
⚂⚃
⚄⚅
⚀⚁
⚂⚃
⚄⚅
極匠
勝千代
山嵐
小川
雞二
海
真劍
墨洋
Exercise IV - 選擇障礙 - 2
10 mins
⚀⚁
⚂⚃
⚄⚅
極匠
勝千代
山嵐
小川
雞二
海
真劍
墨洋
⚀⚁
⚂⚃
⚄⚅
#include <iostream>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b >> c;
if (a == 1) {
if (b == 1) {
if (c == 1 || c == 2)
cout << "極匠拉麵\n";
else if (c == 3 || c == 4)
cout << "勝千代拉麵\n";
else if (c == 5 || c == 6)
cout << "山嵐拉麵\n";
} else
cout << "小川拉麵\n";
} else {
if (b == 1) {
if (c == 1 || c == 2)
cout << "雞二拉麵\n";
else if (c == 3 || c == 4)
cout << "海拉麵\n";
else if (c == 5 || c == 6)
cout << "真劍拉麵\n";
} else
cout << "墨洋拉麵\n";
}
return 0;
}
一個很長的解答
Exercise IV - 選擇障礙 - 3
10 mins
#include <iostream>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c;
d = 4 * a + b * ((c+1) / 2);
if (d == 0) cout << "墨洋拉麵\n";
else if (d == 1) cout << "雞二拉麵\n";
else if (d == 2) cout << "海拉麵\n";
else if (d == 3) cout << "真劍拉麵\n";
else if (d == 4) cout << "小川拉麵\n";
else if (d == 5) cout << "極匠拉麵\n";
else if (d == 6) cout << "勝千代拉麵\n";
else if (d == 7) cout << "山嵐拉麵\n";
return 0;
}
一個很酷但不要學的解答
(但不要學)
a | b | c | d | 結果 |
---|---|---|---|---|
0 | 0 | any | 0 | 墨洋拉麵 |
0 | 1 | 1/2 | 1 | 雞二拉麵 |
0 | 1 | 3/4 | 2 | 海拉麵 |
0 | 1 | 5/6 | 3 | 真劍拉麵 |
1 | 0 | any | 4 | 小川拉麵 |
1 | 1 | 1/2 | 5 | 極匠拉麵 |
1 | 1 | 3/4 | 6 | 勝千代拉麵 |
1 | 1 | 5/6 | 7 | 山嵐拉麵 |
數值轉換表
Exercise IV - 選擇障礙 - 4
10 mins
(但不要學)
a | b | c | d | 結果 |
---|---|---|---|---|
0 | 0 | any | 0 | 墨洋拉麵 |
0 | 1 | 1/2 | 1 | 雞二拉麵 |
0 | 1 | 3/4 | 2 | 海拉麵 |
0 | 1 | 5/6 | 3 | 真劍拉麵 |
1 | 0 | any | 4 | 小川拉麵 |
1 | 1 | 1/2 | 5 | 極匠拉麵 |
1 | 1 | 3/4 | 6 | 勝千代拉麵 |
1 | 1 | 5/6 | 7 | 山嵐拉麵 |
數值轉換表
#include <iostream>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
string s[] = {
"墨洋拉麵", "雞二拉麵",
"海拉麵", "真劍拉麵",
"小川拉麵", "極匠拉麵",
"勝千代拉麵", "山嵐拉麵"
};
cout << s[4 * a + b * ((c+1) / 2)] << endl;
return 0;
}
一個很酷,理論上比較快但很難懂的程式
switch case - 0
int x;
cin >> x;
switch (x) {
case 1:
cout << 1 << endl;
break;
case 9:
cout << 2 << endl;
break;
default:
cout << "No QQ" << endl;
break;
}
cout << "End\n";
switch case - 1
switch (比對字) {
case <比對字如果等於這個東西A>:
// 做事情A
break;
case <比對字如果等於這個東西B>:
// 做事情B
break;
default:
// 如果不符合所有判斷,做事情C
break;
}
APCS 手寫觀念題
接下來有一題APCS觀念題。
switch case - 2
switch (x) {
case 10: y = 'a'; break;
case 20:
case 30: y = 'b'; break;
default: y = 'c';
}
3. 右側 switch 敘述程式碼可以如何以 if-else 改寫?
if (x==10) y = 'a';
if (x==20 || x==30) y = 'b';
y = 'c';
if (x==10) y = 'a';
else if (x==20 || x==30) y = 'b';
else y = 'c';
if (x==10) y = 'a';
if (x>=20 && x<=30) y = 'b';
y = 'c';
if (x==10) y = 'a';
else if(x>=20 && x<=30) y = 'b';
else y = 'c';
(A)
(B)
(C)
(D)
(B)
2 mins
題目表 - 0