1學習目標
- 會依題目要求控制輸出格式,例如補零、固定小數位數。
- 會先用條件判斷擋下會出錯的計算,例如除以 0。
- 知道負數取餘數時可能出現負的結果,並會把它調整到正確範圍。
2概念說明
程式算出正確的數字還不夠,還要用題目要求的樣子說出來,也要能應付特殊的輸入。這個知識點整理三種常見狀況:
| 狀況 | 例子 | 處理方法 |
|---|---|---|
| 格式要固定 | 5 要輸出成 05;85 要輸出成 85.00 | 自己判斷,補上缺的 0 |
| 計算可能出錯 | 除數是 0 | 先判斷,是 0 就不要做除法 |
| 平台行為不同 | −3 除以 5 的餘數 | 用一個兩邊都適用的公式 |
💡 先列出「特殊情況」再寫程式
讀完題目後,先想一想:什麼樣的輸入會讓答案變得不一樣?例如小於 10 的數字、剛好是整數的平均、除數是 0、負數。把這些情況各試一次,最容易找到錯誤。
3示範題:跟著一步一步做(2 題)
先讀題,再一步一步點開來看。建議每看完一步,就先自己在平台上試著寫寫看。
兩位數補零輸出
L1|基礎M1-12-01請你把一個介於0到99之間的整數,輸出成固定兩位數的格式:如果數字小於10,前面要補一個0(例如5要輸出成05);如果數字是兩位數,直接輸出即可(例如23輸出23)。
第一行輸入一個介於0到99之間的整數N
- 輸入
- N(0~99)
- 輸出
- 補零後的兩位數字串
範例1
輸入
輸入
5
輸出
05
範例2
輸入
輸入
23
輸出
23
第 1 步:讀題,找出輸入和輸出
- 輸入:一個 0 到 99 的整數 N。
- 輸出:固定兩位數。小於 10 前面補 0,例如 5 → 05。
第 2 步:把問題拆成步驟
詢問並等待 → N
如果 N < 10:
說出 (「0」接上 N)
否則:
說出 N第 3 步:用範例走一次
| N | N < 10? | 輸出 |
|---|---|---|
| 5 | 是 | 05 |
| 0 | 是 | 00 |
| 23 | 否 | 23 |
第 4 步:對照範例答案
按「載入範例」,「0」和 N 是用「字串組合」接起來的,這樣才會得到文字「05」。如果用數學的「+」,0 + 5 只會得到 5。
負數的正確餘數計算
L2|進階M1-12-05請你計算a除以b的餘數,餘數必須維持在0到b-1之間(即使a是負數,也要輸出這個範圍內正確的餘數,不能直接用一般的取餘數運算導致出現負的餘數)。(b保證是正整數)
第一行輸入a b(空白分隔)
- 輸入
- a b
- 輸出
- 0到b-1之間的正確餘數
範例1
輸入
輸入
-3 5
輸出
2
第 1 步:讀題,找出輸入和輸出
- 輸入:兩個整數 a、b(b 是正整數)。
- 輸出:a 除以 b 的餘數,而且一定要在 0 到 b−1 之間。
第 2 步:發現問題:兩個平台的餘數不一樣
數學上 −3 =(−1)× 5 + 2,所以 −3 除以 5 的餘數應該是 2。但是:
| 平台 | −3 除以 5 的餘數 |
|---|---|
| Blockly | −3(負的,不在 0~4 之間) |
| Scratch | 2(已經自動調整成正的) |
第 3 步:用一個兩邊都適用的公式
先算一次餘數,加上 b 讓它變成正的,再算一次餘數,把超過的部分去掉:
詢問並等待 → a 詢問並等待 → b 說出 ((a 除以 b 的餘數)+ b)除以 b 的餘數
用範例驗證:
| a | b | a 除以 b 的餘數(Blockly) | + b | 再除以 b 的餘數 |
|---|---|---|---|---|
| −3 | 5 | −3 | 2 | 2 |
| 7 | 5 | 2 | 7 | 2 |
| −10 | 5 | 0 | 5 | 0 |
不管 a 是正的、負的還是剛好整除,答案都正確;在 Scratch 上用這個公式也一樣正確。
第 4 步:對照範例答案
按「載入範例」,範例答案就是這一行公式。
⚠️ 常見錯誤
- 只加一次 b:a 是正數時,例如 7 除以 5 餘 2,加上 5 變成 7,答案就錯了,所以最後還要再取一次餘數。
4延伸挑戰(3 題)
核心題都會了嗎?這些題目需要把好幾個技巧組合起來,想挑戰的話可以試試看。
🚀 平均分數到小數點後兩位 L3|挑戰
挑戰重點:平均要輸出到小數點後兩位,而且 85 要輸出「85.00」。一種做法:把平均 × 100 後四捨五入(得到 8500),整數部分是「÷ 100 無條件捨去」,小數部分是「除以 100 的餘數」;小數部分如果小於 10,前面要補一個 0(和示範 M1-12-01 同樣的補零技巧),最後用「字串組合」接成「整數.小數」。
請你計算N筆分數的平均值,輸出到小數點後兩位(四捨五入),即使結果剛好是整數,也要顯示到小數點後兩位(例如平均剛好80分要輸出80.00)。
第一行輸入N
第二行輸入N個分數
輸出平均值,格式為小數點後兩位。
- 輸入
- N、N個分數
- 輸出
- 平均值(小數點後兩位)
範例1
輸入
輸入
4 80 90 70 100
輸出
85.00
💡 需要提示嗎?
先四捨五入到小數兩位;如果結果是整數或只有一位小數,要自己補上「0」,湊滿兩位。
🚀 除以零的例外處理 L3|挑戰
挑戰重點:先判斷 b 是不是 0:是 0 就說出「無法計算」,不要做除法;不是 0 才計算 a ÷ b,並用上一題的方法輸出到小數點後兩位。
請你計算兩個整數a除以b的結果,並輸出到小數點後兩位。但是b有可能是0,這時候不能真的做除法(會出錯),請改成輸出「無法計算」。
第一行輸入a b(空白分隔)
如果b不是0,輸出a除以b的結果(小數點後兩位);如果b是0,輸出「無法計算」。
- 輸入
- a b
- 輸出
- 除法結果(小數點後兩位)或「無法計算」
範例1
輸入
輸入
10 4
輸出
2.50
範例2
輸入
輸入
5 0
輸出
無法計算
💡 需要提示嗎?
先判斷 b 是不是 0,是 0 就輸出「無法計算」,不要真的去做除法。
🚀 金額千分位輸出 L3|挑戰
挑戰重點:把金額當成文字,一個字元一個字元接到結果後面。每接一個字元,就算一下後面還剩幾位:剩下的位數大於 0,而且是 3 的倍數時,就接一個逗號。例如 1234567:接完 1 還剩 6 位,接逗號;接完 4 還剩 3 位,接逗號。
請你把一個金額數字,輸出成加上千分位逗號的格式(從個位數往左,每三位加一個逗號,例如1234567要輸出成1,234,567)。金額保證是不含小數的正整數。
第一行輸入一個正整數金額amount
- 輸入
- amount(正整數)
- 輸出
- 加上千分位逗號的金額字串
範例1
輸入
輸入
1234567
輸出
1,234,567
💡 需要提示嗎?
從個位數往左數,每三位加一個逗號。可以先算出第一段有幾位數,再決定逗號要放在哪裡。
5自我檢核
學完之後,檢查看看你能不能做到這些事。有做不到的,就回到上面對應的地方再看一次。
- 我會用條件判斷加字串組合,做出補零的輸出。
- 我會在做除法前,先判斷除數是不是 0。
- 我知道 Blockly 和 Scratch 的負數餘數不一樣,也會用通用公式得到正確答案。
- 寫完程式後,我會刻意用特殊的輸入測試。