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

分清赋值与比较的追踪

一行伪代码可能看起来像数学课上的算式,追踪答案就是从这里开始出错的。

本页内容
  1. 每一行该怎么读?
  2. 示例讲解
  3. 要留意的错误
  4. 自我检查
  5. 接下来学什么

赋值(assignment)把值存入变量。比较(comparison)提出一个问题,得到 TRUE 或 FALSE。在追踪中,赋值会改变某一列,比较只会改变你要走的路径。

这项技能属于适用大纲的伪代码,接在记法课之后,也是你会遇到的每一道追踪表题的基础。

每一行该怎么读?

用两个问题。对于 A ← A + B 这样的赋值:“右边当前的值是多少?”和“哪个变量接收答案?”右边先算,用的是变量此刻持有的值。

对于 IF A = B THEN 这样的比较:“此刻是 TRUE 还是 FALSE?”然后走对应的分支。没有任何变量改变。

追踪表每个变量一列,每执行一行记一行,这样就不会跳步。

示例讲解

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

A ← 4
B ← 7
A ← A + B
B ← A - B
A ← A - B
OUTPUT A, B
行AB
A ← 44
B ← 747
A ← A + B117
B ← A - B114
A ← A - B74

第 3 行:A 变成 4 + 7 = 11。第 4 行:B 变成 11 - 7 = 4。

第 5 行:A 变成 11 - 4 = 7。输出是 7 4,两个值交换了。

用起始值再核对一次:A 开始是 4,B 开始是 7,结束时分别是 7 和 4。这个算法不用第三个变量就完成了交换。

要留意的错误

常见失误是用了旧值而不是最新的值,或者以为比较会改变变量。

错误的追踪: 在 B ← A - B 时,学生用了 A = 4(旧值),写成 B = 4 - 7 = -3。

第 3 行已经把 A 改成 11,所以 A 当前的值是 11。

纠正的办法是读上一行,而不是起始值。每一列永远取最新的值。第二种失误是在题目需要判断 Score = 50 的地方写成 Score ← 50,这会改变变量,而不是检查它。

自我检查

1. 追踪:X ← 10、Y ← X、X ← X * 2、OUTPUT Y。

显示答案

Y 在赋值时得到 10。之后改变 X 不会改变 Y。输出:10。

2. Count ← 5 之后再运行两次 Count ← Count - 1,Count 是多少?

显示答案

5 - 1 = 4,再 4 - 1 = 3。Count 是 3。

3. Score 为 50 时,Score = 50 的结果是什么?Score 会改变吗?

显示答案

结果是 TRUE,Score 仍是 50。比较绝不会改变变量。

接下来学什么

现在把同样细心的读法用到输入检查上:描述输入验证。你可以在受限伪代码追踪训练器里逐步运行这个交换算法。

如果追踪表还是慢或容易出错,老师可以在线上一对一计算机科学补习中陪你检查自己过去的错误。

常见问题

为什么 Total ← Total + 1 不是一个不成立的等式?

箭头是一条指令,不是关于相等的陈述。它的意思是:先用当前的值算出右边,再把结果存入左边的变量。这一行运行后,Total 就有了新值,比之前大 1。

追踪表里没有变化的变量要怎么写?

把值带到下一行,或者只有在老师接受这种写法时才留空。重新写一遍值最稳妥,因为这说明变量仍然存在,没有被重置。

比较会产生什么结果?

像 Score = 50 这样的比较会得到 TRUE 或 FALSE,不会改变任何变量。外面的 IF 或 WHILE 用这个 TRUE 或 FALSE 来决定程序走哪条路。

更新于:

下一步

如果你的追踪表总是得出错误的值,一对一老师可以看你逐行推演,抓住你把更新读成等式的那一刻。

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

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

家长:在这里咨询

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