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

搜索、排序与文件:综合练习

别人填好追踪表时,一切看起来很简单;第一格空着时,感觉就不一样了。

这套练习涵盖整个搜索、排序与文件模块:线性搜索、一轮排序、记录、文件结尾循环和边缘情况测试。所有数据都是虚构的。

题目由易到难。先画追踪表,写下你的答案,再打开解答。受限伪代码追踪训练器可以核对追踪,错题记录与重测队列是记录失误的地方。

第 1 到 3 题使用下面的数组(位置 1 到 6)和线性搜索课里的搜索:

位置123456
Codes149279315
Found ← FALSE
Index ← 1
WHILE Index <= 6 AND Found = FALSE
   IF Codes[Index] = Target THEN
      Found ← TRUE
   ELSE
      Index ← Index + 1
   ENDIF
ENDWHILE

题目

1. Target = 9。写出最终的 Index、Found 和比较次数。

显示答案

第 1 轮:Codes[1] = 14,不匹配,Index 变为 2。第 2 轮:Codes[2] = 9,匹配,Found = TRUE。Index = 2,Found = TRUE,比较 2 次。

2. Target = 40。写出最终的 Index、Found 和比较次数。

显示答案

没有任何一项匹配,所以六项都被检查,每次之后 Index 加一。Index = 7,Found = FALSE,比较 6 次。 循环因 Index <= 6 不成立而结束。

3. 把 Index ← Index + 1 移到 IF 外面,放在它之后执行。Target = 27 时,最终 Index 是多少?为什么是错的?

显示答案

匹配发生在 Index = 3,但加一仍会执行,所以 Index 最终是 4。Codes[4] 是 9,不是 27,所以报告的位置是错的。

4. 另一个列表是 [3, 8, 8, 1]。线性搜索 1,在第一个匹配处停止。共比较几次?

显示答案

依次比较 3、8、8,然后在位置 4 比较 1。比较 4 次。

5. 在 [4, 7, 2, 9, 1] 上追踪一轮冒泡排序。写出之后的列表和交换次数。

显示答案

4 与 7:不交换。7 与 2:交换,得到 4, 2, 7, 9, 1。7 与 9:不交换。9 与 1:交换,得到 4, 2, 7, 1, 9。结果 [4, 2, 7, 1, 9],2 次交换。最大值 9 在最后。

6. Data[1] = 5,Data[2] = 8。一位学生用 Data[1] ← Data[2] 然后 Data[2] ← Data[1] 来交换。最终的值是多少?

显示答案

第一行之后,Data[1] = 8。第二行把 Data[1](现在是 8)复制到 Data[2]。最终:Data = [8, 8]。5 丢失了,因为没有临时变量保存它。

7. 用标志法对 [1, 2, 3] 做一轮。之后 Swapped 是什么?它说明什么?

显示答案

没有任何一对顺序不对,所以没有发生交换。Swapped = FALSE,说明列表已经排好。

8. 行 Zara,11A,64 在逗号处拆分。写出三个字段,以及分数加 6。

显示答案

字段:Zara、11A、64。转成数字后分数是 64,64 + 6 = 70。

9. 固定宽度的行 Omar 09C055 宽度为 6、3、3。写出三个字段,并把分数写成数字。

显示答案

字符 1 到 6:Omar 。字符 7 到 9:09C。字符 10 到 12:055,作为数字是 55。

10. 文件 Marks.txt 有 6、10、14、2 四行。用文件结尾课里的求和循环,写出 Total、Count 和平均数。

显示答案

读取 6、10、14、2,累计为 6、16、30、32。循环体执行四次。Total = 32,Count = 4,平均数 = 32 / 4 = 8。

11. 同一个程序在空文件上运行。会出什么问题?怎样保护?

显示答案

循环体一次也不执行,所以 Count = 0。接着 Total / Count 会除以零。用 IF Count = 0 THEN OUTPUT "No data" ELSE OUTPUT Total / Count ENDIF 来保护。

12. 一个算法找出最高分以及它出现的次数。在 [6, 6, 2, 6, 6] 上追踪它。

显示答案

开始时 Max = 6,Times = 1。第 2 项是 6,相等,Times = 2。第 3 项是 2,不变。第 4 项是 6,Times = 3。第 5 项是 6,Times = 4。输出 6, 4。

如果你做错了

出了什么问题去看
最终 Index、比较次数错误,或目标不存在(第 1 到 4 题)追踪线性搜索
一轮之后列表错误,交换时丢值(第 5 到 7 题)解释一轮排序
字段错误,文本被当成数字比较(第 8、9 题)读取记录
总和错误、循环不结束、空文件(第 10、11 题)处理文件结尾
重复值数错,没有测试边缘情况(第 11、12 题)检查空数据和重复数据

如果同一行总是出现,我们的老师可以通过一对一线上计算机科学补习围绕它设计额外练习。Python 推理沙盒也适合用来验证任何追踪的简短 Python 版本。

常见问题

这套练习应该怎么用?

先在纸上画出每道题的追踪表,再打开解答。要逐个变量对照,而不只是看最终输出,然后记录每一次失误。几天后不看笔记重做错题,看看改正是否真的有效。

这些题来自历年试卷吗?

不是。每道题都是原创的,使用虚构数据。题目对应本模块的技能,而不是某一份特定试卷。历年试卷和课程大纲可向你的考试中心或 Cambridge 官网获取。

第一次做错好几题怎么办?

这说明了该重读哪些课。用结尾的对照部分把每种错误对应到相关课程,重做该课的自我检测,隔一段时间再做这套练习。

更新于:

下一步

如果同一类失误在你的追踪中反复出现,一对一的老师可以把错误按原因分类,并围绕最拖分的两三项安排简短练习。

一小时付费试听课,按所安排老师确认的收费,RM80 起。

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

家长:在这里咨询

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