第五章  循环结构设计
双击滚屏  关闭窗口

 

5.1 循环语句

  5.1.1 For...Next 循环语句
  5.1.2 DO...LOOP 循环语句


循环结构是计算机程序设计中一种重要的结构,应用广泛。

通过循环结构可以简化程序,节约内存,提高效率。

循环 : 是指在程序设计中 , 从某处开始有规律地执行某一程序块的现象。

重复执行的程序块称为 “ 循环体 ” 。

5.1 循环语句

VB 提供的设计循环结构的语句有 :

For…next

Do …loop

While…wend

For each…next

5.1.1 For...Next 循环语句

步长型循环结构流程图:

循环 循环变量 从初值 终值 { 循环控制器 }

 

循环体 { 循环体 }

语法格式:

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

[< 语句列 1>]

[Exit For]

[< 语句列 2> ]

Next [< 循环变量 >]

 

例 1 :显示 1000 以内所有被 37 整除的数。

程序代码:

Private Sub Command1_Click()

a = ""

For n = 1 To 1000

If n Mod 37 = 0 Then

a = a & Str(n) & vbCrLf

End If

Next

Text1.Text = a

End Sub

执行结果:

                  

 

例 2 :求 1000 到 1100 之间的所有素数。

程序代码:

Private Sub Command1_Click()

a = ""

For n = 1001 To 1100 Step 2

s = 0

For i = 2 To Int(Sqr(n))

If n Mod i = 0 Then

s = 1

Exit For

End If

Next

If s = 0 Then a = a & Str(n) & vbCrLf

Next

Text1.Text = a

End Sub

执行结果:

                  

5.1.2 DO...LOOP 循环语句

DO...LOOP 语句有两种语法形式 :

前测型循环结构与后测型循环结构

1. 前测型 DO...Loop 循环

前测型循环结构流程图:

| 直到 条件 { 条件成立或不成立时 }

 

循环体 { 循环体 }

语法格式:

Do [{while | until}< 条件 >]

[< 语句列 1>]

[Exit do]

[< 语句列 2>]

Loop

例 3: 求累加和 1+2+3…+100 。

程序代码:

Private Sub Command1_Click()

Dim s As Integer, n As Integer

s = 0: n = 1

Do While n <= 100

s = s + n

n = n + 1

Loop

Label2.Caption = "1+2+3+...+100=" & s

End Sub

执行结果:

                   

例 4: 输入一个正整数,利用“当型”循环判断是否素数。

程序代码:

Private Sub Command1_Click()

Dim n As Long

Select Case Val(Text1.Text)

Case Is < 3

MsgBox " 请输入一个大于 2 的整数! ", vbInformation + vbOKOnly, " 注意 "

Case Is > 2147483647

MsgBox " 此数太大! ", vbInformation + vbOKOnly, " 注意 "

Case Else

n = Val(Text1.Text)

s = 0: i = 2

Do While i <= Sqr(n) And s = 0

If n Mod i = 0 Then

s = 1

Else

i = i + 1

End If

Loop

If s = 0 Then

a = " 是一个素数 "

Else

a = " 不是素数 "

End If

Label1.Caption = Str(n) & a

End Select

Text1.SetFocus

End Sub

Private Sub Text1_GotFocus()

Text1.SelStart = 0

Text1.SelLength = Len(Text1.Text)

End Sub

执行结果:

               

2. 后测型 DO...Loop 循环

后测型循环结构流程图:

 

循环体 { 循环体 }

当 | 直到 条件 { 条件成立或不成立时 }

语法格式:

Do

[< 语句列 1>]

[Exit do]

[< 语句列 2> ]

Loop [{while | until}< 条件 >]

例 5: 计算圆周率的近似值。

程序代码:

Private Sub Command1_Click()

Dim m As Integer

m = Val(Text1.Text)

p = 0#: s = 2#: e = 0.1 ^ m

Do

t = s: p = Sqr(2 + p): s = s * 2 / p

Loop Until Abs(t - s) < 0.1 ^ m

f = String(m - 1, "#")

Text2.Text = Format(s, "0." & f)

Text1.SetFocus

End Sub

 

Private Sub Text1_GotFocus()

Text1.SelStart = 0

Text1.SelLength = Len(Text1.Text)

End Sub

执行结果:

                

例 6: 求两个数的最大公约数。

程序代码:

Private Sub Command1_Click()

m = Val(Text1.Text)

n = Val(Text2.Text)

If n * m = 0 Then

MsgBox " 两数都不能为空 ", 48, " 提示! "

Exit Sub

End If

If m < n Then

t = m: m = n: n = t

End If

Do

r = m Mod n

m = n: n = r

Loop While r <> 0

Text3.Text = Str(m)

End Sub

执行结果:

 

                

总结:

前测型语句与后测型语句的区别:

前测型语句:

“Do While …… Loop” 语句 ,先判断 While 后面的条件是否为 “ 真 ” ,如果为 “ 真 ” 则执行循环体语句,否则终止循环。

后测型语句:
“Do …… Loop While 语句, ” 先执行循环体语句,然后判断 While 后面的条件是否为 “ 真 ” ,如果为 “ 真 ” 则执行循环体语句,否则终止循环。与前者的区别:不管条件的真假,都会至少执行循环体语句一次。

 
双击滚屏  关闭窗口
 
版权所有数学与信息科学学院