8.3.4 循环语句

8.3.4 循环语句

顺序、分支结构在程序执行时,每个语句只执行一次,循环结构则能够使某些语句或程序段重复执行若干次。每个循环都是由循环初始状态、循环体、循环计数器和条件表达式4个部分组成。

1.For…Next循环

For…Next循环语句主要用于循环次数已知的循环操作。

For…Next循环语句格式为:

For循环变量=初值 To终值[step步长值]

<语句块>

[Exit Do]

<语句块>

Next循环变量

功能:循环变量先被赋初值。判断循环变量是否在终值内,如果是,执行循环体,然后循环变量加步长值继续;如果否,结束循环,执行Next后的语句。

For…Next循环语句的流程如图8-28所示。

图8-28 For…Next循环语句的流程图

说明:循环变量必须为数值型。Step步长值是可选参数。如果没有指定,则Step的步长值默认为1。注意,步长值可以是任意的正数或负数。一般为正数,初值应小于等于终值;若为负数,初值应大于等于终值;步长值不能为0,否则造成“死循环”。

任务8.5 创建一个“循环模块”,在此模块中插入一个fac过程,功能为:通过输入框输入一个整数,求此整数的阶乘,使用输入框输出。

操作步骤:

(1)新建模块,保存为“循环模块”。

(2)新建过程,如图8-29所示。

图8-29 pac过程

代码如下:

Private Sub fac()

Dim i As Integer,n As Integer,pow As Single

n=InputBox("输入一个整数:")

pow=1

For i=1To n

pow=pow*i

Next

MsgBox"的阶乘是:"&pow,vbOKCancel+vbInformation,"输出"

End Sub

(3)光标定位于fac过程,单击运行,验证过程设计。

说明:“循环语句”模块为标准模块,“fac”是标准模块的子过程,这里只验证程序设计是否正确,省略了程序界面。

2.Do While…Loop循环

Do While…Loop循环循环通常用于循环次数未知的程序中,不过Do While…Loop与For…Next并无本质区别,仅仅是使用的场合不同,相互可以替代。

Do While…Loop的语法格式为:

Do While<循环条件表达式>

[循环体]

Loop

功能:循环条件表达式是一个关系表达式或者逻辑表达式。当循环表达式成立时(值为True),循环体得以成立,否则终止循环,转而执行Loop的下一个语句。因此要确保Do While…Loop为有限次循环,循环体中必须有“破坏”循环条件成立的语句,使得循环不会成为“死循环”。

强制终止Do While…Loop循环的语句是Exit Do,跳出循环后执行Loop后的语句。

任务8.6 在“循环模块”中,添加一个average过程,功能为:通过输入框输入若干个学生的成绩,以-1为结束标志,求这些成绩的平均值(保留1位小数),并使用输出函数输出。

操作步骤:

(1)打开“循环模块”代码窗口,建立average()过程,如图8-30所示。

图8-30 average过程

过程代码如下:

Private Sub average()

Dim i As Integer,cj As Integer,avg As Single

i=0:avg=0

cj=InputBox("请输入第"&i+1 &"位学生的成绩:")

Do While cj<>-1

avg=avg+cj

i=i+1

cj=InputBox("请输入第"&i+1 &"位学生的成绩:")

Loop

avg=Round(avg/i,1)

MsgBox"平均成绩: "&avg,vbOKOnly+vbInformation,"输出"

End Sub

(2)保存模块。光标定位于average过程,单击运行,验证过程的设计。