1、第六节 循环结构第六节 循环结构在用计算机处理问题时,除了分支问题外,还有不少是需要重复执行某一组操作的问题。这就要采用循环结构,VB中提供了两种语句实现循环结构:For-Next语句和Do-Loop语句。【例6-6-1】求s=1+2+3+100利用赋值语句可写出如下形式的代码:sum=0sum= sum+1sum= sum+2sum=sum+3sum=sum+100很显然,使用这种形式也能得到结果,但程序很冗长。观察上面的代码可以发现,这段代码实际上重复了同一个操作:sum=sum+i,只不过是每次相加的自然数不同而已。使用VB提供的循环语句可以很容易实现这种重复操作功能。具体算法如下:设s
2、um=0;设i=1;若ib)的最大公约数的算法见例6-1-3,流程图见图6-3,程序代码如下:求最大公约数Private Sub cmdCalcu_Click() Dim a As Integer Dim b As Integer Dim r As Integer a = Val(txta.Text) b = Val(txtb.Text) r = a Mod b Do While r 0 a = b b = r r = a Mod b Loop txtDivisor.Text = Str(b)End SubPrivate Sub cmdEnd_Click() EndEnd Sub格式二:Do
3、循环体 Loop Until 条件这种循环的执行过程如图6-28所示。进入循环体后,先执行一次循环体A,然后再检查条件P是否成立。如果不成立,就重复执行循环体A,直到条件P成立退出循环,这种循环结构称为直到型循环。【例6-6-4】 如果我国人口以每年平均1.5%的速度增长,问多少年后我国人口达到或超过15亿?设现在人口为12.3亿。解决这个问题的思路是:设现在人口为p0=12.3亿,人口增长率r=1.5%=0.015,则一年后人口为p1=p0+p0r=p0(1+r),看它是否达到或超过15亿;如果未达到,再算二年后的人口p2=p1+p1r=p1(1+r);如果未达到,再计算三年后的人口,直到n
4、年后的人口数达到或超过15亿。流程图见图6-29,程序代码如下:直到型循环Private Sub Form_Click() Dim p As Single Dim r As Single Dim n As Integer p = 1230000000# r = 0.015 n = 0 Do p= p * (1 + r) n = n + 1 Loop Until p = 1500000000# Print n; 年后, 人口=; pEnd Sub运行结果如下; 14年后 人口=1.51506E+09三、循环的嵌套在一个循环中又完整地包含另一个循环,称为循环的嵌套。前面介绍的几种类型的循环可以互相
5、嵌套,例如可以在一个For-Next循环中包含另一个For-Next循环,也可以在一个Do-Loop循环中包含一个For-Next循环。【例6-6-5】设计一个程序,打印如下所示的图案。 * * * * * *为解决这个问题,可以采用如下的算法:使用双重For-Next循环,外循环确定行数和各行起始打印位置,内循环用来确定各行打印的个数。设外循环的循环变量为i,内循环的循环变量为j 。由于图案上下对称,上下两半对应行的起始位置和字符个数完全一致,所以i的取值也应对称:i=-3 To 3。设i=0行的起始打印位置为5,则第i行的起始打印位置为Tab(Abs(i)+5),第i行的字符的个数为2*(
6、4-Abs(i)-1。流程图如图6-30所示,程序代码如下:打印菱形图案Private Sub Form_Click() Dim i As IntegerDim j As Integer For i = -3 To 3 Print Tab(Abs(i) + 5); 确定每行的起始位置 For j = 1 To 2 * (4 - Abs(i) - 1 Print *; Next j Print 换行 Next iEnd Sub【例6-6-6】求3到100之间的全部质数。质数是除了1和它本身之外,不能被其它任何整数整除的大于1的自然数。要验证一个自然数n是否为质数,方法很多。我们采用的算法是:一个
7、数n是否是质数,只需将n被2 间全部整数除,如果都除不尽,n就是质数。图6-31先计算出k= ,然后将n被i=2k除。Flag是个“标志变量”,初始时Flag=0,表示n未被任何一个整数整除,如果在某一次n被一个整数i整除,则Flag改变为1,表明该数不是质数。如果n不被任何一个i整除,则Flag始终保持为0。因此,在结束循环后根据Flag的值为0或1,来判断一个数是否为质数。求3到10之间的全部质数Private Sub Form_Click() Dim n As Integer, i As Integer Dim flag As Integer Dim k As Integer For n
8、 = 3 To 100 Step 2 k = Int(Sqr(n) i = 2 flag = 0 Do While i = k If n Mod i = 0 Then flag = 1 n能被某一个数整除 End If i = i + 1 Loop If flag = 0 Then Print n Next nEnd Sub运行结果为: 357 89 97 说明:由于偶数决不会是质数,不必对偶数进行测试,因此外循环的增量为2; 内循环中n Mod i=0中的Mod为取余运算,若n能被i整除,则余数为0;实践与探索请考察程序的内循环部分,如果n是一个质数,如n=11,则内循环结束时标志变量fla
9、g的值仍为0;如果n不是一个质数,如n=63,则进行第二次循环时n能被3整除,此时flag的值为1,已经可以判断出n不是质数,但程序中的内循环仍然要执行6次,程序的效率不高。请问该如何修改程序,当flag的值为1时直接结束循环。练 习 比较三种循环结构: For-Next、Do While-Loop、Do-Loop Until,指出各在什么情况下使用?Do While-Loop与Do-Loop Until 之间又有什么区别? 写出下列程序的执行结果。 Private Sub Form_Click() Dim x As Integer Dim n As Integer n = 0 For x =
10、 3 To 11 Step 2 n = n + 1 Print x =; x Next x Print n=; n Print x=; x End Sub Private Sub Form _Click() Dim a As Integer Dim b As Integer Dim c As Integer a = 1b = 1c = 1 Do While a + b + c Sqr(y) End Sub Private Sub Form _Click() Dim k As Integer Dim t As Integer Dim s As Integer s = 0t = 1 For k =
11、 2 To 4 s = s + k t = t * k Next k Print s=; s, t=; t End Sub Private Sub Form _Click() Dim a As Integer Dim b As Integer Dim c As Integer Dim s As Integer Dim i As Integer a = 2b = 1s = 0 For i = 10 To 6 Step -1 s = s + a c = a + b a = b b = c Next i Print s=; s End Sub Private Sub Form _Click() Di
12、m i As Integer Dim j As Integer Dim y As Integer Dim s As Integer s = 1y = 1 For i = 2 To 4 For j = 1 To 2 y = y * j Next j s = s + y Next i Print s=; s End Sub Private Sub Form _Click() Dim i As Integer Dim j As Integer For i = 1 To 6 For j = 1 To i Print ; Next j Print Next iEnd Sub 编写计算下列各式的程序: P
13、=n!(n!=n*(n-1)*(n-2)*(n-3)*1,n由键盘输入) S=1-1/2+1/3-1/4+1/6-1/6+1/99-1/100 S=1!+2!+3!+4!+10! 某工厂1997年总产值为200万元,若总产值以每年5%的速度增长,问多少年后总产值翻一番? 编写求下式中n最大值的程序,画出流程图。 12+22+32+n2=1000 编写程序打印下列图形: * * * * * * * * * * 设计一个界面如图6-32所示的程序,图中上排的两个文本框用于输入一个分数的分子分母,中排有一个结果框,用于显示计算结果,下排为“计算”和“退出”按钮。单击“计算”钮时,在中间框中立即显示出该分数的化简结果,单击“退出”钮时,结束程序。要求写出完成该程序所要绘制的控件及需要重新设置的属性,并编写程序。化简分数的算法如下: 求分子与分母的最大公约数; 将分子、分母分别用最大公约数相除; 用上步求出的两个数组成化简分数,送到结果框显示。例如:分子框输入126,分母框输入210,单击“计算”按钮后,化简分数框显示3/5。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1