跳到正文
IGCSE·Tuition
计算机科学 · 练习

算法设计:综合练习与解析

练习是设计技能要么扎根、要么露出缺口的地方,而完整解答会告诉你是哪一种。

这十一道题涵盖任务分解、规格、追踪表、带边界情况的选择结构和算法解释。在纸上完成,自己写追踪表,得出结果后才打开答案。所有代码都使用剑桥风格的伪代码。

模块概览见算法设计。把错题记在错题记录里,并用伪代码追踪训练器检查追踪。

题目

**Q1(简单)。**商店程序读取三件商品的价格,如果总价超过 RM50,就输出打九折后的金额,否则输出原总价。按顺序列出子问题。

Show answer
  1. 输入三个价格。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
IBA
开始12
123
264
3245
41206

输出 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。

常见问题

我应该怎样使用这套练习?

在纸上做。先预测答案,建立好追踪表,再打开解答,对照解题过程,而不只是最后一行。记下每个错误属于哪一课,之后再做一道类似的题。

这些是考试真题吗?

不是。这些是为练习同样技能而写的原创题。请用 Cambridge 的课程大纲页面和老师的资料,确认你所考年份期望的风格和记法。

如果大部分都做错了怎么办?

回到分流部分指出的那一课,不看答案重做它的例题,再重做这道题。用错题记录追踪规律。反复出现同样的错误本身就是有用的信息。

更新于:

下一步

如果读过解答之后,同一类题仍然反复出错,一对一的老师可以看你的作答,找出背后的习惯。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生