1 / 33

第6章

第6章. 循环结构程序设计. 本章要点: • For...Next 循环 • Do...Loop 循环. 特点: 重复相同或相似的操作步骤 结构: 循环体 — 要重复执行的语句序列。 循环控制部分 — 规定循环的重复条件或重复次数,确定循环范围的语句. 初值 循环变量. 循环变量+步长 循环变量. 6.1 For … Next 循环结构. 1. 格式 For < 循环变量> = <初值> To < 终值> [ Step < 步长> ] <语句组1> [ Exit For]

skah
Download Presentation

第6章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 循环结构程序设计 本章要点: • For...Next循环 • Do...Loop循环 特点: 重复相同或相似的操作步骤 结构: 循环体—要重复执行的语句序列。 循环控制部分—规定循环的重复条件或重复次数,确定循环范围的语句

  2. 初值 循环变量 循环变量+步长 循环变量 6.1 For…Next循环结构 • 1. 格式 • For <循环变量>=<初值> To <终值> [Step <步长>] • <语句组1> • [Exit For] • <语句组2> • Next [<循环变量>] Yes 循环变量值超过终值? No 2. 功能: 执行过程如流程图所示 执行循环体 后续语句

  3. 3. 说明 (1)循环变量——数值变量 (2)初值,终值,步长——数值表达式 (3)步长——可正可负,但不能为0,为1时可以省略 步长>0时,必须: 初值<=终值 循环结束条件——循环变量的值>终值 步长<0时,必须: 初值>= 终值 循环结束条件——循环变量的值<终值 (4)Exit For——退出循环,常放在条件语句中 (5)Next之后的循环变量应与For语句中的循环变量应一致,也可以省略

  4. 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

  5. 4. 求 5. 求 • 思考: • 1. 求12+22+32+42+……+1002 • 2. 求13+33+53+……+n3 • 3. 求1-3+5-7+…+(-1)n+1(2n-1)

  6. 例: 判断以下程序段的执行结果: • 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

  7. 【例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

  8. 2. 求: 3. 求: • 思考: • 1. 求1×3 ×5 ×7……(共N项)。

  9. 【例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

  10. 思考: • 1. 在窗体上打印1、3、5、7、9、…、N。 • 2. 在窗体上显示1到500之间所有能被3整除的数,每行10个数。 • 3. 在带水平滚动条文本框中显示1到指定N之间所有能被3和7同时整除的数。 • 4. 在带垂直滚动条的文本框中显示00~3600之间的正弦和余弦值,每隔20求一组值。

  11. 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

  12. 格式三: Do [<语句组1>] [Exit Do] [<语句组2>] Loop While <条件> 格式四: Do [<语句组1>] [Exit Do] [<语句组2>] Loop Until<条件> • 2. 功能 • 使用While <条件>: 条件为True时,执行循环体 • 条件为False时,退出循环 • 使用Until <条件>: 条件为False时,执行循环体 • 条件为True时,退出循环 • 格式一、二:在循环起始处判断条件,为当型循环 • 格式三、四:在循环终止处判断条件, 为直到型循环

  13. Text1 Command1 Text2 3.说明 (1)Exit Do语句用于退出循环体 (2)也可以在Do语句和Loop语句之后都没有条件, 这时在循环体内必须有强行退出循环的语句 (3)多数情况下,当型循环和直到型循环可互相代替 【例6-4】求12+22+32+42+…小于某数N的最大值,N由用户指定。设计界面下图:

  14. 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的最小值

  15. 【例6-5】求 直至最后一项的值≤10-4为止。 分析: 用N表示每一项的分母(N=1、3、5…) 用Term表示每一项的值,则Term=1/N 用Sum表示累加和 循环初始条件: N=1,Sum=0 循环终止条件: Term<=0.0001

  16. 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

  17. Text1 Text2 Text3 Text4 • 【例6-6】已知某乡镇企业现有产值和年增长率,试问多少年后,该企业的产值可以翻一番。翻一番后实际产值是多少? • 分析: P—现有产值 • R—年增长率 • Y—年 • V—增长后的产值,初始值为P • 累乘: V=P(1+R)(1+R)… • 退出循环条件 V>=2P

  18. 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

  19. 【例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就是最大公约数。 • 最小公倍数为两个数的积除以它们的最大公约数。

  20. Text1 Text2 Label3 Label4 • 设计界面如下图所示:

  21. 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

  22. 【例6-8】给一个整数n(n>=3),判断它是否是素数 • 分析:将数N被2—SQR(N)间全部整数除,如果都除不尽,则N是素数,否则N不是素数。 设标志变量Flag,只要有一个被整除,就置为1。

  23. 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

  24. 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 执行过程: ……

  25. 说明 (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

  26. (4) 嵌套循环应选用不同的循环变量 例: FOR I=1... FOR J=... ... NEXT J ... FOR J=... ... NEXT J NEXT I

  27. 【例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

  28. 【例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

  29. 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。

  30. 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

  31. 6.4 应用举例 • P94 【例6-11】 • P95 【例6-12】 • P96 【例6-13】

  32. 本章小结 • 1. For…Next循环结构 • For <循环变量>=<初值> To <终值> [Step <步长>] • <语句组1> • [Exit For] • <语句组2> • Next[<循环变量>]

  33. 2. Do…Loop循环结构 Do [{While|Until}<条件>] [<语句组1>] [Exit Do] [<语句组2>] Loop Do [<语句组1>] [Exit Do] [<语句组2>] Loop [{While|Until}<条件>]

More Related