• 沒有找到結果。

循环结构是指在执行程序语句时,需要对其中的某些语句重复执行多次,被重复执行的 程序段称为循环体。使用循环结构可以简化程序,提高程序执行效率。 

Visual Basic 提供的循环结构语句有 For … Next、 Do … Loop、 For Each … Next 和 While …  Wend 等。其中最常用的是 For … Next 和 Do … Loop 语句,本节主要讲解这两个循环语句的 用法。

3.3.1  Do…Loop 语句 

Do …  Loop 语句是通过检测循环条件决定循环的语句,Do … Loop 语句具有很强的灵活 性, 它既可以构成先判断条件再决定是否执行循环体的形式, 也可以构成先执行循环体后判断 条件的形式。 

1.先判断条件形式的 Do…Loop 语句 语句格式为:

Do [While|Until <条件>] 

[循环体] 

Loop 说明:

(1)Do While … Loop 是“当型循环”形式,即<条件>为真(True)时,执行循环体;

条件为假(False)时,终止循环。

(2)Do  Until  …  Loop 是“直到型循环”形式,即<条件>为假(False)时,执行循环;

直到条件为真(True)时,终止循环。

(3)<条件>即循环条件,是一个关系表达式或逻辑表达式,其值为 True 或 False。

(4)在 Do … Loop 中,可以在循环体的适当位置使用 Exit Do 语句,以便随时退出。当 有多个循环嵌套使用时,Exit Do 语句只能跳出当前的 Do … Loop 循环。

【例 3­16】计算 1+2+3+…+100。

分析:采用累加求和的方法,用变量 s 存放累加和,s 的初值为 0。用变量 n 计数,n 从 1  开始变化到 100。

(1)用当型循环语句 Do While … Loop,程序如下:

Private Sub Form_Load()  End Sub

(2)用直到型循环语句 Do Until … Loop,程序如下:

Private Sub Form_Load()  End Sub

(3)Do…Loop 循环语句也可以省略 While/Until,将循环结束条件写在循环体内,用 Exit  Do 语句退出循环。程序如下:

Loop 

Print "1+2+3+…100="; s  End Sub

【例 3­17】若我国现有人口 13 亿,按人口年增长 0.8%计算,多少年后我国人口翻番。

分析:当前人口  13  亿,多少年后人口达  26  亿,即人口翻番。利用循环语句,可求得逐 年增长的人口数量,当达到 26 亿时,停止循环。

程序如下:

Private Sub Form_Click() 

x = 13  ' 当年的人数

n = 0 

Do While x < 26  '当人数还未达到 26 亿 x = x + (x * 0.008)  '根据增长率计算当年的人数

n = n + 1  ' 年份加 1 

Loop 

Print "求得的年数为:"; n 

Print "人数为:"; Round(x, 3)   '保留 3 位小数 End Sub 

2.后判断条件形式的 Do … Loop 语句 语句格式为:

Do 

[循环体] 

Loop [While|Until <条件>]

后判断条件形式的 Do…Loop 语句与先判断条件形式的区别是:首先执行循环体,然后判断 条件的真假,决定是否继续循环。所以,后判断条件形式的 Do…Loop 语句至少执行一次循环体。

在例  3­16  中我们编写了求  1~100  累加和的程序,现将该程序改写成后判断条件形式的  Do…Loop 语句。

Private Sub Form_Load() 

Dim s As Integer, n As Integer  Show 

s = 0: n = 1  Do 

s = s + n  n = n + 1 

Loop While n <= 100  Print "1+2+3+…100="; s  End Sub

也可以改成使用直到型的后判断形式的 Do…Loop 语句,即 Do...Loop Until  n>100,请读 者自行改写程序。 

3.3.2  For … Next 语句 

For  …  Next 循环结构是实现循环的又一种形式,它属于计数型循环,通常用于循环次数 已知的程序结构中。语法格式如下:

For <循环变量> =<初值> To <终值> [Step <步长>] 

[<循环体>] 

Next [<循环变量>]

说明:

(1)<  循环变量>是一个数值型变量,用作循环计数器控制循环次数。

(2)<初值>为循环变量的初始取值,<终值>为循环变量的最后取值,它们均可以是数值 型的常量、变量或表达式,它们的值可以是整数和实数。

(3)<步长>用于决定循环变量每次增加的数值,即变量在变化时的增值,也可为数值型 的常量、变量或表达式。步长的取值可以根据初值和终值的关系分为正数和负数两种,若初值 大于终值,则必须将步长设为负数;若初值小于终值,则必须将步长设为正数,才有可能执行 内部循环体。当步长为 1 时,可以省略 Step 1,步长可以为实数。

(4)可以在循环体中的适当位置放置 Exit For 语句,以便随时退出循环。

(5)For  语句的执行过程是:首先把初值赋给循环变量,接着检查循环变量是否超过终 值,如果超过,就停止执行循环体跳出循环,执行 Next 后面的语句;否则执行一次循环体,

