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过程,单击运行,验证过程的设计。