赋值(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
| 行 | A | B |
|---|---|---|
| A ← 4 | 4 | |
| B ← 7 | 4 | 7 |
| A ← A + B | 11 | 7 |
| B ← A - B | 11 | 4 |
| A ← A - B | 7 | 4 |
第 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。比较绝不会改变变量。
接下来学什么
现在把同样细心的读法用到输入检查上:描述输入验证。你可以在受限伪代码追踪训练器里逐步运行这个交换算法。
如果追踪表还是慢或容易出错,老师可以在线上一对一计算机科学补习中陪你检查自己过去的错误。