内容正文:
项目7 循环结构
项目导入
循环控制结构是程序中的另一个基本结构。
在实际问题中,常常需要进行大量的重复处理,循环结构可以使程序设计者只写很少的语句,就可以让计算机反复执行,从而完成大量类似的计算。
Visual Basic 提供了 For 语句、Do … Loop 语句和 While 语句实现循环结构。
项目7由4个任务组成,分别是For…Next 循环语句、Do循环语句、While…Wend循环语句,以及循环的嵌套。
2
项目目标
掌握 For...Next 循环语句的格式及使用
掌握Do...Loop 循环语句的格式及使用
掌握While...Wend 循环语句的格式及使用
掌握多重循环的执行过程
3
任务3 While…Wend循环结构
任务目标
掌握While…Wend循环语法格式、功能及执行过程。
能够运用While…Wend循环编写简单的循环结构程序
任务实施
4
(1)格式:
While <条件>
[语句组]
Wend
(2)说明:
该循环格式中的条件一般为布尔表达式,也可以是数值和字符表达式,结果为True 或 False,用来表示一个判断条件。
5
1.While…Wend 语句的格式
2.While…Wend 语句的执行过程
该语句首先计算给定的条件的值,若结果为True(非 0 值),则执行循环体,当遇到 Wend 语句时,控制返回并继续对条件进行测试,若仍然为True,重复上述过程;若条件的结果为False,则直接执行Wend后面的语句。
6
7
这种循环结构的循环体内一般应该包括对“条件”进行改变的语句,使条件的结果发生变化。
否则,若初始条件成立,则每次执行完循环体后再检验条件,条件仍然成立,再执行循环体,这样无限执行下去,就形成了“死循环”。
若初始条件不成立,则循环体一次也不执行,循环就毫无意义。
3.注意事项
【例7.11】 找出1000以内能够被5和17整除的最大的10个数,并将它们输出。
8
(1)分析:
这里专门设置一个变量 found 记录当前找到的 数的个数。
(2)创建界面
(3)编写代码
9
编写窗体的Click事件代码:
Private Sub Form_Click()
a=1000
found=0
While (found< >10)
a=a-1
If a Mod 5=0 And a Mod 17=0 Then
found=found+1
Print a;
End If
Wend
End Sub
10
程序运行结果如图7-13所示。
注意:
与 While…Wend 语句相比,Do…Loop 语句提供了一种结构化与适应性更强的方法来执行循环。
Do…Loop 语句中的条件既可以放在循环之首,也可以放在循环之尾。此外, Do…Loop 循环可以在条件没有满足的情况下退出循环(当遇到 Exit Do 语句)。
11
课堂反馈:
已知s=1×2×3×…×n,计算s不大于3000时n的最大值。
12
任务4 循环的嵌套
【任务目标】
了解什么是循环的嵌套。
掌握双重循环嵌套执行的过程。
能够运用双重循环编写简单的程序。
【任务实施】
13
1.循环的嵌套
一个循环体内又包含另一个完整的循环体结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环的嵌套。
在嵌套结构中,对嵌套的层数没有限制,有几层嵌套,就称为几重循环。
2.多重循环的执行
外循环每执行一次,内循环都要从头到尾执行一遍。同类循环和不同种类的循环都可以互相嵌套。
14
嵌套时需要注意,内层循环必须完全包含在外层循环之内,不能相互“交叉”,内层循环和外层循环应该使用不同的循环控制变量。
在多重循环的任何一层循环中,都可以使用 Exit Do 或 Exit For 退出循环,但要注意只能退出 Exit Do 或 Exit For 语句所对应的最内层循环,而不是一次退出多层循环。
15
3.注意事项
【例7.12】用双循环打印九九乘法表
程序代码如下:
Private Sub Form_Click()
Dim cf As String
Print Tab(35); "九九乘法表"
Print Tab(35); "-----------"
For i=1 To 9
For j=1 To 9
cf=i &"×"& j &"="& i*j
Print Tab((j-1)*9+1); cf;
Next j
Print
Next i
End Sub
16
程序运行结果如图7-14所示。
17
拓展与提升:
同学们还可以想到其他方法吗?
【例7.13】编程计算 Sum=1+(1+2)+(1+2+3)+…+ (1+2+3+…+n),其中 n 由用户输入。
分析:
这是一个累加问题,共有n项相加,可以设置存放累加和的变量为Sum,而对于第 I 个累加项1+2+…+I,又是一个累加问题,设存放该累加项的变量为Sum1,因此可以用双重循环实现。用外循环对I依次取1、2、…、n值,对于每一次的累加项(如第I项),用内循环控制求1+2+…+I。设文本框Text1用于输入总项数n,Text2用于输出总和Sum。
18
程序代码如下:
Private Sub Form_Click()
n=Val(Text1.Text)
Sum=0
For I=1 To n
Sum1=0' 在计算每个累加项之前,将存放累加和的变量清零
For J=1 To I
Sum1=Sum1+J
Next J
Sum=Sum+Sum1
Next I
Text2.Text=Sum
End Sub
19
程序运行结果如图7-15所示。
【例7.14】将一张面值为100元的人民币等值换为100张包含5元、1元、0.5元的零钞,要求每张零钞不少于1张,问有哪几种组合?
程序代码如下:
Private Sub Form_Click()
Dim x%,y%,z%,n%
Print "5元", "1元","0.5元"
n=0
For x=1 To 19
For y=1 To 100-x
z=100-x-y
If 5*x+1*y+0.5*z=100 Then
Print x,y,z
n=n+1
End If
Next y
Next x
Print"共有"&n&"组合"
End Sub
20
程序运行结果如图7-16所示。
课堂反馈:
编程:百钱百鸡问题。
一百个铜钱买了一百只鸡,其中公鸡一只5钱、母鸡一只3钱,小鸡一钱3只,问一百只鸡中公鸡、母鸡、小鸡各多少。
21
项目小结
本项目要求学生能够
掌握For…Next 循环语句、Do…Loop循环语句、While…Wend循环语句的语法格式、循环法则;
分析总结三种循环各自的适用情况,并能处理累加、累乘、倍数、递推问题等;
了解多重循环的执行顺序,能够编写简单的多重循环结构的程序。
22
$$