跳到正文
IGCSE·Tuition
计算机科学 · 课程

描述修正,而不只是写出代码

把整个程序重写一遍感觉很稳妥,但题目说“描述”,要的是用文字写出错误和修正。

本页内容
  1. 完整的描述包含什么?
  2. 例题
  3. 要提防的错误
  4. 自我检测
  5. 接下来学什么

好的修正描述有四个部分:错误在哪里、什么错了、为什么导致结果错、要改什么。单独的代码只展示最后一部分,阅卷员无法判断你是理解了错误,还是抄了一行。

这一课属于解题说明单元。它接在说明测试用例的理由之后,因为失败的测试正是发现大多数错误的方式。

完整的描述包含什么?

  1. 哪里: 行号或语句,例如“第 6 行”。
  2. 什么错了: 具体的问题,如除数错误、比较错误、缺少语句或循环上限错误。
  3. 为什么重要: 对输出的影响,最好带上测试数据中的一个数值。
  4. 改动: 用文字写出最小的修正,也可以附上修正后的那一行。

用要求作为证据:“要求是三个数字的平均值,但代码除以 2”。

例题

要求:读入三个数字,输出它们的平均值。

1  Total ← 0
2  FOR Index ← 1 TO 3
3     INPUT Number
4     Total ← Total + Number
5  NEXT Index
6  Average ← Total / 2
7  OUTPUT Average

测试数据 4、6、8 应该得到 6(因为 4 + 6 + 8 = 18,18 / 3 = 6)。程序却输出 9。

哪里: 第 6 行。

什么错了: Total 除以 2,但输入的是三个数字。

为什么重要: 用测试数据,18 / 2 = 9,不是预期的 6。

改动: 除以 3,也就是读入的数值个数。更稳妥的做法是除以一个记录输入个数的变量,这样循环上限改变时这一行仍然正确。修正后的行:Average ← Total / 3。

检查修正。 用 4、6、8:18 / 3 = 6,与预期结果相符。

要提防的错误

不好的答案是:

程序错了,因为平均值不对。把它改成能给出正确平均值。

没有行号,没有错误,也没有改动。第二种不好的写法是用另一种结构把七行全部重写,阅卷员看不出到底是哪里错了。

改正:“第 6 行把 Total 除以 2,但输入了三个数值,所以输入 4、6、8 时输出是 9 而不是 6。把除数改成 3。”

自我检测

1. 这段代码应该把整数 1 到 10 相加(答案是 55),却输出 45。请描述修正。

1  Total ← 0
2  FOR N ← 1 TO 9
3     Total ← Total + N
4  NEXT N
5  OUTPUT Total
显示答案

第 2 行的上限错了。循环在 9 就停止,所以 10 从未被加上,总和是 1 + 2 + … + 9 = 45,而不是 55。把上限从 9 改成 10:FOR N ← 1 TO 10。

2. 规则是“成绩 50 或以上输出 Pass”。成绩正好 50 时没有输出。请描述修正。

1  INPUT Mark
2  IF Mark > 50 THEN
3     OUTPUT "Pass"
4  ENDIF
显示答案

第 2 行用了 >,它不包括 50,但规则说的是“50 或以上”。成绩正好 50 通不过测试,所以不会输出 “Pass”。把 > 改成 >=:IF Mark >= 50 THEN。

3. 代码应输出三件物品价格(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,而不是加到 Total 上,所以每一轮都会覆盖前一个值,只剩最后一个价格 7。改成 Total ← Total + Price,价格就会累加:5、11、18。

接下来学什么

学会描述修正之后,下一步是说明程序为什么给出这个输出:把追踪表和最终输出联系起来。受限伪代码追踪训练器可以帮你在描述之前先测试修正。

如果你常常能发现错误,却在怎么说明修正上丢分,我们的老师可以在线上一对一计算机科学补习中和你一起打磨措辞。

常见问题

题目说“描述如何修正错误”,可以只写出正确的那一行吗?

有时那一行能得一分,但“描述”通常也需要文字。指出是哪一行、什么错了、应该是什么以及为什么。如果同时写出修正后的那一行,请清楚标示,让阅卷员两样都看得到。

需要重写整个程序吗?

很少需要。整体重写会掩盖哪里出错,还可能引入新错误。请指出有问题的那一行或那个条件,并描述最小的改动。简短而准确的答案说明你找到了真正的问题。

怎么知道应该怎么改?

把实际输出和要求中的预期输出比较,差异会指向错误。然后用测试数据追踪可疑的那一行。如果修正后的版本给出预期输出,这个修正就有依据。

资料来源

  1. Cambridge IGCSE Computer Science 0478 syllabus page

更新于:

下一步

如果你很快就能找到错误,写出来的修正却只是“改一下让它能用”,一对一的老师可以和你练习四部分的描述,直到成为习惯。

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

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

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

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