跳到正文
IGCSE·Tuition
计算机科学 · 课程

追踪条件控制循环(condition-controlled loop)

有些循环事先并不知道自己会运行几次,这正是它们容易出错的原因。

本页内容
  1. 两种循环分别在什么时候检查条件?
  2. 例题一:WHILE 循环
  3. 例题二:REPEAT 循环
  4. 要留意的错误
  5. 自我检测
  6. 接下来学什么

条件控制循环会一直重复,直到某个条件叫它停止,次数不是事先固定的。Cambridge 风格的伪代码有两种形式:WHILE 配 ENDWHILE,以及 REPEAT 配 UNTIL。

这一课接在追踪计数控制循环之后,属于重复与数组模块。新的想法是:决定循环何时结束的是测试,而不是计数器。

两种循环分别在什么时候检查条件?

WHILE 循环先测试。如果第一次检查时条件就为假,循环体一次都不会运行。

REPEAT 配 UNTIL 的循环先运行循环体,之后才测试。循环体至少运行一次。当 UNTIL 的条件为真时循环停止,这与 WHILE 刚好相反。

每次追踪都加一列记录测试,每检查一次就写下真或假。

例题一:WHILE 循环

Balance ← 100
Years ← 0
WHILE Balance < 150 DO
   Balance ← Balance + 20
   Years ← Years + 1
ENDWHILE
OUTPUT Years, Balance
测试:Balance < 150之后的 Balance之后的 Years
100 < 150 真1201
120 < 150 真1402
140 < 150 真1603
160 < 150 假循环结束

输出是 3, 160。最后一次测试为假,所以没有第四轮。

例题二:REPEAT 循环

N ← 64
Steps ← 0
REPEAT
   N ← N DIV 2
   Steps ← Steps + 1
UNTIL N < 5
OUTPUT Steps, N

DIV 是整数除法(只取整数部分)。

轮次之后的 N之后的 Steps测试:N < 5
1321假,继续
2162假,继续
383假,继续
444真,停止

输出是 4, 4。如果 N 一开始是 3,用同样测试写成 WHILE N >= 5 的 WHILE 循环会运行零次,但这个 REPEAT 循环仍会运行一次,把 N 变成 1。

要留意的错误

常见的失误是把 UNTIL 读成”当……时继续”。

错误答案: “UNTIL N < 5 表示 N 小于 5 时循环继续,所以它马上就停。”

学生把 UNTIL 条件当成了 WHILE 条件。

纠正的方法是把 UNTIL N < 5 读成”一旦 N 小于 5 就停止”。一开始 N 是 64,不小于 5,所以循环继续。在每个 UNTIL 旁边的页边写上”何时停”。

自我检测

1. 最后 X 的值和运行的轮数各是多少?

X ← 5
Passes ← 0
WHILE X > 0 DO
   X ← X - 2
   Passes ← Passes + 1
ENDWHILE
查看答案

X 依次为 5、3、1,然后是 -1。测试结果:5 > 0 真,3 > 0 真,1 > 0 真,-1 > 0 假。循环运行了 3 轮,X 是 -1。

2. 最后 Count 是多少?

Count ← 10
REPEAT
   Count ← Count + 1
UNTIL Count >= 10
查看答案

循环体在任何测试之前先运行一次,所以 Count 变成 11。然后 11 >= 10 为真,循环停止。Count 是 11。

3. 为什么这个循环永远不会结束?

N ← 10
WHILE N <> 0 DO
   N ← N - 3
ENDWHILE
查看答案

N 依次取 10、7、4、1、-2、-5 等。它越过了 0,从来不等于 0,所以 N <> 0 永远为真。改用 WHILE N > 0 就能修好。

接下来学什么

循环总是在边界处以可预测的方式出错,这就是修复差一错误的主题。想一步步看条件如何变化,可以使用伪代码追踪训练器,它会在安全上限处停止失控的循环。

计算机科学补习的老师可以给你几个新的循环来追踪,直到先检查停止条件成为你的第一反应。

常见问题

WHILE 和 REPEAT UNTIL 有什么区别?

WHILE 在每一轮之前检查条件,所以循环体可能一次都不运行。REPEAT UNTIL 在每一轮之后检查,所以循环体至少运行一次。WHILE 在条件为真时继续,REPEAT 则在条件变为真时停止。

循环可以永远运行下去吗?

可以。如果循环体里没有任何语句让变量朝停止条件靠近,循环就永远不会结束。考试有时会要求你找出这种情况。先找到条件中的变量,再检查循环体是否真的朝正确方向改变了它。

我怎么知道该先追踪哪个循环?

看关键字。WHILE 在循环体之前测试,REPEAT 在循环体之后、也就是 UNTIL 处测试。在追踪表上标出测试发生的位置,然后从第一次测试之前的起始值开始。

更新于:

下一步

如果固定次数的循环你能追踪,但一由条件决定就卡住,老师可以和你一起准备新的例子,直到在正确的时刻检查条件成为习惯。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生