内容正文:
项目7 循环结构
项目导入
循环控制结构是程序中的另一个基本结构。
在实际问题中,常常需要进行大量的重复处理,循环结构可以使程序设计者只写很少的语句,就可以让计算机反复执行,从而完成大量类似的计算。
Visual Basic 提供了 For 语句、Do … Loop 语句和 While 语句实现循环结构。
项目7由4个任务组成,分别是For…Next 循环语句、Do循环语句、While…Wend循环语句,以及循环的嵌套。
2
项目目标
掌握 For...Next 循环语句的格式及使用
掌握Do...Loop 循环语句的格式及使用
掌握While...Wend 循环语句的格式及使用
掌握多重循环的执行过程
3
任务2 Do…Loop循环结构
任务目标
掌握Do…Loop 语句循环的4种结构及执行过程。
能够运用Do循环编写简单的循环结构程序。
任务实施
Do…Loop 语句是最常用且较有效的循环结构,它有以下4种结构。
4
1.Do While…Loop语句
(1)格式:
Do While <条件>
[语句组]
Loop
(2)执行过程:
当条件为True时,循环继续进行,直到条件变为False 为止。
5
【例7.4】 编程计算2×4×6×8×10的值。
程序代码如下:
Private Sub Form_Click()
Dim I As Integer, Sum As Long
I=2 'I的初值赋为1
P=1
Do While I<=10
P=P*I
I=I+2
Loop
Print P
End Sub
6
(1)格式:
Do Until <条件>
[语句组]
Loop
(2)执行过程:
当条件为False时,循环继续进行,直到条件变为True为止。
7
2.Do Until…Loop语句
例如上例可以改写为:
Private Sub Form_Click()
Dim I As Integer, Sum As Integer
I=2
P=1
Do Until I>10
P=P*I
I=I+2
Loop
End Sub
8
【例7.5】 输入一个班的学习成绩,统计其中及格的学生人数(大于或等于60分的为及格),并计算出全班的平均分数。学生人数不定,输入负数时截止。
9
(1)分析:
由于学生人数不定,用For循环无法确定循环次数,但题目给了循环终止的条件:输入成绩为负数时截止,用Do循环比较简便。
例7.5
(2)创建用户界面,设置属性如图7-6。
10
(3)编写事件代码。
编写“输入成绩”命令按钮的Click事件代码:
Private Sub Command1_Click()
Dim Score As Single, PassN As Integer, n As Integer, Sum As Single
Sum=0:PassN=0:n=0
Score=Val(InputBox("请输入学生成绩:"))
Do While Score>=0 ' 成绩为负数时停止循环
Score=Val(InputBox("请输入学生成绩:"))
If Score>=60 Then PassN=PassN+1 ' 统计及格人数
n=n+1 ' 统计总人数
Sum=Sum+Score ' 统计总分
Loop
Ave=Sum/n
Text1.Text=Str(n)
Text2.Text=Str(PassN)
Text3.Text=Str(Ave)
End Sub
11
运行程序,结果如图7-7所示。
12
【例7.6】计算1+1/3+1/5+……+1/(2N+1),直到1/(2N+1)小于10-5。
13
分析:
题目属于“累加问题”,由于累加的终止值不确定,用For循环无法确定循环次数,但题目给了循环终止的条件:直到1/(2N+1)小于10-5,可以用Do…Until循环来完成。
程序代码如下:
Private Sub Form_Click()
sum=0:n=1:t=1/n
Do Until t<0.00001
sum=sum+t
n=n+2
t=1/n
Loop
Print"N=";n
Print"sum=";sum
End Sub
14
运行程序,结果如图7-8所示。
3.Do…Loop While语句
(1)格式
Do
[语句组]
Loop While <条件>
(2)执行过程
当条件为True时,循环继续进行,直到条件变为False为止。
15
【例7.7】运行以下程序,和Do While…Loop语句比较,执行过程有什么不同。
16
Private Sub Form_Click()
Dim I As Integer
I=6
Do
Print I
I=I+1
Loop While I<=5
End Sub
程序的输出结果为:
6
执行过程有什么不同?
4.Do…Loop Until语句
(1)格式:
Do
[语句组]
Loop Until <条件>
(2)执行过程:
当条件为False时,循环继续进行,直到条件变为True为止。
17
【例7.8】运行以下程序,和Do Until…Loop语句比较,执行过程有什么不同。
Private Sub Form_Click()
Dim I As Integer
I=6
Do
Print I
I=I+1
Loop Until I>5
End Sub
18
程序输出结果为:
6
执行过程有什么不同?
19
(1)创建用户界面如图7-9 。
【例7.9】设计一个程序,用来计算银行存款所得。已知银行利率为3.85%,计算多少年后存款总额能翻一番。
(2)设置属性。
(3)编写事件代码。
编写“计算”命令按钮的Click事件代码:
Private Sub Command1_Click()
Dim x As Single,n As Integer
x=Val(Text1.Text)
a=x
n=0
Do
x=x*(1+0.0385)
n=n+1
Loop Until x>=2*a
Label1.Caption=n&"年后存款总额达到"&x&"元"
End Sub
20
运行程序,结果如图7-10所示。
21
【例7.10】编程实现判断用户输入的数是否为素数。
22
(1)创建用户界面如图7-11。
(2)设置属性
23
(3)编写事件代码。
编写“判断”命令按钮的Click事件代码:
Private Sub Command1_Click()
Dim n As Integer, k As Integer, flag As Boolean, i As Integer
n=Val(Text1.Text)
k=Int(Sqr(n))
flag=False
i=2
Do While i<=k And flag=False
If n Mod i=0 Then
flag=True
Else
i=i+1
End If
Loop
If flag=False Then
Label1.Caption=n&"是素数"
Else
Label1.Caption=n&"不是素数"
End If
End Sub
24
运行程序,结果如图7-12所示。
课堂反馈:
设有一张厚为x mm,面积足够大的纸,将它不断对折,求对折多少次后,其厚度可达珠穆朗玛峰的高度(8848m)?
25
$$