本篇主要内容如下:
“控制流”(Flow of Control)是计算机科学中一个耳熟能详的术语,它指的是程序中语句的执行顺序。在此之前,我们只接触过“顺序控制流”。简单来说,顺序控制流就是每条语句从第一条开始到最后一条结束,依次且仅执行一次。这种模式固然简单明了,但仅靠它无法实现复杂的程序逻辑。
为了丰富程序的执行逻辑,Pascal 语言提供了一系列控制结构。这些特殊构造允许程序以非顺序的方式执行语句。Pascal 中的控制结构主要分为三类:条件结构、循环结构和分支结构(Case)。
在讲解这些结构的含义及用法之前,我们需要先掌握一些基础知识:语句和布尔表达式。
语句
Lazarus 实战入门(15):块语句(Block Statements)
语句是 Pascal 程序执行的基本单元。在最基础的层面上,语句分为两种:过程调用和赋值语句。
此前我们已经接触过内置过程(如 WriteLn)。所谓过程调用,就是使用这些过程的动作,例如:
WriteLn('The sum is ', 0);
赋值语句用于将某个值赋给变量,其格式为:
<变量> := <表达式>;
其中,“表达式”会计算出一个与变量数据类型相匹配的值。例如,若变量 Score 和 Maximum 均为整数类型(Integer),则以下赋值语句都是合法的:
Score := 10;
Maximum := 32 * Score div 17;
Score := Score + 10;
Maximum := Succ(Maximum);
复合语句(块)
除了一个特例之外,我们即将学习的所有控制结构默认都只执行一条语句。听起来这似乎很不方便——如果只能写一句过程调用或一句赋值,那限制也太大了。但实际上并非如此。Pascal 允许将多条语句组合成一个整体,视为“单条语句”来处理:
begin
<语句1>;
<语句2>;
...
<语句n>
end;
这种结构被称为块(Block)或复合语句(Compound Statement)。在任何可以使用简单语句的地方,都可以使用复合语句;甚至可以在一个复合语句内部嵌套另一个复合语句。正如你稍后将看到的,复合语句最常与控制结构配合使用。
布尔表达式
布尔表达式返回的是布尔值,即 True(真)或 False(假)。
假设整数变量 Score 和 Maximum 已被赋值,例如 Score = 10 且 Maximum = 0。我们可以构建如下布尔表达式,其结果如下表所示:
| 表达式 |
结果 |
含义 |
Score > Maximum |
True |
大于 |
Score = Maximum |
False |
等于 |
Score < Maximum |
False |
小于 |
Score >= Maximum |
True |
大于或等于 |
Score <= Maximum |
False |
小于或等于 |
Score <> Maximum |
True |
不等于 |
在 Pascal 程序中,上述表达式的计算结果确实是预定义布尔类型(Boolean)的两个值之一:True 或 False。我们可以定义一个布尔变量 NewMax,然后进行如下赋值:
NewMax := (Score > Maximum);
根据 Score 和 Maximum 的当前值,NewMax 会被赋值为 True 或 False。以上述数值为例,NewMax 的值将为 True。
布尔运算符
通过使用布尔运算符 and、xor、or 和 not,可以构建更复杂的表达式。
not:取反运算,将 True 变为 False,反之亦然。
and、xor、or:用于组合两个表达式,生成一个新的布尔表达式。
利用这些运算符,可以写出如下表达式:
(Score > Maximum) or (Score > 30000)
(Score > 10000) and (Score <= 20000)
not (NewMax or (Maximum = 0))
假设 Score、Maximum 和 NewMax 的值如上所述(分别为 10、0 和 True),那么第一个表达式的结果为 True,而后两个表达式的结果均为 False。
掌握了以上基础知识,我们可以正式进入控制结构的学习了。