三种循环结构都需掌握
技术与开发
学习内容:Pascal语言
学习进度:第六课
上手难度:★★★★
考试类型:二级Delphi
循环结构是Delphi二级考试的重中之重,也是Pascal语言的难点之一。今年4月等级考试中许多考生在此知识点上都失分了,考生对循环结构的理解和掌握程度是能否顺利考试过关的关键。本文对循环结构的难点进行剖析,希望考生能吃透循环结构,在此知识点上尽量少失分或不失分。
一、最常用的for循环
1.了解for循环的基本用法
循环就是重复执行语句。在 Pascal语言中,常见的循环语句有for语句、while语句和repeat语句,下面我们先来学习for语句:
for循环的一般格式为:
for <循环变量>:=<初值> to <终值> do
<一组语句>
在for循环结构中,for、to、do为关键字,do后面的一组语句为循环体,如果语句超过一条,需要使用begin end结构。循环变量为一个计数器变量,初值为计数器的起始值,终值为计数器的终止值。
在循环执行之前,先根据初、终值表达式计算出初、终值,并据此来决定循环的次数及循环变量的取值。在循环体中对初、终值表达式的改变(循环变量自动加1或者减1)不会影响循环次数及循环变量的取值。for 语句的执行过程是:开始时,循环变量等于初值,如果在初值后面的保留字是to,而且循环变量小于或等于终值,则执行do后面的语句一次,同时,循环变量的值加1直到大于终值。
考生使用for语句要注意下面几点:第一,循环变量的初值、终值可以是表达式,也可以是常量或变量;第二,循环变量必须与初值、终值的数据类型相同,并且只能是有序类型(如整数类型、布尔类型、字符类型、枚举类型、子界类型)。不能是无序类型(如实数类型);第三,循环体可以是任何单个语句或者由多个语句组成的复合语句;第四,在循环体中,不允许用任何语句来改变循环变量的值。
小提示:循环变量每次进行加1操作,因此循环初值应该小于终值。如果想对循环变量每次进行减1操作,则可以用downto来代替to,比如for i:=100 downto 1 do//此时初值大于终值,每执行一次do后面的语句循环变量的值减1直到小于终值。
2.理解for循环的嵌套
在考试中,for循环嵌套经常和break、continue、exit三个语句配合使用来考查考生对for循环的理解能力,很多考生不理解这这三个语句的含义非常容易失分,这是for循环的考试重点之一。
break语句的作用是使程序的执行流程立即跳到循环的结尾;continue语句的作用是结束本次循环的所有操作,开始下一次循环;exit语句的作用是退出当前代码块的执行。下面来看一个例子:
for i:=1 to 50 do//i为循环变量,此处循环
begin
for j:=1 to i do
begin
sum:=sum+1;
if sum>3 then
break;//一旦sum大于3后,程序跳到j循环的结尾,退出j循环并执行sum:=sum+3;
//continue;// 一旦sum大于3后,程序结束本次j循环,开始下一次j循环,执行sum:=sum+1;
//exit;// 一旦sum大于3后,本段代码块全部结束,直接跳到最后一个end;
二、while…do循环基本用法
while…do循环用于“当满足某一条件时进行循环”的情况,它属于“当型循环”。while…do循环的一般形式为:
while 布尔表达式 do
循环体;
while保留字后面必须跟一个布尔表达式。第一次执行循环时,程序首先判断布尔表达式的值,如果该表达式的结果为真,循环被执行,否则退出循环执行while语句后面的程序。在while…do循环结构中,考生需要注意两点:第一,循环体有可能一次都不被执行,第二,循环体中必须有改变布尔表达式的操作,否则该循环就是一个死循环。
三、repeat… until循环基本用法
repeat…until循环最主要的优点是不必事先设定循环次数,只要until语句后面的布尔表达式的值不为真,就会继续执行循环体。repeat…until循环的特点是先执行后判断,其一般形式是:
repeat
语句
until布尔表达式;
在循环体中必须包括有改变布尔表达式值的语句,否则循环将一直执行下去而无法结束程序。
小提示:while…do 循环和repeat…until循环的不同点在于repeat…until循环的代码至少要执行一次,while…do 循环则可能一次都不执行;repeat…until循环的条件是反向的条件,只要不满足这个条件,循环就执行;当条件满足时,循环终止。这正好与while…do 循环相反,while…do循环当条件是真值时才执行。
读者反馈
读者 花之舞:请教一下,使用case语句时,如果表达式结果1 对应的语句有多个,应该怎么处理?
小新解答:这种情况下必须添加begin end结构,否则编译器将报错。多条语句在begin和end之间,每一条语句用分号分开,注意end后面也必须要用分号。