浅谈DO…Loop不同循环结构语句间的区别

2010-09-25 02:12耿梅英
太原城市职业技术学院学报 2010年9期
关键词:子句流程图语句

耿梅英

浅谈DO…Loop不同循环结构语句间的区别

耿梅英

(徐州市广播电视大学铜山分校,江苏徐州221008)

Visual Basic程序设计教程(简称VB)是目前应用最广泛的、易学易用的、面向对象的开发工具之一,是大中专院校计算机基础课程普遍采用的教材。Do…Loop循环结构语句是VB课程中最通用的、最有用的一种循环结构,是用来描述有规律地重复执行某一程序段,其作用是简化程序的设计,提高编程效率。笔者在教学过程中发现很多初学者搞不清DO…Loop不同循环结构语句间的区别,这在一定程度上影响了学生的编程兴趣。

Visual Basic程序设计;Do…Loop循环结构语句;程序流程图

一、DO…Loop循环结构语句的几种格式

循环结构是程序的基本算法结构之一。所谓循环,就是重复地执行某些操作。VB提供了相应的语句用于实现各种类型的循环,其中Do…Loop循环结构语句就是各种类型的循环之一。Do…Loop循环结构语句只要判断某个条件满足要求,就会重复执行循环体,它既可以在循环的顶部判断条件,也可以在循环的底部检查条件,这样Do…Loop循环结构语句就演化出以下四种格式:

格式一格式二格式三格式四DoWhile <条件> DoUntil <条件>DoDo [<语句组1>][<语句组1>][<语句组1>][<语句组1>] [ExitDo][ExitDo][ExitDo][ExitDo] [<语句组2>][<语句组2>][<语句组2>][<语句组2>] LoopLoopLoopWhile <条件> LoopUntil <条件>

以上四种格式的主要区别:一是<条件>的书写位置不同。<条件>可以写在起始语句Do之后,也可以写在终止语句Loop之后。二是<条件>之前的关键字不一样。可以是While,也可以是Until。

根据以上格式的区别,可以把四种结构划分为两种循环类型:格式一和格式二是在循环的起始语句Do之后开始判断条件的,属于当型循环;格式三和格式四是在循环的终止语句Loop后才判断条件,属于直到型循环。

二、DO…Loop不同循环结构语句间功能上的区别

1.当型循环

当型循环是先判断条件,后决定是否执行循环体,因此循环可能一次都不执行。它有两种程序流程图:

图1

图2

图1 Do While<条件>…Loop语句的执行过程图2 Do Until<条件>…Loop语句的执行过程

从程序流程图中我们不难看出,Do While<条件>…Loop循环结构语句和Do Until<条件>…Loop循环结构语句都在循环顶部判断进入循环的条件,Do while<条件>…Loop循环结构语句判断条件是否为真,DoUntil<条件>…Loop循环结构语句判断条件是否为假,如果循环的条件已经满足,就执行循环体,如果条件不满足,则循环体内的语句不再执行。

下面举例来说明两种当型循环的功能不同,编写程序计算1+2+3+……+100的和。首先用DoWhile<条件>…Loop循环结构语句来编写程序,程序如下:

程序1 Private SubCommand1_Click()

DimIAs Integer,SumAs Integer

I=0:Sum=0

Dowhile I<100

I=I+1:Sum=Sum+I

Loop

Text1.Text=Sum

EndSub

其次用DoUntil<条件>…Loop循环结构语句来编写程序,程序如下:

程序2 Private SubCommand1_Click()

DimIAs Integer,SumAs Integer

I=0:Sum=0

DoUntil I>99

I=I+1:Sum=Sum+I

Loop

Text1.Text=Sum

EndSub

在VB集成开发用户环境下运行上面两道程序都能得到正确的结果,1到100的和是5050。那么当型循环的两种结构语句功能上究竟有什么不同呢?首先来分析一下Do While I<100…Loop循环结构语句,循环变量I的初值被赋值为0,与条件给出100相比较,结果为TRUE,执行循环体,循环变量I的值自增为1,Sum的值也由0增加为1,这样完成了一次循环,依此类推循环下去,当循环变量I的值自增到99时,与条件给出100相比较,结果为TRUE,仍执行循环体,循环变量I的值自增为100,与条件给出100相比较,结果为FALSE,循环体内的语句不再执行,而去执行LOOP下一语句,在文本框中输出1到100的和。

