1 / 93

4.1 For-Next 语句 4.2 Do While—Loop 语句 4.3 Do—Loop While 语句 4.4 循环语句的嵌套 4.5 程序举例

第 4 章 循环结构程序设计. 4.1 For-Next 语句 4.2 Do While—Loop 语句 4.3 Do—Loop While 语句 4.4 循环语句的嵌套 4.5 程序举例. 4.1 For-Next 语句. 【 例 4.1】For-Next 语句实例。在窗体上添加两个标签 (lblShow 和 lblValue) 和两个命令按钮 (cmdCal 和 cmdExit) 。. 单击时在标签中显示计算结果. 单击时结束程序. For i = 1 To 100. 概括. Next i. 从 1 变化到 100.

shalom
Download Presentation

4.1 For-Next 语句 4.2 Do While—Loop 语句 4.3 Do—Loop While 语句 4.4 循环语句的嵌套 4.5 程序举例

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. 第4章 循环结构程序设计 4.1 For-Next 语句 4.2 Do While—Loop 语句 4.3 Do—Loop While 语句 4.4 循环语句的嵌套 4.5 程序举例

  2. 4.1 For-Next 语句 【例4.1】For-Next 语句实例。在窗体上添加两个标签(lblShow和lblValue)和两个命令按钮(cmdCal和cmdExit)。 单击时在标签中显示计算结果 单击时结束程序

  3. For i = 1 To 100 概括 Next i 从1变化到100 算法分析:计算1+2+3+…+100的和 sum = 0 sum = sum + 1 sum = sum + 2 ┋ sum = sum + 100 sum = sum + i

  4. 变量 i 赋初值1 No i <= 100 变量 i 加1 Yes sum = sum + i For — Next 语句的执行过程

  5. 循环控制变量 For 语句 循环体语句 可省略 完整程序代码 Private Sub cmdCal_Click() Dim sum As Integer, i As Integer For i = 1 To 100 sum = sum + i Next i lblValue.Caption =sum End Sub

  6. 成对出现 步长为1时可省略 循环变量值介于初始值和终止值之间时反复执行 For – Next 循环的一般语法格式 For <循环变量> = <初始值>To <终止值> [ Step <步长> ] 循环体语句 Next [ <循环变量> ] 步长可取正或负数;步长为负数时应使终止值小于初始值

  7. 说明 • 循环体语句执行的次数: 次数=Fix( (终止值-初始值) / 步长)+1 • 可以使用Exit For语句提前结束循环 For i =1 To 10 Step 2 x = x + Int ( Rnd * 100 ) If x > 300 Then Exit For Next i Print x

  8. 图像框1 图像框2显示艺术字 标签,显示统计结果 【例4.2】掷50次骰子,统计点数6出现的次数。窗体中包含2个图像框、2个命令按钮和3个标签。

  9. 主要属性设置

  10. 主要属性设置

  11. 在程序的运行初期,使3个标签处于隐藏状态 主要程序代码 Private Sub Form_Load() lblText.Visible = False lblPoint.Visible = False lblCount.Visible = False End Sub

  12. 随机产生一个1~6间的整数 循环50次 将随机值dot转换成字符型并连接成串 Private Sub cmdStart_Click() lblText.Visible = True lblPoint.Visible = True lblCount.Visible = True imgText.Visible = False Randomize For i = 1 To 50 dot = Int(Rnd * 6) + 1 If dot = 6 Then n = n + 1 dotstr = dotstr & Str(dot) & " " Next i lblPoint.Caption = dotstr lblCount.Caption = "6出现数:" & Str(n) End Sub

  13. 思考: 利用计时器随机产生50个骰子点数 ? 添加Tmr1_Timer事件过程 If i = 50 Then Tmr1.Enabled = False dot = Int(Rnd * 6) + 1 If dot = 6 Then n = n + 1 dotstr = dotstr & Str$(dot) + " " lblPoint.Caption = dotstr lblCount.Caption = "6出现数:" & Str$(n) i = i + 1

  14. 超范围 【例4.3】计算1!+2!+……+n!的值。 (1≤n≤20) 文本框,输入n值并按“回车” 标签,显示计算结果

  15. 初值为1 算法分析 (1) 求阶乘运算:1×2×3×…×n s = 1 '存放乘积 For i=1 To n s = s * i Next i 连乘算法

  16. 求阶乘 求和 (2) 使用累加算法计算阶乘之和 For i = 1 To n s = s * i sum = sum + s Next i

  17. 输入字符时触发 输入回车键 MsgBox "数据输入错误,请重新输入!", vbOKOnly + vbDefaultButton1+ vbCritical, "数据错误" 返回键入字符的ASCII码 txtIn.Text = "" lblOut.Caption = "" txtIn.SetFocus 程序代码 Private Sub txtIn_KeyPress (KeyAscii As Integer) If KeyAscii = 13 Then n = Val(txtIn.Text) If n >= 1 And n <= 20 Then s = 1: sum = 0 计算阶乘之和并输出 Else 显示出错消息框 准备接受用户的再次输入 End If End If End Sub

  18. Private Sub txtIn_Change() lblOut.Caption = "" End Sub 当文本框内容发生变化时立即清空标签

  19. 【例4.4】设计如下窗体。单击“最大值”按钮时立即产生10个1~100之间的随机整数显示在框架内的标签中,同时将它们中的最大值显示在下方的标签内。【例4.4】设计如下窗体。单击“最大值”按钮时立即产生10个1~100之间的随机整数显示在框架内的标签中,同时将它们中的最大值显示在下方的标签内。

  20. 随机产生数据a并作为最大值保存在dmax中 循环次数≤9 No Yes 随机产生新数据a a > dmax No Yes a作为最大值保存到dmax中 输出dmax的值 求最大值算法的流程图

  21. 调试方法介绍 —— 设置断点 通过设置断点,使程序运行到指定的代码行时暂时停止,并切换到中断模式,等待调试人员作进一步的分析和判断,从而确定出下一步的调试任务。

  22. 单击 单击 滚动显示 【例4.5】设计ASCII码对照表

  23. FrmEx4_5_1窗体(显示数字的Ascii码) Private Sub Form_Activate() picDigit.Print Tab(2); "数 字"; Spc(3); "ASCII码" For i = 0 To 9 picDigit.Print Tab(2); i; Spc(5); Asc(i) Next End Sub

  24. 窗体级变量,存放欲输出字母的Ascii码 FrmEx4_5_2窗体(显示字母的Ascii码) Dim k As Integer Private Sub cmdU_Click() k = 65 tmrAlpha.Enabled = True End Sub cmdL_Click( )k = 97

  25. 使ch和k值在大写字母的Ascii值范围内 For i = 0 To 9 显示大写字母 ch = k + i If ch > 90 Then ch = ch - 26 picAlpha.Print Tab(3); Chr$(ch); Spc(6); ch Next k = k + 1 If k = 91 Then k = k - 26 显示小写字母? Private Sub tmrAlpha_Timer() picAlpha.Cls picAlpha.Print Tab(2); "字母"; Spc(3); "ASCII码" If k <= 90 Then 滚动显示10行大写字母 Else 滚动显示10行小写字母 End If End Sub 122 123

  26. Private Sub cmdStop_Click() If cmdStop.Caption = "暂 停" Then tmrAlpha.Enabled = False cmdStop.Caption = "继 续" Else tmrAlpha.Enabled = True cmdStop.Caption = "暂 停" End If End Sub

  27. Private Sub cmdReturn_Click() tmrAlpha.Enabled = False frmEx4_5_2.Hide frmEx4_5_0.Show End Sub

  28. 4.2 Do While — Loop 语句 • 循环次数已知 • 事先不知道循环次数 For-Next 循环 Do While – Loop 循环

  29. 【例4.6】用Do While – Loop 语句改写 例4.1 — 计算 1 + 2 + 3 + … + 100 的值。

  30. 改写后的代码 Private Sub cmdCal_Click() Dim sum As Integer Dim i As Integer i = 1 Do While i <= 100 sum = sum + i i = i + 1 Loop lblValue.Caption = sum End Sub

  31. No i<=100 Yes sum = sum + i i = i + 1 Do While - Loop语句的执行过程

  32. Do While – Loop 语句常被用于执行条件明确,但事前不知道循环次数的循环中 • 一般语法格式 Do While 循环条件 循环体语句 Loop 前测当型循环,条件为真时执行循环体;否则结束循环

  33. 说明: • 循环体有可能一次也不执行; • 进入Do While - Loop语句前应给循环控制变量设初值(如 i = 1; ),且循环体中必须包含使循环趋于结束的语句(如 i = i + 1;); • 循环体中可使用Exit Do语句随时跳出当前循环,即提前结束Do While - Loop语句。

  34. 单击 单击 显示总分、平均分 【例4.7】输入若干成绩(值为-1时结束输入),计算总分和平均成绩。窗体上有2个命令按钮(cmdInput和cmdCala)、5个标签(lblScore、lblAll、lblSum、lblAve、和lblAverage) 和 1个文本框。 反复输入(-1结束) 以每行3个形式显示成绩

  35. 文本框属性设置

  36. 算法分析 • 使用Do While - Loop语句循环执行成绩的输入、显示和累加操作 输入 sc = InputBox(.....) 显示 txtScore.Text =txtScore.Text & sc 累加 sum = sum + Val(sc) 循环条件 Do While Val( sc ) <> -1

  37. 算法分析 • 文本框中每行输出3个成绩 变量n:当前输入的成绩个数 每输入一个有效成绩: n = n + 1 txtScore.Text =txtScore.Text & sc If n Mod 3 = 0 Then txtScore.Text = … & Chr(13) & Chr(10) End If

  38. 为显示新数据做准备 程序代码 Dim sum As Integer ’ 统计总成绩 Dim ave As Single ’ 存放平均值 Private Sub cmdInput_Click() txtScore.Text = "" lblSum.Caption = "" lblAverage.Caption = "" sc = InputBox("请输入成绩(-1时结束)", " 成绩输入", -1)

  39. 按格式将输入的成绩连接成串 Do While Val(sc) <> -1 n = n + 1 scstr = scstr & Format(sc,"@@@@") If n Mod 3 = 0 Then scstr = scstr & Chr(13) & Chr(10) End If sum = sum + Val(sc) sc = InputBox("请输入成绩(-1时结束)", "成绩输入", -1) Loop

  40. 将成绩串输出到文本框中 txtScore.Text = scstr ave = Format(sum / n, "###.##") End Sub Private Sub cmdCala_Click() lblSum.Caption = sum lblAverage.Caption = Str$(ave) End Sub 计算平均值,并按格式赋予ave

  41. 画同心矩形或圆 【例4.8】绘制图形。窗体上有图片框和4个命令按钮。 随机产生100个点 随机画100条线

  42. X轴 (0,0) (0,Width) (0, Height) ( Height ,Width ) Y轴 算法分析(一) • 确定绘图坐标系 • 缺省设置下,系统将容器左上角坐标视为(0,0),右(下)方向为x(y) 轴的递增方向。 系统坐标系 用户自定义坐标系

  43. (0,0) (1,1) (100,100) • 通过Scale方法可为控件定义新的坐标系统,即用户自定义坐标系。 picShow.Scale (1, 1)-(100, 100)

  44. (x1,y1) (0,y1) (x1,0) (0,0) (x2,0) (x2,y2) (0,y2) Scale方法的调用格式 [对象名].Scale (x1,y1)-(x2,y2)

  45. 算法分析(二) • 使用绘图方法绘制图形 • Pset方法画点 [对象名].PSet [Step](x, y), [color] 画点的位置 (x,y)为相对坐标 画点的颜色,缺省则为对象的前景色

  46. 相对坐标 (x1,y1) – (x2,y2) Step 直线的起始坐标及终点坐标 以(x1,y1)和(x2,y2)为对角绘制空心矩形 以(x1,y1)和(x2,y2)为对角绘制实心矩形 • Line方法绘制直线或矩形 [对象名].Line (x1,y1) – (x2,y2) , 颜色 , BF , B

  47. (0,0) (10,10) 举例 Scale (0, 0)-(10, 10) Line (3, 1)-(1, 3) Line (1, 3)-Step(6, 0) Line -(9, 1) Line -Step(-6, 0) Line (1, 3)-(7, 9), , B Line -(9, 7) Line -Step(0, -6) Line (3, 5)-(5, 9), QBColor(9), BF

  48. 圆半径 圆心坐标 纵横比 起始角和终止角 ( 0到2 ) • Circle方法画圆、椭圆或弧 [对象名].Circle [Step](x, y) , radius [,color] , , , aspect , start , end , ★ 绘制椭圆 ★ 绘制圆弧 ★ 绘制扇形 在start或end前添加负号,将使圆心和圆弧端点连接

  49. 说明: • 调用Circle方法时可以省略语法中的某些参数,但参数前用于分隔各参数的逗号不能省 • 参数start和end使用的单位是弧度

  50. 算法分析(三) • 与绘图有关的属性设置 • DrawWidth —— 绘图线的宽度 picShow.DrawWidth = 2 设置图片框中所绘线条的宽度为 2个像素 • ScaleWidth和ScaleHeight —— 设置或返回对象内部水平和垂直方向的大小

More Related