四. While循环
1.While循环的格式: While <条件表达式> 循环体 Wend
说明:<条件表达式>为关系或逻辑表达式。
2.执行过程:判断条件;条件满足,执行循环体语句;再继续判断条件,继续执行循环;
直到条件不满足,结束循环。
结合下面我们熟悉的For程序,来说明:
For I = 1 To 10 S = S + I Next I Print I
改用While循环表示:
I = 1 ‘ 初值
While I<=10 ‘ 循环条件 S=S+I
I=I+1 ‘ 变量自增,加步长 Wend Print S
3.While循环的说明
For循环语句必须给出初值、终值、步长值;循环条件也就给出了。
While循环语句中只给出循环条件和终值,所以一定要注意给出初值和增量。如上
面程序段中的3处颜色部分语句。
例如:以下程序段循环几次,y值结果如何。 y = 2
While y < = 8 y = y + y Wend
Print y 分析:
循环条件: y<=8 执行过程如下:
Y=2 , y<=8 满足,执行语句:y = y + y , y=4 ;遇到Wend返回继续判断条件。 Y=4 , y<=8 满足,执行语句:y = y + y , y=8 ;遇到Wend返回继续判断条件。 Y=8 , y<=8 满足,执行语句:y = y + y , y=16 ;遇到Wend返回继续判断条件。 Y=16 , y<=8 不满足,结束循环。 循环执行了3次。
五.Do循环
Do循环是在While循环基础上做了一点修改。整个格式结构和执行过程基本一样。 但增加了一种格式:条件不满足就循环,满足就结束循环。 格式1: Do While (条件) 循环体 Loop
I=1
Do While I<4
S=S+1 I=I+1 Loop Print S
I=1
Do Until I>=40
S=S+1
I=I+1
Loop
格式2: Do 循环体
Loop While (条件)
说明:格式1、格式2和While基本一样,格式2不同在于先执行一次循环,再判断条件是否满足。
格式3: Do Until (条件) 循环体 Loop
格式4: Do 循环体
Loop Until (条件)
说明:Until和While的不同在于条件不满足才循环。
注意:为了避免循环条件的混淆,我们一般是将Until 循环转换为While 循环做题。即将Until改为While,后面的条件改取相反值条件。
例题:下列VB程序段运行后,变量 x 的值为( )。
A、7
B、8
C、9
D、10
解题:y=77,Sqr(y)约为8,循环条件 Until x > 8,改为相反情况 x<=8 循环,即:
x = 3 :y = 77
Do
x = x + 2 Loop While x<=8
第1次循环: x= 3, x=x+2=5 , x <=8, 继续循环。 第2次循环: x= 5, x=x+2=7 , x <=8, 继续循环。 第3次循环: x= 7, x=x+2=9 , >8, 结束循环。
例题.假定有以下循环结构:
Do Until 0 ' 条件不满足循环, 条件满足就不循环 循环体 Loop
则正确的描述是()。
A.如果\条件\是一个为0的常数,则一次循环体也不执行 B.如果\条件\是一个为0的常数,则至少执行一次循环体 D.不论\条件\是否为\真\,至少要执行一次循环体
注:Until 条件表示《条件不满足循环》,也可以表示为:条件为0就循环。
六.循环的嵌套
在循环语句体内又包含了一个或多个循环称之为多重循环或循环的嵌套。前面学过的For循环、While循环、Do循环互相之间都可以嵌套。 对于循环的嵌套,要注意以下事项:
(1)在多重循环中,各层循环的循环控制变量不能同名。 (2)外循环必须完全包含内循环,不能骑跨。 例如,以下的嵌套都是允许的:
(1)For I=1 To 10 (2)DO
条件: x>=10 , 0 就是条件为假
x = 3 :y = 77 Do
x = x + 2 Loop Until x > 8
C.如果\条件\是一个不为0的常数,则至少执行一次循环体
For J=1 TO 20 For j=1 TO 20 Next J Next J Next I Loop While I<=10
For循环嵌套时,且多个循环的Next语句连续出现时,Next语句可以合并成一条。
例题:假定有以下程序段: For M=1 To 3
For N=5 To 1 Step -1
Print M * N Next N Next M
则语句 Print M*N 的执行次数是()。 A.15 C.17
例 编写程序,任意输入两个正整数M和N,求这两个数M和N的最大公约数。 例如:24、16的最大公约数是8。 1 2 4 8 求最大公约数方法一:
两个数m和n同时从小的数开始向下除,找第一个能同时被整除的数。 例如: m =25 : n = 16 同时:
除16、除15、除14、除13、除12、除11、除10、除9、除8被整除,找到,退出。
m = Val(Text1) n = Val(Text2)
For I = n To 1 Step -1
If m Mod I = 0 And n Mod I = 0 Then Exit For Next I
Print \最大公约数是:\ 例如:24和16
同时除16 15 14 13 12 11 10 9
求最大公约数方法二: For I = 1 To n
If m Mod I = 0 And n Mod I = 0 Then
p = I End If
8,同时整除,Exit For退出。
B.16 D.18
注:外循环M执行3次,内循环N执行5次;共循环3×5=15次。
Next i
Print \最大公约数是:\ P 例如:24和16 同时除1 方法三:
分析:求两数M和N的最大公约数,可以用“辗转相除法”,描述如下: 共式: R = m mod n
例如:求 24和16的最大公约数。 ① 赋值:m = 24 , n = 16
② 求余:R = m mod n —— 8 ③ 余数不为0,继续进行。 ④ m = n (=16) , n =R(=8)
⑤ 求余:R = m mod n —— 0 ⑥ 余数为0, 8(n)为最大公约数
如果第二次的余数不为0,则还要依照此方法继续进行下去,直到余数为0止。
表4.23 求 24和16的最大公约数
原 数 24和16 程序代码: Dim m%, n% m =Text1 n = Text2 R = m Mod n Do While R <> 0 m = n n = R
r = m Mod n Loop
Print “大公约数是:”;n
完善程序: Dim m%, n% m =Text1 n = Text2 m1 = m : n1 = n R = m Mod n Do While r <> 0
步 骤 ⑴ ⑵ 被除数m 24 16 除数n 16 8 余数R 8 0 最大公约数是8 结 论 2
3
4
5
6
7
8
9
10 11 12 13 14 15 16