330 likes | 550 Views
第6章. 循环结构程序设计. 本章要点: • For...Next 循环 • Do...Loop 循环. 特点: 重复相同或相似的操作步骤 结构: 循环体 — 要重复执行的语句序列。 循环控制部分 — 规定循环的重复条件或重复次数,确定循环范围的语句. 初值 循环变量. 循环变量+步长 循环变量. 6.1 For … Next 循环结构. 1. 格式 For < 循环变量> = <初值> To < 终值> [ Step < 步长> ] <语句组1> [ Exit For]
E N D
第6章 循环结构程序设计 本章要点: • For...Next循环 • Do...Loop循环 特点: 重复相同或相似的操作步骤 结构: 循环体—要重复执行的语句序列。 循环控制部分—规定循环的重复条件或重复次数,确定循环范围的语句
初值 循环变量 循环变量+步长 循环变量 6.1 For…Next循环结构 • 1. 格式 • For <循环变量>=<初值> To <终值> [Step <步长>] • <语句组1> • [Exit For] • <语句组2> • Next [<循环变量>] Yes 循环变量值超过终值? No 2. 功能: 执行过程如流程图所示 执行循环体 后续语句
3. 说明 (1)循环变量——数值变量 (2)初值,终值,步长——数值表达式 (3)步长——可正可负,但不能为0,为1时可以省略 步长>0时,必须: 初值<=终值 循环结束条件——循环变量的值>终值 步长<0时,必须: 初值>= 终值 循环结束条件——循环变量的值<终值 (4)Exit For——退出循环,常放在条件语句中 (5)Next之后的循环变量应与For语句中的循环变量应一致,也可以省略
Text1 Label3 【例6-1】求1+2+3+4+…+N • 累加分析: • 累加器(变量)初值 S=0 • 循环体(重复执行) S=S+I (I=1,2,…,N) Private Sub Command1_Click() Dim N As Integer, I As Integer, Sum As Integer N = Val(Text1.Text) Sum = 0 For I = 1 To N Sum = Sum + I Next I Label3.Caption = Sum End Sub
4. 求 5. 求 • 思考: • 1. 求12+22+32+42+……+1002 • 2. 求13+33+53+……+n3 • 3. 求1-3+5-7+…+(-1)n+1(2n-1)
例: 判断以下程序段的执行结果: • For i = 5 To 1 Step -1 • Print i * i; • Next i • Print • Print i 例: 判断以下程序段的执行结果: X = 6 For K = 1 To 10 Step -2 X = X + K Next K Print K,X
【例6-2】求 N!( N!=1×2×3×…×N) • 累乘分析: • 初始化: F=1 • 循环体: F=F × I (I=1,2,3……N) • 程序: • Private Sub Command1_Click() • Dim N As Integer, I As Integer, F As Long • N = Val(Text1.Text) • F = 1 • For I = 1 To N • F = F * I • Next I • Text2.Text = F • End Sub
2. 求: 3. 求: • 思考: • 1. 求1×3 ×5 ×7……(共N项)。
【例6-3】打印斐波那契(Fibonacci)数列的前20项 • 斐波那契数列如下: • 0,1,1,2,3,5,8,13,… • 即从第三项起每一项是其前两项之和。 • 分析: …… • Private Sub Form_Click() • A = 0:B = 1 • Text1.Text = Text1.Text & Str(A) & Str(B) & _ • Chr(13) & Chr(10) • For I = 1 To 9 • A = A + B • B = A + B • Text1.Text = Text1.Text & Str(A) & Str(B) & _ • Chr(13) & Chr(10) • Next I • End Sub
思考: • 1. 在窗体上打印1、3、5、7、9、…、N。 • 2. 在窗体上显示1到500之间所有能被3整除的数,每行10个数。 • 3. 在带水平滚动条文本框中显示1到指定N之间所有能被3和7同时整除的数。 • 4. 在带垂直滚动条的文本框中显示00~3600之间的正弦和余弦值,每隔20求一组值。
6.2 Do…Loop循环结构 • 问题: 求12+22+32+42+…小于某数N的最大值,N由用户指定。 • 特点:已知循环条件、未知循环次数,用Do … Loop循环结构实现 • 1. 格式 格式一: Do While <条件> [<语句组1>] [Exit Do] [<语句组2>] Loop 格式二: Do Until <条件> [<语句组1>] [Exit Do] [<语句组2>] Loop
格式三: Do [<语句组1>] [Exit Do] [<语句组2>] Loop While <条件> 格式四: Do [<语句组1>] [Exit Do] [<语句组2>] Loop Until<条件> • 2. 功能 • 使用While <条件>: 条件为True时,执行循环体 • 条件为False时,退出循环 • 使用Until <条件>: 条件为False时,执行循环体 • 条件为True时,退出循环 • 格式一、二:在循环起始处判断条件,为当型循环 • 格式三、四:在循环终止处判断条件, 为直到型循环
Text1 Command1 Text2 3.说明 (1)Exit Do语句用于退出循环体 (2)也可以在Do语句和Loop语句之后都没有条件, 这时在循环体内必须有强行退出循环的语句 (3)多数情况下,当型循环和直到型循环可互相代替 【例6-4】求12+22+32+42+…小于某数N的最大值,N由用户指定。设计界面下图:
Private Sub Command1_Click() • Dim n As Long , S As Long • N = Val(Text1.Text) • I = 0 • S = 0 • Do While S < N • I = I + 1 • S = S + I * I • Loop • Text2.Text= S – I * I • End Sub 初始化 Until S >= N 循环条件 循环体 While S < N 思考:求12+22+32+42+…大于或等于某数N的最小值
【例6-5】求 直至最后一项的值≤10-4为止。 分析: 用N表示每一项的分母(N=1、3、5…) 用Term表示每一项的值,则Term=1/N 用Sum表示累加和 循环初始条件: N=1,Sum=0 循环终止条件: Term<=0.0001
Private Sub Form_Click() N = 1:Sum = 0 Do Term = 1 / (N * N) Sum = Sum + Term N = N + 2 Loop Until Term <= 0.0001 Form1.FontSize = 12 ' 设窗体的字体 CurrentY = 200 '设当前显示位置 Print "运算结果为:"; Sum Print "最后一项的值为:"; Term End Sub
Text1 Text2 Text3 Text4 • 【例6-6】已知某乡镇企业现有产值和年增长率,试问多少年后,该企业的产值可以翻一番。翻一番后实际产值是多少? • 分析: P—现有产值 • R—年增长率 • Y—年 • V—增长后的产值,初始值为P • 累乘: V=P(1+R)(1+R)… • 退出循环条件 V>=2P
Private Sub Form_Click() • P = Val(Text1.Text) • R = Val(Text2.Text) / 100 • V = P:Y = 0 • Do Until V >= 2 * P • Y = Y + 1 • V = V * (1 + R) • Loop • Text3.Text = Y • Text4.Text = Format(V, "0.00") • End Sub
【例6-7】给出两个正整数M、N,求它们的最大公约数和最小公倍数。【例6-7】给出两个正整数M、N,求它们的最大公约数和最小公倍数。 • 分析: 求最大公约数的方法如下 • (1) 以M作被除数,N作除数,求余数R。 • (2) 如果R不为零,则将除数N做为新的被除数M,将余数R做为新的除数N,再进行相除,得到新的余数R。 • (3) 如果R仍不等于0,则重复上述步骤(2)。如果R为零,则这时的被除数N就是最大公约数。 • 最小公倍数为两个数的积除以它们的最大公约数。
Text1 Text2 Label3 Label4 • 设计界面如下图所示:
Dim A As Integer, B As Integer, N As Integer, _ M As Integer, R As Integer Private Sub Command1_Click() M = Val(Text1.Text):N = Val(Text2.Text) A = M:B = N R = M Mod N Do While R <> 0 M = N N = R R = M Mod N Loop Label3.Caption = N End Sub Private Sub Command2_Click() Label4.Caption = A * B / N End Sub
【例6-8】给一个整数n(n>=3),判断它是否是素数 • 分析:将数N被2—SQR(N)间全部整数除,如果都除不尽,则N是素数,否则N不是素数。 设标志变量Flag,只要有一个被整除,就置为1。
Private Sub Command1_Click() • N = Val(Text1.Text) : K = Int(Sqr(N)) : I = 2 • Flag = 0 • Do While I <= K And Flag = 0 • If N Mod I = 0 Then Flag = 1 Else I = I + 1 • Loop • If Flag = 0 Then • Label1.Caption = "是素数" • Else • Label1.Caption = "不是素数" • End If • End Sub
6.3 循环的嵌套 • 在一个循环体内又完整地包含另一个循环,称为循环的嵌套(或多重循环) 例: For I = 1 To 3 For J = 5 To 7 Print I, J Next J Next I 执行过程: …… 例: For I = 1 To 3 For J = 1 To I For K = -1 To -2 S = S + I + J + K Next K Next J Next I 执行过程: ……
说明 (1) 嵌套的循环可以是For…Next循环,也可以是 Do…Loop循环 (2) FOR循环有一个公共端点,可使用一个NEXT语句,循环变量按从内到外排列 例: FOR I=1 TO 3 FOR J=5 TO 7 PRINT I,J NEXT J NEXT I FOR I=1 TO 3 FOR J=5 TO 7 PRINT I,J NEXT J,I (3) 内外循环不应交叉 例: FOR I=... FOR J=... ... NEXT I NEXT J
(4) 嵌套循环应选用不同的循环变量 例: FOR I=1... FOR J=... ... NEXT J ... FOR J=... ... NEXT J NEXT I
【例6-9】求1+(1+2)+(1+2+3)+…(1+2+3+…+n), n由用户输入。 分析: …… 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
【例6-10】公鸡5个钱一只,母鸡三个钱一只、小鸡一个钱三只,要用100个钱买100只鸡,问公鸡、母鸡、和小鸡各买几只?【例6-10】公鸡5个钱一只,母鸡三个钱一只、小鸡一个钱三只,要用100个钱买100只鸡,问公鸡、母鸡、和小鸡各买几只? 分析: …… Private Sub Form_Click() Dim I As Integer, J As Integer, K As Integer Print Tab(5); "公鸡"; Tab(15); "母鸡"; Tab(25); _ "小鸡" For I = 0 To 20 For J = 0 To 33 For K = 0 To 100 Step 3 If I*5+J*3+K\3=100 And I+J+K=100 Then Print Tab(5); I; Tab(15); J; Tab(25); K End If Next K, J, I End Sub
A B C D -) C D C A B C 答案: 1098 1 0 9 8 - 9 8 9 1 0 9 【例6-11】数字灯谜。有算式: A、B、C、D为非负一位数字,要求找出满足以上算式的A、B、C、D。
Private Sub Form_Click() Dim A As Integer, B As Integer, C As Integer, _ D As Integer Dim S1 As Integer, S2 As Integer, S3 As Integer For A = 1 To 9 For B = 0 To 9 For C = 1 To 9 For D = 0 To 9 S1 = A * 1000 + B * 100 + C * 10 + D S2 = C * 100 + D * 10 + C S3 = A * 100 + B * 10 + C If S1 - S2 = S3 Then Print A; B; C; D End If Next D, C, B, A End Sub
6.4 应用举例 • P94 【例6-11】 • P95 【例6-12】 • P96 【例6-13】
本章小结 • 1. For…Next循环结构 • For <循环变量>=<初值> To <终值> [Step <步长>] • <语句组1> • [Exit For] • <语句组2> • Next[<循环变量>]
2. Do…Loop循环结构 Do [{While|Until}<条件>] [<语句组1>] [Exit Do] [<语句组2>] Loop Do [<语句组1>] [Exit Do] [<语句组2>] Loop [{While|Until}<条件>]