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

解题说明:原创综合练习与解析

书面说明进步最快的方法,是先写下自己的答案,然后才去对照。

这些题目涵盖整个解题说明单元:变量的用途、有依据的测试用例、修正的描述、追踪表与输出的联系,以及最小例子。题目都是原创的,由易到难排列。

请先用完整句子写出你的答案;追踪题要画出表格。然后打开答案对照。受限伪代码追踪训练器和安全的 Python 推理沙盒可以检查你的数值。

题目

1.(容易) 说明这段代码中 Count 的用途。

Count ← 0
FOR Index ← 1 TO 4
   INPUT Age
   IF Age >= 18 THEN
      Count ← Count + 1
   ENDIF
NEXT Index
OUTPUT Count
显示答案

Count 是计数器。它保存到目前为止输入的年龄中 18 岁或以上的个数。它从 0 开始,因为还没有数过任何东西;只有当 Age >= 18 为真时才加 1;循环结束后作为最终数字输出。

2.(容易) 某个搜索在循环前设 Found ← FALSE,看到目标时设 Found ← TRUE。说明为什么需要 Found。

显示答案

Found 是标志,记录是否已经见过目标。它从 FALSE 开始,因为还没找到任何东西。一旦设为 TRUE 就保持 TRUE,所以循环结束后程序可以测试它,决定输出 “Found” 还是 “Not found”。

3.(容易) 要求:座位号必须是 1 到 40(含)的整数。给出四个边界测试,写出预期结果和理由。

显示答案
  • 1: 接受,因为“从 1”包含下限。
  • 40: 接受,因为“到 40(含)”包含上限。
  • 0: 拒绝,因为刚好低于下限。
  • 41: 拒绝,因为刚好高于上限。

4.(中等) 要求:订单总额达到 RM150 或以上时免运费。给出三个测试,写出预期结果和理由。

显示答案
  • RM149.99: 收运费,因为刚好低于界限。
  • RM150: 免运费,因为“或以上”包含正好 RM150。这能发现误用 > 而不是 >=。
  • RM200: 免运费,是远在规则之内的正常值。

5.(中等) 描述修正。价格 5、6 和 7 应得到 18,但代码输出 7。

1  Total ← 0
2  FOR I ← 1 TO 3
3     INPUT Price
4     Total ← Price
5  NEXT I
6  OUTPUT Total
显示答案

第 4 行用最新的 Price 替换了 Total,而不是累加,所以只剩最后一个价格 7。改成 Total ← Total + Price。这样数值依次是 5、11、18,就是预期输出。

6.(中等) 这段代码应该输出 1、2、3 然后停止,却永远不会结束。描述修正。

1  Count ← 1
2  WHILE Count <= 3 DO
3     OUTPUT Count
4  ENDWHILE
显示答案

Count 在循环内从未改变,所以 Count <= 3 永远为真,1 被不断输出。在循环内最后加上 Count ← Count + 1,放在 OUTPUT 之后。于是 Count 依次是 1、2、3、4,循环在输出 1、2、3 之后结束。

7.(中等) 追踪这段代码,写出输出,并用一句话解释。

X ← 3
Y ← 0
WHILE X > 0 DO
   Y ← Y + X * X
   X ← X - 1
ENDWHILE
OUTPUT Y
显示答案
轮次X > 0 ?之后的 Y之后的 X
开始03
13 > 0 真92
22 > 0 真131
31 > 0 真140
测试0 > 0 假140

Y 累加平方数 9、4 和 1。X 变成 0 时循环停止,OUTPUT Y 输出 14。

8.(中等) 追踪代码,给出两个输出。

Even ← 0
Odd ← 0
FOR N ← 1 TO 6
   IF N MOD 2 = 0 THEN
      Even ← Even + N
   ELSE
      Odd ← Odd + N
   ENDIF
NEXT N
OUTPUT Even
OUTPUT Odd
显示答案

N = 1:Odd 为 1。N = 2:Even 为 2。N = 3:Odd 为 4。N = 4:Even 为 6。N = 5:Odd 为 9。N = 6:Even 为 12。Even 累加 2 + 4 + 6,Odd 累加 1 + 3 + 5。输出依次是 12 和 9。

9.(较难) 一位学生说第 7 题的输出是 0,“因为 X 最后是 0”。说明他错在哪里。

显示答案

这位学生读错了变量。0 是 X 的最终值,它使循环结束,但语句是 OUTPUT Y。Y 那一列的最后一个值是 14,所以输出是 14。学生应该先看 OUTPUT 语句指名的变量,再去读它那一列。

10.(较难) 一个长程序应该统计大于 10 的数值个数。对数据 5、10、15,它输出 2。写出带有预期和实际输出的最小可重现例子,并描述修正。

显示答案
Data[1] ← 5
Data[2] ← 10
Data[3] ← 15
Count ← 0
FOR I ← 1 TO 3
   IF Data[I] >= 10 THEN
      Count ← Count + 1
   ENDIF
NEXT I
OUTPUT Count

预期:1(只有 15 大于 10)。实际:2(10 和 15)。条件用了 >=,它包含 10,但要求说的是“大于 10”。改成 IF Data[I] > 10 THEN。正是边界上的数据 10 暴露了错误。

11.(较难) “分数从 0 到 100(含)”的测试计划用了 0、50、100 和 101。指出缺了什么,以及为什么重要。

显示答案

缺少刚好低于下限的测试 −1。没有它,错误地接受负分的规则也能通过这个计划。再加一个类型错误的值,例如 “ten”,也有用,因为规则说分数是数字。应加上 −1(拒绝,低于下限)和 “ten”(拒绝,不是数字)。

答错了怎么办

用错题记录与重测队列记下错误类型,几天后再重测。单元总览解题说明列出完整的学习路线。

如果你想有人对照得分点阅读你写的答案,我们的老师可以在线上一对一计算机科学补习中帮你。

资料来源

  1. Cambridge IGCSE Computer Science 0478 syllabus page

更新于:

下一步

如果你的答案和示范答案很接近,却总是漏掉一个必要得分点,一对一的老师可以对照得分点阅读你的句子,找出差距在哪里。

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

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

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

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