精研两种选择结构

技术与开发

学习内容:Pascal语言

学习进度:第五课

上手难度:★★★

考试类型:二级Delphi

选择结构是考试重点之一,考生必须熟练掌握实现选择结构的两种控制语句:1.if语句以及if else的嵌套;2.case语句的语法构成及细节。在程序阅读题中,if语句和case语句的嵌套考查得最多。考生只有吃透两种语句的嵌套才能在考试中做到胸有成竹,下面我们重点讲解if语句和case语句学习中需要注意的细节。

一、用if语句编写选择结构

1.掌握if then语句的用法

结构化程序设计中常见的结构有三类:顺序结构、选择结构、循环结构。通过检验某个条件表达式是否成立来决定程序执行的方向,这种控制结构称为选择结构(Selection structure)。

ObjectPascal语言提供了两种实现选择结构的条件控制语句(if语句和case语句),条件控制语句首先判断条件表达式(或逻辑表达式)是否成立,然后决定某些语句是否要执行。首先我们学习if语句。if语句由一个布尔表达式和两个供选择的操作序列组成。运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。典型的If语句形式为:

if <布尔表达式> then <语句>;

if <布尔表达式> then <语句1> else <语句2>;

当布尔表达式的值为真,则执行then后面的语句,值为假时有两种情况:要么什么也不做,要么执行else后面的语句。如果一条if语句有多个条件,需要将这多个条件分别用小括号括起来,比如:

if (x=3) and (y=4) then a=x+y;//正确

if (x=3 and y=4) then a=x+y;//错误

语句序列如果多余一条,必须添加“begin end”结构,end之前的最后一条语句末尾分号不是必需的,保留或者不保留都没有错。

小提示:if…then…else结构是一个连续的整体,所以分号只能出现在整个语句的最后。因此else前面语句结尾不能加分号,如果在else前添加了分号,则在编译的时候就会认为if 语句到此结束,而把else当作另一句的开头,输出错误信息。

2.重点关注if语句嵌套

if语句嵌套是用if语句编写选择结构的难点。一个if语句完全嵌入在另一个if语句中,构成了紧跟在then或else后面的语句的一部分,这种嵌套可以是多层的。但是考生一定要仔细,在嵌套时有可能会出现二义性,例如:

if 布尔表达式1 then

if 布尔表达式2 then

语句1

else

语句2

此处有两个if语句,仅有一个else语句,那么else语句到底和哪一个if语句配对呢?这里有两种理解,其结果肯定是不一样的,为了避免这种混乱情况的出现, Pascal语言规定else总是与同一层中前面最靠近它的、还没有else语句与之相匹配的if语句匹配。在考题中,为了迷惑考生,试题可能不加入begin和end,考生一定要理解else和哪一个if配对才能读懂程序,最好的办法是自己加入begin和end来增强程序的可读性。

二、用Case语句编写选择结构

1.Case语句的使用方法

case语句是一种可读性很强的条件控制语句,当程序中决定分支执行顺序的布尔表达式经常用到简单数据类型中的有序类型(如字符型或整型)且分支比较多时,就可以用case语句代替if语句来完成对条件语句的控制,case语句可以为多条分支提供一种逻辑清楚的结构。case语句用来在多个可能的情况中选择一个条件,而不再需要用一大堆if …else结构。case语句由一个表达式和众多可选择的操作序列组成,其形式为:

case 表达式 of

值表1:语句1;

值表2:语句2;

……

值表n:语句n;

else 语句 n //可选项当所有情况都不能与值表匹配时,就执行else后面的语句

end;

2.理解case语句学习的难点

第一,case语句表达式的值只能是有序的数据类型,因为只有有序的数据才有一个整数序号一一对应,因此实数、字符串等无序的数据类型就不能作为case语句的表达式。 第二,case语句中列出的值表必须是相异的,不能有重复,并且对列出的常量在类型上必须与表达式兼容。第三,case语句可以嵌套,但要注意每个case语句必须有一个end相配套。第四,在列出各种情况时,最好按照从小到大的顺序排列,这样能使编译器优化,否则每次都要计算一遍,影响效率。第五,在else前面的语句末尾可以有分号,这是和if语句不同的,case语句最后有一个end作为结束符,不能省略。

读者反馈

读者 王东:在Pascal的表达式中,“+”、“-”运算符除了做加减法之外,还有什么其他作用吗?

小新点评:“+”、“-”运算符还有其他作用。比如它们可以作为单目运算符放在浮点数和整数前;“+”运算符可以用在字符串表达式中,将两个字符串连在一起;“+”、“-”运算符还可以用在集合运算表达式中。