当前位置:
文档之家› 第6章 循环结构程序设计_36540465
第6章 循环结构程序设计_36540465
5. 多重循环结构——循环的嵌套 如果在一个循环结构的循环体内完整地包含另一个循环 结构,则称为循环嵌套,或多重循环,嵌套的层数可以根 据需要而定,嵌套一层称为二重循环,嵌套二层称为三重
循环。
上面介绍的几种循环控制结构可以相互嵌套,下面是
几种常见的二重嵌套形式:
(1)For I=…. ….. For J=…. …. Next J ….. Next I
For I=1 to 10 step 2
Print I Next I print I
程序的运行结果?
当退出循环后,循环变量I的值为多少?
例: For I=2 To 13 Step 3 Print I ; Next I Print "I= ";I 循环体中输出 I 的值分别为: 退出循环后输出为: I=
循环次数
Int( 终值初值 1) 步长
(5)Next语句中的循环变量可以省略不写。
(6)Exit For 语句是可选项,可以出现在循环体中的任意位置,表示当遇到 该语句时退出循环,执行Next下面的语句。
For…Next语句的执行过程:
循环变量 初值
真
循环变量超过终值?
(1) 把"初值"赋值给"循环变量";
While C < > "? " S=S+1 C = InputBox("输入一个字符" ) Wend
Print "输入的字符数是:"; S
例:用当循环语句完成求 S=1+2+3+…+100 的累加和。
Private Sub Form_Click() S = 0: j = 0 While j < 100 j=j+1 S=S+j Wend Print " S="; S End Sub
4. GoTo 语句
形式: GoTo <标号|行号>
作用:它可以跳过某一段程序无条件地转移到标号或行号 处继续执行. 标号:是任何字符的组合,以字母开头,以冒号结尾。 行号:行号可以是任何非负整数的一个数字序列。
例 求 s=1 + 2 + 3 + … + 10
s=0: i=0 abc:i=i+1 s=s+i if i<10 then goto abc Print s
说明: ( 1 ) 当 使 用 While< 条 件 > 构 成 循 环 时 , 当 条 件 为 " 真 " , 则反复执行循环体,当条件为"假",则退出循环。 (2)当使用Until <条件>构成循环时,当条件为"假",则反 复执行循环体,直到条件成立,即为"真"时,则退出循环。
(3)在循环体内一般应有一个专门用来改变条件表达式中 变量的语句,以使随着循环的执行,条件趋于不成立 (或成立),最后达到退出循环。 (4)语句Exit Do的作用是退出它所在的循环结构,它只能 用在DO/Loop结构中,并且常常是同选择结构一起出现在循 环结构中,用来实现当满足某一条件时提前退出循环。
说明: (1) "循环变量"为数值变量;"初值"、"终值"和"步长"均为数值表达式。 (2)For与Next语句必须成对出现。 (3)步长可以为正数或负数,如果省略,默认步长为1。
步长
>0 初值 < 终值 (=1 时,可省略) <0 初值 > 终值 =0 死循环
(4)For循环中的起始值、终止值和步长决定循环的次数
循环变量
循环变量 + 步长
(6) 循环执行终止,接着执行Next语 句的下一条语句。
例:以紧凑的格式横向连续打印10个"*"号。
例:以紧凑的格式连续打印10个"*"号。 For I = 1 To 10 Step 1 For I = 10 To 1 print "*"; Next I 结果:********** step -1
例:用当循环语句完成求S=1+2+3+…+100的累加和,要求 当累加到1000时,马上终止循环。 Private Sub Form_Click() Dim S%, I% S = 0: j = 0 S=0 ' 累加前变量S为0 While S < 1000 For n=1 to 100 j=j+1 S=S+j Wend Print " S="; S End Sub S=S+n
S=S+I Next I Print " S=",S
' I=I+1
例: 求两个整数m、n的最大公约数及最小公倍数。
问题分析: 假设m>n则最大公约数应该小于或等于n,所以 只要对从1到n之间的所有整数去试着整除m、n,其能整除 m、n的那个最大整数,显然就是最大公约数。
Dim n%, m%, nm%, r% m = Val(InputBox("m=")) n = Val(InputBox("n=")) nm = n * m If m < n Then t = m : m = n : n = t k=n Do until m mod k = 0 and n mod k = 0 k=k-1 Loop Print "最大公约数="; k Print "最小公倍数="; nm / k
Байду номын сангаас
(2) 检查"循环变量"是否超过"终值 ",若没超过"终值",则接着执行 (3)—(5)步骤,否则跳过 (3)—(5)步 骤直接执行步骤(6);
(3) 执行循环体一次;
假
循环体
(4) 遇到Next语句,"循环变量"按" 步长"进行改变:即将 "循环变量 "+"步长"的值再赋值给"循环变量"; (5) 返回执行步骤(2);
格式:
While <条件表达式 >
<循环体>
条件 T 循环体 F
Wend
说明:当条件为真时执行循环
体中的语句,否则执行Wend
后面的语句。
例:从键盘上输入字符,对输入的字符进行计数,当
输入"?"时,停止计数并输出结果。
Dim C As String S=0
C = InputBox("输入一个字符" )
Dim p!, r!, n% P = 1400000000 r = 0.015 n=0 Do p = p + p*r n=n+1 Loop while p<=2000000000 Print n; "年后人口将达到"; p
‘也可以Until p>2000000000
前判断型循环(do while │ until…loop)与 后判断型循环(do… loop while│ until)的区别: dim t%, n% t=1: n=4 Do until n>5 t=t*n n=n+1 Loop Print t, n dim t%, n% t=1: n=4 Do t=t*n n=n+1 Loop until n>5 Print t, n 只要"循环体" 至少执行一次以上, 那么凡是用"前判断 型循环"解决的问题, 全部可以用"后判断 型循环"来解决. (如:n=4)
Print "*";
Next I 'I=I+1
结果:**********
For…Next 语句,终止循环的条件是"循环变量的值超过终值" :
即当步长为正值时,循环变量的值必须大于终值才使循环终止; 当步长为负值时,循环变量的值必须小于终值才使循环终止。
例: For I=1 to 10 print I Next I print I
例:输入5个学生的成绩,计算总分及平均分。
S=0 For n = 1 To 5 x = InputBox("输入第" & n & "个学生的成绩:") S=S+x Next n Print "总分= "; S Print "平均分= "; S / 5
2. While 循环结构 ——当循环 (适合于不知道循环次数,知道循环条件的情况)
例: 求S=1+2+3+…+100的和,要求当累加到1000时,终止循环。
Private Sub Form_Click() S=0 ' 累加前变量S为0 For N = 1 to 100 S=S+N IF S >= 1000 then Exit For Next N Print " S= ";S End Sub
格式2:
条件 真 循环体
假
循环体
Do Until <条件> 语句块 [Exit Do] 语句块 Loop
循环体
条件 假
真
循环体
例. 计算 S=1 + 2 + … + 100
Dim S As Integer, I As Integer S=0 ' 累加前变量S为0 I=1 ' 给控制循环的变量赋初值 Do While I <= 100 ' 该语句可改为 Do Until I >100 S=S+I Dim S%, I% I=I+1 S=0 ' 累加前变量S为0 Loop For I=1 to 100 Print " S="; S