文档

伪代码参考

选择合适的循环

何时使用 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
CountTotal
–0
11
23
36
410
515
步骤 1 / 6

用 WHILE 在条件成立时重复

每轮开始前都会检查条件。如果开始时条件为 FALSE,循环体一次也不执行。循环体内必须有内容发生变化,条件才可能变为 FALSE。

伪代码
DECLARE Number : INTEGER
INPUT Number

WHILE Number > 9 DO
    Number <- Number - 9
ENDWHILE

OUTPUT Number
输入 28 时的跟踪
NumberNumber > 9执行结果
28TRUE减去 9
19TRUE减去 9
10TRUE减去 9
1FALSE退出并输出 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)?
  • 循环边界是否正确,没有差一错误?
  • 是否在循环前设置了计数器和累加值?

注意: 如果程序一直不结束,通常是卡在了某个循环里。先停止程序,再跟踪该循环两三轮内条件的变化。