其次分析一下Do Until I>99…Loop循环结构语句,循环变量I的初值被赋值为0,与条件给出99相比较,结果为FALSE,执行循环体,循环变量I的值自增为1,Sum的值也由0增加为1,这样完成了一次循环,依此类推循环下去,当循环变量I的值自增到98时,与条件给出99相比较,结果为FALSE,仍执行循环体,I的值自增为99,与条件给出99相比较,结果仍为FALSE,仍执行循环体,I的值自增为100,与条件给出99相比较,结果为TRUE,循环体内的语句不再执行,而去执行LOOP下一语句,在文本框中输出1到100的和。

2.直到型循环

直到型循环至少要先执行一次循环体,然后再判断循环条件,因此,对于可能在循环开始时循环条件就不满足要求的情况下,应该选择使用当型循环。大多数情况下,这两类循环是可以互相代替的。直到型循环也有两种程序流程图:

图3

图4

图3 Do…Loop While<条件>语句的执行过程图4 Do…Loop Until<条件>语句的执行过程

从上面的程序流程图我们很容易看出,Do…Loop while<条件>循环结构语句和Do…Loop Until<条件>循环结构语句是在循环的底部判断退出循环的条件;与当型循环的功能相同的是,Do…Loop while<条件>循环结构语句判断条件是否为真,Do…Loop Until<条件>循环结构语句判断条件是否为假,如果循环的条件已经满足,就执行循环体;如果条件不满足,则循环体内的语句不再执行。与当型循环不同的是,直到型循环是无条件地多执行循环体一次,然后再判断条件是否满足。

下面举例来说明两种直到型循环功能上的不同,同样是计算1到100的和。首先用Do…LoopWhile<条件>循环结构语句来编写程序,程序如下:

程序3 Private SubCommand1_Click()

DimIAs Integer,SumAs Integer

I=0:Sum=0

Do

I=I+1:Sum=Sum+I

Loopwhile I<100

Text1.Text=Sum

EndSub

其次用Do…LoopUntil<条件>循环结构语句来编写程序,程序如下:

程序4 Private SubCommand1_Click()

DimIAs Integer,SumAs Integer

I=0:Sum=0

Do

I=I+1:Sum=Sum+I

LoopUntil I>99

Text1.Text=Sum

EndSub

我们仔细比较这四道程序,很容易发现只要把程序1和程序2的判断条件分别由起始语句DO之后转移到终止语句LOOP之后,就分别变成了程序3和程序4。程序3和程序4的执行过程分别与程序1和程序2类似,只是无条件地都多执行循环体一次。

这四道程序都能完成1到100的和,功能一样,但采用的语句格式却不同,使用While I<100的条件时,当指定的条件为True时,执行循环体中的语句组,而当条件为False时则退出循环,执行循环终止语句Loop之后的语句。使用Until I>99的条件时,当指定的条件为False时,执行循环体中的语句组,而当条件为True时则退出循环,执行循环终止语句Loop之后的语句。因此使用While条件子句和使用Until条件子句的主要区别是:While<条件>子句表示当条件成立时执行循环体,Until<条件>子句则是在条件不成立时执行循环体。

三、Exit Do语句的作用

当省略了While|Until条件子句,条件等价于While True,即循环结构仅由Do循环体Loop构成,表示无条件地执行循环体,这时循环体内应该有ExitDo语句,否则为死循环;ExitDo语句用于当条件成立时强制退出循环体,执行Loop的下一语句。必要时,循环体中可以放置多条Exit Do语句,该语句一般放在某条件结构中,使用形式为:If<条件>ThenExitDo。当然,循环体中也可以没有ExitDo语句。

下面程序就使用了ExitDo语句来强制退出循环体。

Private SubForm_Click()

DimXAs Integer,YAs Integer

X=5:Y=5

DoWhile X+Y<25

Y=Y+5:X=X+2:PrintY;

IfY>14 ThenExitDo

Loop

PrintY

EndSub

H04

A

1673-0046(2010)9-0159-02

猜你喜欢
子句流程图语句
命题逻辑中一类扩展子句消去方法
命题逻辑可满足性问题求解器的新型预处理子句消去方法
重点:语句衔接
西夏语的副词子句
专利申请审批流程图
专利申请审批流程图
命题逻辑的子句集中文字的分类
宁海县村级权力清单36条
如何搞定语句衔接题
《天津医药》稿件处理流程图