跳到正文
IGCSE·Tuition
计算机科学 · 主题

搜索、排序与文件

老师讲解时你能跟上算法,可一张空白的追踪表摆在面前,你却一下子卡住了。

本页内容
  1. 需要先具备哪些基础?
  2. 引导例子:一次追踪,三个概念
  3. 应该按什么顺序学习?
  4. 学生最常掉进哪些陷阱?
  5. 如何使用练习?

本模块讲程序对存储数据做的三件事:查找某个值、把值按顺序排好,以及读写文件。考试很少要你发明巧妙的方法,而是要你严格按照给出的算法执行,说出输出结果,并找出它在哪里出错。

具体范围和你所考年份要求的写法,请查看 Cambridge IGCSE Computer Science 课程大纲页面。整体框架见计算机科学学习指南,后续考试年份可能有何不同,请看 2029 年变化页面。

需要先具备哪些基础?

你需要懂变量、选择结构和循环。重复结构与数组模块涵盖这里用到的循环和数组技能,验证、核实与测试则引入了最后一课要延伸的测试数据思维。

引导例子:一次追踪,三个概念

下面是对一个虚构列表的小型搜索。数组 Items 在位置 1 到 3 存放 "pen"、"ruler"、"glue",目标是 "glue"。

Found ← FALSE
Index ← 1
WHILE Index <= 3 AND Found = FALSE
   IF Items[Index] = Target THEN
      Found ← TRUE
   ELSE
      Index ← Index + 1
   ENDIF
ENDWHILE
检查IndexItems[Index]Found
循环前1FALSE
第 1 轮1penFALSE,所以 Index 变为 2
第 2 轮2rulerFALSE,所以 Index 变为 3
第 3 轮3glueTRUE

循环结束时 Index = 3,所以答案是位置 3,共比较三次。请注意这张表显示了什么:数据、一个会移动的变量,以及停止条件。本模块的每一课都用到这三部分。

应该按什么顺序学习?

  1. 追踪原创数据上的线性搜索:学追踪表最清楚的方式,包括目标不存在时会怎样。
  2. 解释一轮排序(在考纲范围内):跟着一轮相邻比较与交换走一遍。
  3. 读取记录而不弄乱字段边界:把一行存储的数据正确拆成字段。
  4. 在受限例子中处理文件结尾:用在正确时机停止的循环读完整个文件。
  5. 用空数据和重复数据检查算法:在棘手的情况下测试你自己的算法。

然后做综合练习。有两个工具可以帮忙:受限伪代码追踪训练器用来逐步查看变量,安全 Python 推理沙盒用来验证简短的 Python 版本。

学生最常掉进哪些陷阱?

  • 找到之后还在改下标。 找到目标后继续计数的搜索,会报告错误的位置。
  • 交换时丢了一个值。 没有临时变量,一个值会覆盖另一个。
  • 把文件里的数字当成文本。 字符 9 和 72 作为文本比较的结果,与作为数字比较不同。
  • 只测试顺利的情况。 空列表或重复的值,可能让一个在整齐数据上正常的算法出错。

如何使用练习?

先在纸上画出追踪表,再打开任何答案。每个变量各占一列,一次只更新一行。把每一次失误记入错题记录与重测队列,几天后再做一次那道题。

如果你在课堂上每一步都跟得上,自己追踪时却总会跑偏,我们的老师可以通过一对一线上计算机科学补习帮你处理。

常见问题

我需要背下完整的排序算法吗?

请查看你所考年份的最新课程大纲,确认具体要求。不论措辞如何,真正能迁移的技能是追踪:一次比较一步地跟着数据走。本模块用一个小型原创例子训练这项技能,让你能套用到任何类似算法。

为什么文件题要用带文件结尾判断的循环?

程序常常不知道文件有多少行。文件结尾(end-of-file)判断让循环一直读到没有内容为止。题目会检查你是否在循环内读取、是否在正确的时机判断,以及之后是否关闭文件。

答案应该写伪代码还是 Python?

请使用你所考年份要求的写法,并在 Cambridge 官网核对。本站展示 Cambridge 风格的伪代码,只在有帮助时才加上 Python。两者的追踪逻辑相同,所以先练好逻辑。

资料来源

  1. Cambridge IGCSE Computer Science 0478 syllabus page

更新于:

下一步

如果你的追踪总是在同一步出错,一对一的老师可以看着你逐行追踪,指出变量究竟是从哪一行开始和代码对不上的。

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

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

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

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