计数控制循环会把循环体重复固定的次数,次数在循环开始前就已决定。在 Cambridge 风格的伪代码中,它就是以 NEXT 结束的 FOR 循环。题目通常要求你追踪它,也就是写下每一轮每个变量的值。
这一课是重复与数组模块的开头。这项技能会在求和、查找和之后每一道数组题中反复出现。
FOR 循环如何运作?
FOR Count ← 1 TO 5 这一行做了三件事:先把 Count 设为 1,执行循环体,然后给 Count 加 1,再执行循环体。当 Count 为 5 的那一轮结束后循环停止,因为结束值也包括在内。
每次追踪都用这套步骤:
- 找出循环之前已存在的变量,把它们的起始值写在第一行。
- 每一轮写一行,循环变量放在最前面。
- 按循环体中各行出现的顺序更新每个变量。
- 在
OUTPUT那一行执行的位置写下输出,而不是写在最后。
例题详解
追踪下面的算法。
Total ← 0
FOR Count ← 1 TO 5
Total ← Total + Count * 2
NEXT Count
OUTPUT Total
Total 从 0 开始。每一轮加上 Count * 2,乘法先于加法。
| Count | Count * 2 | 该轮结束后的 Total |
|---|---|---|
| 1 | 2 | 2 |
| 2 | 4 | 6 |
| 3 | 6 | 12 |
| 4 | 8 | 20 |
| 5 | 10 | 30 |
循环运行了五次,输出是 30。检查:2 + 4 + 6 + 8 + 10 = 30。
循环也可以用负的步长向下数。
FOR k ← 10 TO 1 STEP -3
OUTPUT k
NEXT k
取值为 10、7、4 和 1。下一个值是 -2,已低于结束值 1,所以循环停止。它运行四次。
要留意的错误
常见的失误是以为结束值不包括在内。
错误答案: “FOR Count ← 1 TO 5 运行四次,所以 Total 是 20。”
学生数的是 1 和 5 之间的间隔,而不是 1、2、3、4、5 这几个值。
纠正的方法是把循环变量的值一个个列出来再数。另一个好习惯是先写出追踪表的各行,再做计算。表格能让漏掉的一行一目了然。
自我检测
1. FOR i ← 3 TO 7 运行几次?i 的最后一个值是多少?
显示答案
取值为 3、4、5、6、7,所以运行 5 次,最后一个值是 7。检查:7 - 3 + 1 = 5。
2. 输出是什么?
Result ← 1
FOR n ← 1 TO 4
Result ← Result * n
NEXT n
OUTPUT Result
显示答案
Result 开始时是 1,然后 1 × 1 = 1,1 × 2 = 2,2 × 3 = 6,6 × 4 = 24。输出是 24。
3. 一个循环以 Sum ← 0 开始,执行 FOR j ← 2 TO 8 STEP 2,循环体为 Sum ← Sum + j。最后 Sum 是多少?
显示答案
j 的取值是 2、4、6 和 8。总和是 2 + 4 + 6 + 8 = 20。
接下来学什么
接着看由条件而不是次数来决定停止的循环:追踪条件控制循环。你可以用伪代码追踪训练器逐步练习小循环,或在 Python 推理沙盒中试同样的想法。
如果你的分数总是丢在追踪这一步,一对一线上计算机科学补习的老师可以和你一起检查你自己的追踪表,找出跑偏的那一行。