第三章 決策運算
範例 3-2a
請寫一個程式,完成以下要求:
1. 輸入一個0~100的分數。
2. 當分數大於90分時,輸出A。
3. 當分數介於80~89時,輸出B。
4. 當分數介於70~79時,輸出C。
5. 當分數介於0~69時,輸出D。
自我練習
1.請寫一程式,判斷所輸入的數是正數、0或負數。
2.某一貨品定價100元,若購買10件(含)以上打9折,若購買30∼99件則打8折,若購買100件以上則打7件,試寫一程式可以輸入購買件數而得總價。測試資料如下:
輸入 |
輸出 |
5 |
500 |
10 |
900(100*10*0.9) |
30 |
2400(100*30*0.8) |
100 |
7000(100*100*0.7) |
3.直線。直線標準式為ax+by+c=0,請寫一程式,可以指派一直線係數a,b,c。其次,可再輸入任一點座標,並判斷所輸入點式否在直線上。例如,指派a,b,c分別是1,2,-4,那方程式就是x+2y-4=0,其次,輸入點若是(2,1),那就是在直線上,若是(1,2),那就不在直線上。
4.請寫一程式,可以輸入一個小寫字元,請判斷其是否為母音。說明,字元a,e,i,o,u稱為母音,其餘為子音。
5.同上題,請寫一程式,可以自動產生一個小寫字元,並判斷是否為母音。
6.請寫一個程式,可以產生一個0到25的亂數,且依以下分數顯示燈號
21∼25:五個燈。
16∼20:四個燈。
11∼15:三個燈。
6∼10:兩個燈。
1∼5:一個燈。
0:零個燈。
7.表決器。假設有一項評審工作,有3位評審,當其中兩人或以上同意,則表示過關,請設計此程式。
8.請輸入一個整數x,並判斷此整數是否滿足1<x<=6。
9.請輸入一個整數x,並判斷此整數是否滿足x>3 or x<-2。
10.請輸入3個線段長度,判斷這3個線段,是否可圍一個三角形。圍成三角形的條件是,任兩邊之和要大於第三邊?(提示:任兩邊之和大於第三邊的數學語言是:a+b > c and a+c > b and b+c > a,請將以上數學語言轉為Python。測試資料 3,4,5 可以 1,1,3不可以)
11.若有一數學式,同時判斷六個數字是否滿足 ,請轉換為Python敘述。例如,1,2,3 與2,4,6就滿足;1,2,3與1,2,5就不滿足。
12.若有一數學式,同時判斷六個數字是否滿足又如何表示呢?
範例 3-2b
請寫一個程式,可以判斷所輸入座標的所在象限。
自我練習
1、同上範例,但增加先判斷是否在原點或x、y軸上。測試資料如下
輸入(x,y) |
輸出 |
(0,0) |
原點 |
(0,3) |
y軸 |
(3,4) |
I |
2、同上題,但程式一執行,要求先輸入密碼,密碼若為『abcd』,那才可執行本程式。
3、同上題,但程式一執行,要求先輸入密碼,密碼若為『aa11』、『bb22』、『cc33』或『abcd』,那才可執行本程式。
極大與極小
範例 3_2c
請寫一程式,滿足以下條件。
1、 輸入兩個數。
2、 求輸入兩數極大值。
3、 輸出極大值。
自我練習
1、請寫一程式,滿足以下條件。
(1)輸入三個數。
(2)求此三個數的極大值。
(3)輸出極大值。
2、請寫一程式,可以輸入5個數值,請去掉最大值與最小值,再求其平均。
排序
範例 3_2d
請寫一程式,滿足以下條件。
1、 輸入三個數。
2、 將此三個數由小而大輸出。
3、 請寫一程式,可以輸入四個人名與其分數,並依照分數由小而大輸出,輸出應含人名與分數。(提示:這題要練習,變數如何取,程式較好寫,其次,當分數交換,人名也要跟者換,這都是一些程式設計運算思維,請大家好好練習。)
3_3 if~elif~
自我練習
1、請寫一程式,將所輸入的0、1、2…6,轉為'星期日'、'星期一'…'星期六'等字串。
2.請寫一個程式,可以產生一個0到25的亂數,且依以下分數顯示燈號
21∼25:五個燈。
16∼20:四個燈。
11∼15:三個燈。
6∼10:兩個燈。
1∼5:一個燈。
0:零個燈。
3.請寫一程式,可以自動產生一個0到127的亂數,以字元方式輸出此亂數,並判斷是否為大寫字元、小寫字元、或數字。
3_4 位元運算子
範例3_4a複選題評分。大學學測考試的複選題共五個選項,五個選項全答對得5 分,錯一個選項得3 分,錯兩個選項得1 分,錯超過兩個選項得0 分,未做答也是0 分, 且答錯不倒扣,請寫一程式,可以協助評分,請問您的資料結構為何?
3_5 實例探討
猜拳遊戲
範例3_5a 猜拳遊戲。請寫一個程式,可以由人和電腦猜拳,並評定勝負。
自我練習
1、那三個人同時猜拳呢,由電腦產生兩個亂數,由您和電腦猜,且評判輸贏。(提示:兩個人共9種情況,用兩層決策,三個人共27種情況,可用3層決策)
範例5_3d紅綠燈程式。假設有單向紅綠燈時序如下,請設計程式完成其功能。
時序 |
燈號 |
0 |
綠燈 |
1 |
綠燈 |
2 |
綠燈 |
3 |
綠燈 |
4 |
綠燈 |
5 |
黃燈 |
6 |
黃燈 |
7 |
紅燈 |
8 |
紅燈 |
9 |
紅燈 |
10 |
紅燈 |
自我練習
1、觀察十字路口雙向紅綠燈,規劃其時序,寫出其程式。
一元二次方程式
範例 3-5b
請設計一個程式,可以解一元二次方程式ax2 + bx + c = 0。
自我練習
1.解二元一次方程式。解二元一次方程式的演算法如下:
1. 設二元一次方程式如下:
2. 令 (表示d = a1b2 - a2b1)
3. 假如,則方程式無限多解,且程式結束。(代表兩重疊直線)
4. 假如,則方程式無解,且程式結束。(代表兩平行直線)
5.
6.
請設計一個程式,可以解二元一次方程式。
閏年的判斷
範例5-3c
請寫一個程式,可以將使用者所輸入的西元年份,判斷其為平年或閏年。
3_6 APCS實例探討
一,三角形判斷(APCS105第二梯次試題)
若已知三角形三邊長,判斷是否構成三角形、評定三角形種類與計算三角形面積的演算法如下:
A、 輸入三角形的三邊長a、b、c。
B、 任兩邊之和要大於第三邊。
3、若c是最長邊,假如a2 + b2 > c2則為銳角三角形;否則,假如a2 + b2 = c2,則為直角三角形;否則此三角形為鈍角三角形。
5、令
6、三角形面積
請輸入三角形三邊長,首先判斷是否構成三角形、其次判別三角形的種類,最後計算其面積。
範例一:輸入 3 4 5 範例一:正確輸出 3 4 5 Right (說明) a×a + b×b =
c×c 成立時為直角三角形。 |
範例二:輸入 101 100 99 範例二:正確輸出 99 100 101 Acute (說明) 邊長排序由小到大輸出, a×a + b×b
> c×c 成立時為銳角三角形。 |
範例三:輸入 10 100 10 範例三:正確輸出 10 10 100 No (說明) 由於無法構成三角形, 因此第二行須印出 「No」。 |
自我練習
1、請輸入4個線段長度,並評判此四個線段可否圍成凸四邊形。
二、城市移動(108/第一梯次)
假設有一個遊戲,有3 個城市,玩家依亂數L 在3 個城市移動,移到城市1 得L 分,如果L 是偶數則下一回合移到城市2,否則留在城市1;移到城市2 得到2L 分,如果L 是3 的倍數,下一回合移到城市3,否則前往城市1;移到城市3 得分是L 除以10 的商,如果L 是5 的倍數,下一回合移到城市3,否則移到城市1。測試資料如下:
4 1 //玩4回合,起始城市是1
1 2 3 12 //四個亂數
備註:此題目為憑個人記憶,題目很好,還是呼籲主辦單位公佈試題,讓學生練習。
演算法:因為每一城市有其不同移動規則與得分方式,所以可用if分成3 部分,且因每一城市都有其移動規則,所以每一城市都要自己用1 個if else,這樣就可以計算每一次轉移到哪一城市與每一次的得分。所以這題是屬於雙層決策問題,拿到分數沒有問題。
三、主客場籃球賽制。(108/第二梯次)
1、連打兩場,主場球隊兩場皆贏輸出Win。
2、兩場皆輸,輸出Loss。
3、其餘輸出Tie。
4、輸入格式 :每場4節得分,主場先輸出。以下分別是主隊、客隊兩場比賽的四小節得分
15 20 25 30
15 16 17 18
5 10 15 20
5 6 7 8
習題
1.假設所得稅稅率累進法則如下:
(1) 淨所得30萬以下繳納6%。
(2) 淨所得30∼80萬之間,則前面30萬繳納6%,超過30萬的部分繳納13%。
(3) 淨所得在80∼200萬之間繳納21%。(前面30萬繳6%,30∼80萬之間繳13%)
(4) 淨所得超過200萬,超過的部分繳納30%。
試寫一程式可以輸入淨所得,並計算應繳納稅額。測資如下:
淨所得 |
納稅額 |
20萬 |
20萬*6%=12000 |
40萬 |
30萬×6%+10萬×13%= 31000 |
100萬 |
30萬×6%+50萬×13%+20萬*21% =125000 |
220萬 |
30萬×6%+50萬×13%+120萬*21% +20萬*30%=395000 |
2.假設自來水費率如下:
A、100度以下,每度3元。
B、 100∼300度,超過100度的部分,每度5元。
C、 300度以上,超過300度的部分,每度6元。
根據以上條件,寫一程式,可輸入用水度數,得到水費。例如,測資如下表:
度數 |
水費 |
50 |
50*3=150 |
200 |
100*3+100*5=800 |
400 |
100*3+200*5+100*6=1900 |
3. 假設計程車的計費方式如下:
1000公尺以內60元。 超過1000公尺時,
(1)日間以每500公尺加收6元,不足500公尺時,以500公尺計算。
(2) 夜間以每300公尺加收6元,不足300公尺,以300公尺計算。
請根據以上條件,寫一程式完成車資的計算。本例,日間輸入1,夜間輸入0,再輸入一個里程數,並計算車資。測資如下表:
模式 |
里程 |
車資 |
模式 |
里程 |
車資 |
1 |
500 |
60 |
0 |
500 |
60 |
1 |
1800 |
60+6*2=72 |
0 |
1800 |
60+8*3=84 |
4. 寫一程式輸入x值,並印出其所對應的值,其函數對應如下:
x+3
x>3
x2
1<=x<=3
y=f(x)=
0<x<1
0
x<=0
5.請寫一程式,可以輸入三點座標,輸出其面積。
6、同上題,任意輸入3點,檢查是否共線,若未共線,輸出其面積。
提示:任3點面積若為0,則共線。
7、判斷任意點D是否在三角形ABC內或外。已知ABC三點座標,請寫一程式,可以輸入D點座標,並判斷任一點D是否在三角形ABC內或外。
(提示:D若在三角形內,則三角形ABC面積=DAB+DBC+DAC的面積)
8、凸或凹四邊形。已知 ABCD四點座標,請寫一程式,可以判斷四邊形 ABCD是否為凸或凹四邊形。
(提示:若為凸四邊形,則任一點,均不得在任三點所圍成的三角形內)
9、同上題,若為凸四邊形,並計算其面積。 提示:任意凸多邊行,都可以將第5題公式推廣,並且代入。
10.於二維平面中,請寫一程式,可以判斷兩直線平行、或相交或重合,若平行計算其距離,相交計算其交點。
11.寫一程式,可以任意輸入凸四邊形的四個端點座標,並可將其按順時針方向排列此四個點。(提示:請聯想高中數學的極座標)
12、停車場計費。假設停車場每小時30元,不足1小時以1小時計,每日最高180元,請寫一程式,可以計算其停車費。測試資料如下:
編號 |
進場時間 |
離場時間 |
停車時間 |
金額 |
1 |
09:40 |
11:30 |
110 |
60 |
2 |
09:50 |
20:20 |
630 |
180 |