然后把“循环变量+步长”的值再赋给循环变量,重复上述过程。For  语句的流程图如图  3­16  所示。

图 3­16    or 语句执行流程图

从流程图可以看到,For 语句是先判断条件的循环,如果把 For 语句的“初值”设定为超 过“终值” ,则不执行循环体,而直接执行 Next 后面的语句。例如:

For I=5 To 1 

<循环体> 

Next I

这是一个没有意义的语句。这里所说的“超过”有两种含义,即大于或小于。当步长为 整数时,检查循环变量是否大于终值;当步长为负数时,判断循环变量是否小于终值。

(6)循环的次数由初值、终值和步长三个因素决定,计算公式为:

循环次数=Int((终值-初值)/步长+1) 

【例 3­18】求 n!(n 为自然数) 。

由阶乘的定义可知:n!=1×2×3×…×(n-2)×(n-1)×n =(n-1)!×n 

也就是说,一个自然数的阶乘等于该自然数与前一个数的阶乘的乘积,即从  1  开始连续 地与下一个自然数相乘,直到 n 为止。

程序界面和属性设置请读者自行设计,编写窗体的激活事件,利用输入框由用户输入  n  循环变量←初值

循环体

循环变量←循环变量+步长 

Next 下一个语句

循环变量>终值  Yes  No

的值,循环变量为 i,用 k 存储阶乘值,将结果显示在窗体上。程序代码如下:

Private Sub Form_Activate()  Dim n As Integer, i As Integer 

Dim k As Long  '防止乘积结果溢出,将 k 定义为长整型或实型 n = InputBox("请输入 n", "求 n!") 

k = 1 

For i = 1 To n  k = k * i  Next i 

Print n; "!="; k  End Sub

其中 For 循环语句也可以写成:

For i=n To 1 Step –1  k=k+1 

Next i

【例 3­19】求  1 1 1 1  e ... 

1! 2! 3! n!

= + + + + ,直到第 50 项。

Private Sub Form_Click() 

Dim i As Integer, t As Double, s As Single  t = 1: e = 0 

For i = 1 To 50  t = t * i  e = e + 1 / t  Next i 

Print "e="; e  End Sub

说明:为防止乘积结果数据溢出,将变量 t 定义为 Double 型。

【例 3­20】使用随机函数产生 10 个在指定范围内的随机数,随机数的范围在文本框内输 入确定。

分析:在第 2 章中介绍的随机函数 Rnd()可以产生一个[0,1)区间内的随机小数,那么, 

Rnd*a 可以产生[0,a)区间中的随机实数。若 n 和  m 均为整数,则表达式 Int((m+1-n)*Rnd) 

+n 的值是闭区间[n,m]中的一个随机整数。

窗体的设计及对象属性如图 3­17(a)所示,在本例中使用了框架对象,框架作为容器在 其中添加了两个标签  Label1  和  Label2、两个文本框  Text1  和  Text2。将产生的随机数显示在  Label3 中。有关框架控件的详细内容将在第 4 章中介绍。

(a) (b)

图 3­17  产生 10 个随机数

程序代码如下:

Private Sub Command1_Click()  Dim n As Integer, m As Integer 

Randomize  '产生随机数种子

n = Val(Text1.Text)  m = Val(Text2.Text)  For i = 1 To 10 

p = p & Int((m + 1 - n)* Rnd)+ n & "   " 

Next i 

Label3.Caption = p  End Sub 

Private Sub Command2_Click() 

Text1.SetFocus  ' Text1 获得焦点

Text1.SelStart = 0  ' 将光标置于 Text1 的起始位置

Text1.SelLength = Len(Text1.Text)  ' 将 Text1 中的内容全部选中 Text2.Text = "" 

Label3.Caption = "" 

End Sub 

3.3.3  多重循环

在循环体内可以包含 Visual Basic 的任何语句,当在循环体内包含另外一个循环语句时就 形成了循环嵌套,又叫多重循环。

下面用一个简单的例子来分析多重循环的执行情况。

【例 3­21】双重循环举例。

编写窗体的激活事件,程序如下:

Private Sub Form_Activate()  Dim i As Integer, j As Integer  For i = 1 To 3 

For j = 4 To 5  Print i, j  Next j  Next i  End Sub

程序的执行结果如图 3­18 所示。从图中可以看出,当外循环变量 i 每取一个值,其内循 环将循环一个周期,即 j 将从 4 变化到 5。当 i=1 时,j 分别取 4 和 5;当 i=2 时,j 又分别取 4  和 5,依此类推。

图 3­18  双重循环

i= 时 1 j 4 

Print Tab((j - 1)* 8); i & "*" & j & "=" & i * j; 

Next j 

Print      ' 每行之后产生一个换行 Next i 

End Sub

在窗体的任意位置单击鼠标会得到如图 3­19 所示的结果。

图 3­19  乘法九九表

【例 3­23】在窗体上输出如图 3­20 所示的图形。

图 3­20  输出三角形

相關文件