这十一道题涵盖任务分解、规格、追踪表、带边界情况的选择结构和算法解释。在纸上完成,自己写追踪表,得出结果后才打开答案。所有代码都使用剑桥风格的伪代码。
模块概览见算法设计。把错题记在错题记录里,并用伪代码追踪训练器检查追踪。
题目
**Q1(简单)。**商店程序读取三件商品的价格,如果总价超过 RM50,就输出打九折后的金额,否则输出原总价。按顺序列出子问题。
Show answer
- 输入三个价格。2. 相加得到 Total。3. 如果 Total > 50,减去 10%。4. 输出最终金额。例如:20、25、10 得 Total 55,折扣 5.5,输出 49.5。
**Q2(简单)。**写出把整数分钟换算成小时和分钟的输入、输出和限制条件。给出 135 的输出。
Show answer
输入:Minutes,整数,0 或更大。输出:Hours 和 Mins,其中 Mins 在 0 到 59 之间。Hours ← Minutes DIV 60,Mins ← Minutes MOD 60。对 135:60 × 2 = 120,所以 Hours = 2,Mins = 15。检查:2 × 60 + 15 = 135。
**Q3(简单)。**95 颗糖装进每袋 8 颗的袋子。能装满几袋,剩下几颗?
Show answer
8 × 11 = 88,所以 95 DIV 8 = 11。95 − 88 = 7,所以 95 MOD 8 = 7。检查:11 × 8 + 7 = 95。
**Q4(中等)。**追踪这个算法并给出输出。
A ← 2
B ← 1
FOR I ← 1 TO 4
B ← B * A
A ← A + 1
NEXT I
OUTPUT B
Show answer
| I | B | A |
|---|---|---|
| 开始 | 1 | 2 |
| 1 | 2 | 3 |
| 2 | 6 | 4 |
| 3 | 24 | 5 |
| 4 | 120 | 6 |
输出 120。检查:2 × 3 × 4 × 5 = 120。
**Q5(中等)。**追踪这个算法并给出输出。
N ← 27
Steps ← 0
WHILE N > 10 DO
N ← N - 6
Steps ← Steps + 1
ENDWHILE
OUTPUT N, Steps
Show answer
27 > 10:N = 21,Steps = 1。21 > 10:N = 15,Steps = 2。15 > 10:N = 9,Steps = 3。9 > 10 为假。输出 9, 3。
**Q6(中等)。**订单满 RM200 或以上享 15% 折扣。选择边界测试值(以令吉和仙表示),并说明应该发生什么。
Show answer
测试 199.99(无折扣)、200.00(有折扣,因为规则是 200 或以上)和 200.01(有折扣)。关键测试是 200.00,它区分了 >= 和 >。
**Q7(中等)。**规则是”分数 40 或以上及格”,但代码写成 IF Mark > 40 THEN。哪个测试能找出错误,如何修正?
Show answer
测试 Mark = 40。规则预期及格,但 40 > 40 为假,所以代码给出不及格。修正:IF Mark >= 40 THEN。
**Q8(中等)。**为电影票价写伪代码:5 岁以下免费,5 到 17 岁 RM8,18 岁及以上 RM15。给出年龄 4、5、17 和 18 的输出。
Show answer
INPUT Age
IF Age < 5 THEN
Price ← 0
ELSE
IF Age < 18 THEN
Price ← 8
ELSE
Price ← 15
ENDIF
ENDIF
OUTPUT Price
输出:4 得 0,5 得 8,17 得 8,18 得 15。
**Q9(较难)。**把这句依赖语言的描述改写成普通步骤:“用 for 循环配合 range(1, 6) 和 sum 函数”。
Show answer
把 Total 设为 0。对 1 到 5 的每个整数,把它加到 Total 上。输出 Total。结果是 1 + 2 + 3 + 4 + 5 = 15。
**Q10(较难)。**对数据 8、3、5、3 追踪课程里的最小值算法。为什么它从第一个数字开始?
Show answer
Smallest = 8。接着 3 < 8,所以 Smallest = 3。然后 5 < 3 为假。然后 3 < 3 为假。输出 3。它从第一个真实的值开始,因为像 0 这样的固定起点可能比所有输入都小。
**Q11(较难)。**设计一个算法,读取四个温度,输出有几个高于 30。写明限制条件,写出伪代码,并追踪 28、31、30、35。
Show answer
限制条件:四个温度以数字输入;输出是 0 到 4 的整数。
Count ← 0
FOR I ← 1 TO 4
INPUT Temp
IF Temp > 30 THEN
Count ← Count + 1
ENDIF
NEXT I
OUTPUT Count
追踪:28 不是,31 是(Count 1),30 不是(不高于 30),35 是(Count 2)。输出 2。
如果你做错了
| 哪里出错 | 去看 |
|---|---|
| 子问题太模糊或顺序错(Q1、Q9) | 分解任务 |
| 漏了 DIV 或 MOD,或没有限制条件(Q2、Q3) | 输入、输出和限制条件 |
| 追踪行缺失或变量不同步(Q4、Q5、Q10) | 追踪序列 |
| 边缘上符号用错,或边界没测(Q6、Q7、Q8) | 带边界情况的选择结构 |
| 解释绑定了某种语言,或起始值错(Q9、Q10、Q11) | 解释算法 |
同时出现几种失误,可能说明有个缺口,找人看着你的解题过程会更容易补上。我们的一对一线上计算机科学补习正是围绕这样的追踪与调试来进行的,安全 Python 沙盒也能让你用一段短程序核对 Q11。