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

用状态表追踪一个序列

在脑子里读算法本来很轻松,直到两个变量同时改变,其中一个就溜走了。

本页内容
  1. 怎样建立追踪表?
  2. 例题
  3. 要小心的错误
  4. 自我检测
  5. 接下来学什么

追踪表记录每一步之后每个变量的值,让你能证明算法做了什么,而不是猜。题目给出伪代码,要求输出或某一时刻的变量值时,就会用到它。

它建立在定义输入和输出之上,并通向设计带边界情况的选择结构,在那里追踪会显示哪个分支被执行。

怎样建立追踪表?

  1. 每个变量一列,要展示的条件一列,输出也一列。
  2. 在第一行写初始值,在任何循环之前。
  3. **一次一行地执行算法。**变量改变时,在下一行写它的新值。没变的值向下抄。
  4. 在 OUTPUT 执行的那一刻记录输出。
  5. **检查停止点:**知道循环为什么结束。

例题

追踪这个算法并给出输出。

Total ← 0
Count ← 0
FOR N ← 1 TO 5
   IF N MOD 2 = 1 THEN
      Total ← Total + N
      Count ← Count + 1
   ENDIF
NEXT N
OUTPUT Total, Count

**第 1 步,列和初始值:**N、N MOD 2、Total、Count。从 Total = 0 和 Count = 0 开始。

第 2 步,每一轮一行:

NN MOD 2TotalCount
开始00
1111
2011
3142
4042
5193

**第 3 步,输出:**循环在 N = 5 之后结束,所以输出是 9, 3。

**检查:**1 到 5 之间的奇数是 1、3、5。它们的和是 9,共 3 个。这与表格一致。

要小心的错误

一个常见的失误,是跳过起始行和没有变化的行。

**错误的追踪:**学生只写了 N = 1、3、5 的行,并且从 Total = 1 开始。

表格看起来整齐,但它再也无法证明偶数被测试过并被放过。

改正的方法是写上起始行,并且每一轮都写一行,即使数值只是向下抄。如果算法的 IF 条件有错,比如不小心写成 N MOD 2 = 0,缺少的行就会把它藏起来。完整的表格会显示哪一次测试失败。

自我检测

1. 追踪下面的算法并给出输出。

X ← 3
Y ← 10
WHILE Y > X DO
   Y ← Y - X
   X ← X + 1
ENDWHILE
OUTPUT X, Y
Show answer

起始 X = 3,Y = 10。测试 10 > 3 为真:Y = 7,X = 4。测试 7 > 4 为真:Y = 3,X = 5。测试 3 > 5 为假,循环停止。输出 5, 3。

2. 输出是什么?

S ← 0
FOR I ← 2 TO 8 STEP 2
   S ← S + I
NEXT I
OUTPUT S
Show answer

I 取值 2、4、6、8。S 依次是 2、6、12、20。输出 20。

3. 在例题中,把条件改成 N MOD 2 = 0,输出是什么?

Show answer

现在 N = 2 和 N = 4 被计入。Total = 2 + 4 = 6,Count = 2。输出 6, 2。

接下来学什么

下一步,把追踪用到带边界情况的选择结构上。在伪代码追踪训练器里练习小型原创算法,它会显示每个变量的变化和被执行的分支。

追踪的质量取决于背后的细心,老师可以在一对一线上计算机科学补习中逐行检查你的表格。练习题包含若干追踪题。

常见问题

什么是追踪表(trace table)?

追踪表也叫状态表,每个变量和输出各占一列,每一步占一行。它记录算法运行时每个变量的值,让你清楚看到结果是怎样产生的。

每次循环都要写一行吗?

要。会改变变量的循环,每一轮写一行,需要展示的条件也写一行。先写一行初始值。省略行,错误就会藏起来。

条件里的 MOD 是什么意思?

N MOD 2 给出 N 除以 2 的余数。余数为 1 表示 N 是奇数,余数为 0 表示 N 是偶数。像 N MOD 2 = 1 这样的测试,是挑出奇数的标准方法。

更新于:

下一步

如果你的追踪过几行就偏离了真实输出,一对一的老师可以看着你建立表格,指出状态是在哪里开始出错的。

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

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

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

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