这套练习涵盖重复与数组中的技能:追踪计数控制和条件控制循环,修复差一错误,以及把循环用在数组上。每题先在纸上作答,打开答案之前先写好追踪表。
第 7 到 11 题使用数组 Temp[1:6],它存有读数 28, 31, 27, 33, 30, 33。把做错的题记到错题记录中。
热身:计数控制循环
第 1 题. 输出是什么?
FOR i ← 1 TO 4
OUTPUT i * i
NEXT i
查看答案
i 取 1、2、3、4。输出是 1, 4, 9, 16。
第 2 题. 循环运行几次?最后 Sum 是多少?
Sum ← 0
FOR i ← 2 TO 10 STEP 2
Sum ← Sum + i
NEXT i
查看答案
i 取 2、4、6、8、10,所以循环运行 5 次。Sum 依次为 2、6、12、20、30。最终值是 30。
条件控制循环
第 3 题. 最后 N 和 Count 各是多少?
N ← 100
Count ← 0
WHILE N > 10 DO
N ← N DIV 3
Count ← Count + 1
ENDWHILE
查看答案
| 测试 | 之后的 N | 之后的 Count |
|---|---|---|
| 100 > 10 真 | 33 | 1 |
| 33 > 10 真 | 11 | 2 |
| 11 > 10 真 | 3 | 3 |
| 3 > 10 假 | 结束 |
N 是 3,Count 是 3。
第 4 题. 循环结束时 X 的值是多少?运行了几轮?
X ← 1
REPEAT
X ← X * 2
UNTIL X > 50
查看答案
X 依次变成 2、4、8、16、32(都不大于 50,所以继续),然后是 64(64 > 50,停止)。共 6 轮,X 是 64。
修复与找错
第 5 题. 任务是输出 1 到 8,但这段代码只输出 1 到 7。请修复。
Count ← 1
WHILE Count < 8 DO
OUTPUT Count
Count ← Count + 1
ENDWHILE
查看答案
当 Count 是 8 时,8 < 8 为假,8 永远不会被输出。把条件改成 WHILE Count <= 8。这样 Count 从 1 到 8 都通过测试,共输出 8 个值。
第 6 题. 这个循环永远不会结束。请解释原因并修复,然后写出修复后 N 的最终值和运行轮数。
N ← 10
WHILE N <> 0 DO
N ← N - 3
ENDWHILE
查看答案
N 依次取 7、4、1、-2、-5 等。它越过了 0,所以 N <> 0 永远为真。修复:WHILE N > 0。
追踪:10 > 0 真(N = 7),7 > 0 真(N = 4),4 > 0 真(N = 1),1 > 0 真(N = -2),-2 > 0 假。共 4 轮,N 是 -2。
数组与循环
第 7 题. 这段代码统计有多少个读数高于 30。写出输出。
Hot ← 0
FOR i ← 1 TO 6
IF Temp[i] > 30
THEN
Hot ← Hot + 1
ENDIF
NEXT i
OUTPUT Hot
查看答案
高于 30 的读数是 31、33 和 33。30 并不高于 30。Hot 是 3。
第 8 题. 追踪这段代码并写出输出。
Max ← Temp[1]
MaxPos ← 1
FOR i ← 2 TO 6
IF Temp[i] > Max
THEN
Max ← Temp[i]
MaxPos ← i
ENDIF
NEXT i
OUTPUT MaxPos, Max
查看答案
| i | Temp[i] | 测试 | Max | MaxPos |
|---|---|---|---|---|
| 开始 | 28 | 1 | ||
| 2 | 31 | 31 > 28 真 | 31 | 2 |
| 3 | 27 | 假 | 31 | 2 |
| 4 | 33 | 33 > 31 真 | 33 | 4 |
| 5 | 30 | 假 | 33 | 4 |
| 6 | 33 | 33 > 33 假 | 33 | 4 |
输出是 4, 33。
第 9 题. 编写伪代码,输出六个读数的总和与平均值。然后写出两个值,平均值保留 1 位小数。
查看答案
Total ← 0
FOR i ← 1 TO 6
Total ← Total + Temp[i]
NEXT i
Average ← Total / 6
OUTPUT Total, Average
每一轮之后的 Total:28、59、86、119、149、182。总和是 182。平均值是 182 / 6 = 30.333,所以保留 1 位小数是 30.3。
第 10 题. Temp[Temp[1] - 25] 是多少?
查看答案
Temp[1] 是 28。28 - 25 = 3。Temp[3] 是 27。
第 11 题. 库存数组 Stock[1:4] 一开始是 5, 0, 3, 0。写出执行这段代码之后它的内容。
FOR i ← 1 TO 4
IF Stock[i] = 0
THEN
Stock[i] ← 10
ENDIF
NEXT i
查看答案
位置 2 和 4 存的是 0,被替换。数组变成 5, 10, 3, 10。
如果你做错了
- 轮数错误(第 1、2、4、5 题): 回顾追踪计数控制循环和追踪条件控制循环。
- 循环不结束,或早一轮、晚一轮结束(第 5、6 题): 去看修复差一错误。
- 最大值或位置错误(第 8 题): 阅读在给定列表中找最大值。
- 下标与值混淆(第 9、10、11 题): 学习使用数组下标,不把它与值混淆。
这些题都可以在伪代码追踪训练器或 Python 推理沙盒中逐步运行。如果某一类错误反复出现,我们的一对一线上计算机科学补习可以专门针对这项技能。