伪代码参考
选择合适的循环
何时使用 FOR、WHILE 或 REPEAT UNTIL,嵌套循环如何工作,以及如何确保每个循环都能结束。
更新于 2026年11月2日
该用哪种循环
选错循环类型,或写出无法停止的循环,都是常见的失分原因。几种循环的区别在于何时检查条件。
| 循环 | 何时检查条件 | 至少执行一次? | 适用场景 |
|---|---|---|---|
FOR | 不检查条件:按范围计数 | 是,除非范围为空 | 已知重复次数 |
WHILE | 每轮开始前 | 否 | 循环可能一次都不需要执行 |
REPEAT ... UNTIL | 每轮结束后 | 是 | 循环体必须执行一次,例如请求输入 |
用 FOR 计数
上下界都包括在内,所以 FOR Count <- 1 TO 5 会运行五次。加上 STEP 可以改变步长,也可以倒数:FOR Count <- 10 TO 0 STEP -2。
伪代码
DECLARE Count : INTEGER
DECLARE Total : INTEGER
Total <- 0
FOR Count <- 1 TO 5
Total <- Total + Count
NEXT Count
OUTPUT "Total = ", Total跟踪:每轮之后的 Total
| Count | Total |
|---|---|
| – | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 15 |
步骤 1 / 6
用 WHILE 在条件成立时重复
每轮开始前都会检查条件。如果开始时条件为 FALSE,循环体一次也不执行。循环体内必须有内容发生变化,条件才可能变为 FALSE。
伪代码
DECLARE Number : INTEGER
INPUT Number
WHILE Number > 9 DO
Number <- Number - 9
ENDWHILE
OUTPUT Number输入 28 时的跟踪
| Number | Number > 9 | 执行结果 |
|---|---|---|
| 28 | TRUE | 减去 9 |
| 19 | TRUE | 减去 9 |
| 10 | TRUE | 减去 9 |
| 1 | FALSE | 退出并输出 1 |
步骤 1 / 4
用 REPEAT UNTIL 校验输入
先执行循环体,再测试条件,所以用户至少会被询问一次。把 UNTIL 后的条件写成“有效”或“已完成”的状态,而不是无效的状态。
如果第一次输入错误,循环会再次询问;如果输入正确,循环执行一轮后就结束。
伪代码
DECLARE Password : STRING
REPEAT
OUTPUT "Enter password"
INPUT Password
UNTIL Password = "Secret"用嵌套循环处理表格和网格
在一个循环中放入另一个循环,可以处理行和列,例如二维数组。外层循环每执行一轮,内层循环都会完整执行一遍。在内层循环开始前,重置每行的累加值。
伪代码
DECLARE Row : INTEGER
DECLARE Column : INTEGER
DECLARE RowTotal : INTEGER
DECLARE GrandTotal : INTEGER
DECLARE Amount : ARRAY[1:3, 1:4] OF INTEGER
FOR Row <- 1 TO 3
FOR Column <- 1 TO 4
Amount[Row, Column] <- Row * Column
NEXT Column
NEXT Row
GrandTotal <- 0
FOR Row <- 1 TO 3
RowTotal <- 0
FOR Column <- 1 TO 4
RowTotal <- RowTotal + Amount[Row, Column]
NEXT Column
OUTPUT "Row ", Row, " total = ", RowTotal
GrandTotal <- GrandTotal + RowTotal
NEXT Row
OUTPUT "Grand total = ", GrandTotal考试提示: 运行一下:三行的总和分别是 10、20 和 30,总计为 60。
确保每个循环都能结束
运行循环之前,先用下面的问题检查一遍。
- 每轮循环是否都会改变条件所依赖的值?
- 条件最终能否变为
FALSE(WHILE)或TRUE(UNTIL)? - 循环边界是否正确,没有差一错误?
- 是否在循环前设置了计数器和累加值?
注意: 如果程序一直不结束,通常是卡在了某个循环里。先停止程序,再跟踪该循环两三轮内条件的变化。