1 / 40

Visual Basic 程序设计教程

Visual Basic 程序设计教程. 机械工业出版社同名教材 配套电子教案. 2003 年 6 月. 第 5 章 循环结构程序设计. 5.1 循环结构程序设计的概念 5.2 Do…Loop 语句 5.2.1 前测型 Do…Loop 循环 5.2.2 后测型 Do…Loop 循环 5.3 For...Next 语句 5.4 列表框与组合框 5.4.1 列表框 5.4.2 组合框 5.4 算法举例 习题五. 5.2.1 前测型 Do…Loop 循环. 其语法为 Do [{ While | Until }〈 条件 〉]

Télécharger la présentation

Visual Basic 程序设计教程

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. Visual Basic 程序设计教程 机械工业出版社同名教材配套电子教案 2003 年 6月

  2. 第5章 循环结构程序设计 5.1循环结构程序设计的概念 5.2Do…Loop语句 5.2.1 前测型Do…Loop循环 5.2.2 后测型Do…Loop循环 5.3 For...Next语句 5.4列表框与组合框 5.4.1 列表框 5.4.2 组合框 5.4算法举例 习题五

  3. 5.2.1 前测型Do…Loop循环 其语法为 Do [{ While | Until }〈条件〉] [〈语句列1〉] [Exit Do] [〈语句列2〉] Loop 【例5-1】求累加和1 + 2 + 3 +…+ 100(如图5-2)。

  4. 设计步骤如下: 窗体界面的设计参见前面章节,这里仅给出命令按钮的Click事件代码: Private Sub Command1_Click() Dim s As Integer, n As Integer s = 0: n = 1 Do While n <= 100 s = s + n n = n + 1 Loop Label2.Caption = "1+2+3+…+100 = " & s End Sub

  5. 还可以改为直到型: Private Sub Command1_Click() Dim s As Integer, n As Integer s = 0: n = 1 Do Until n > 100 s = s + n n = n + 1 Loop Label2.Caption = "1+2+3+…+100 = " & s End Sub

  6. 【例5-2】输入一个正整数,利用“当型”循环判断是否素数。【例5-2】输入一个正整数,利用“当型”循环判断是否素数。 设计步骤如下: 窗体界面的设计参见前面章节,这里给出命令按钮的Click事件代码: Private Sub Command1_Click() Dim n As Long Select Case Val(Text1.Text) Case Is < 3 MsgBox "请输入一个大于2的整数!", vbInformation + vbOKOnly, "注意" Case Is > 2147483647 MsgBox "此数太大!", vbInformation + vbOKOnly, "注意" Case Else n = Val(Text1.Text) s = 0: i = 2

  7. Do While i <= Sqr(n) And s = 0 If n Mod i = 0 Then s = 1 Else i = i + 1 End If Loop If s = 0 Then a = "是一个素数" Else a = "不是素数" End If Label1.Caption = Str(n) & a End Select Text1.SetFocus End Sub

  8. 另外,为了使用文本框得到焦点后,文本立即被选中,编写Text1的GotFocus事件代码如下:另外,为了使用文本框得到焦点后,文本立即被选中,编写Text1的GotFocus事件代码如下: Private Sub Text1_GotFocus() Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub

  9. 5.2.2 后测型Do…Loop循环 其语法为 Do [〈语句列1〉] [Exit Do] [〈语句列2〉] Loop [{While | Until} 〈条件〉] 【例5-3】输入有效数字的位数,利用下述公式计算圆周率π的近似值:

  10. 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码。 根据流程图,可以写出命令按钮Command1的Click事件代码为 Private Sub Command1_Click() Dim m As Integer m = Val(Text1.Text) p = 0#: s = 2#: e = 0.1 ^ m Do t = s : p = Sqr(2 + p) : s = s * 2 / p Loop Until Abs(t – s) < 0.1 ^ m f = String(m – 1, "#") Text2.Text = Format(s, "0." & f) Text1.SetFocus End Sub

  11. 文本框Text1的GotFocus事件代码: Private Sub Text1_GotFocus() Text1.SelStart = 0 Text1.SelLength = Len(Text1.Text) End Sub

  12. 【例5-4】输入两个正整数,求它们的最大公约数。【例5-4】输入两个正整数,求它们的最大公约数。 设计步骤如下。 窗体界面的设计如图5-10所示,这里给出命令按钮的Click事件代码: Private Sub Command1_Click() m = Val(Text1.Text) n = Val(Text2.Text) If n * m = 0 Then MsgBox "两数都不能为0!" Exit Sub End If If m < n Then t = m: m = n: n = t End If

  13. Do r = m Mod n m = n n = r Loop While r <> 0 Text3.Text = m End Sub

  14. 5.3 For...Next语句 其语法为 For〈循环变量〉=〈初值〉To〈终值〉[Step〈步长〉] [〈语句列1〉] [Exit For] [〈语句列2〉] Next [〈循环变量〉] 【例5-5】利用For循环结构显示1000以内的所有能被37整除的自然数(如图5-13所示)。 设计步骤如下: (1) 窗体界面的设计与属性设置。 (2) 编写代码。

  15. 编写命令按钮的Click事件代码: Private Sub Command1_Click() a = "" For n = 1 To 1000 If n Mod 37 = 0 Then a = a & Str(n) & vbCrLf End If Next Text1.Text = a End Sub

  16. 【例5-6】求从1000到1100之间的所有素数。 窗体界面的设计参见图5-15,这里给出命令按钮的Click事件代码: Private Sub Command1_Click() a = "" For n = 1001 To 1100 Step 2 s = 0 For i = 2 To Int(Sqr(n)) If n Mod i = 0 Then s = 1 Exit For End If Next If s = 0 Then a = a & Str(n) & vbCrLf Next Text1.Text = a End Sub

  17. 5.4 列表框与组合框 【例5-7】将例5-6中的文本框改为列表框(如图5-16所示)。 将窗体中的文本框换为列表框,无需修改列表框的属性,只需修改命令按钮的Click事件代码: Private Sub Command1_Click() List1.Clear For n = 1001 To 1100 Step 2 s = 0 For i = 2 To Int(Sqr(n)) If n Mod i = 0 Then s = 1 : Exit For End If Next If s = 0 Then List1.AddItem n ' 使用列表框的Add方法增加列表项 Next End Sub

  18. 【例5-8】“同构数”是指这样的整数:它恰好出现在其平方数的右端,例如1和5就是这样的数。试找出1~9999之间的全部“同构数”(如图5-17所示)。【例5-8】“同构数”是指这样的整数:它恰好出现在其平方数的右端,例如1和5就是这样的数。试找出1~9999之间的全部“同构数”(如图5-17所示)。 窗体界面的设计参见图5-17,这里给出命令按钮的Click事件代码: Private Sub Command1_Click() List1.Clear For n = 1 To 9999 Select Case n Case n ^ 2 Mod 10 List1.AddItem Format(n, "@@@@@") &Format(n ^ 2, "@@@@@@@@@@") Case n ^ 2 Mod 100 List1.AddItem Format(n, "@@@@@") & Format(n ^ 2, "@@@@@@@@@@")

  19. Case n ^ 2 Mod 1000 List1.AddItem Format(n, "@@@@@") & Format(n ^ 2, "@@@@@@@@@@") Case n ^ 2 Mod 10000 List1.AddItem Format(n, "@@@@@") & Format(n ^ 2, "@@@@@@@@@@") End Select Next End Sub

  20. 【例5-9】小学生做加减法的算术练习程序。计算机连续地随机给出两位数的加减法算术题,要求学生回答,答对的打“√”,答错的打“×”。将做过的题目存放在列表框中备查,并随时给出答题的正确率(如图5-19所示)。【例5-9】小学生做加减法的算术练习程序。计算机连续地随机给出两位数的加减法算术题,要求学生回答,答对的打“√”,答错的打“×”。将做过的题目存放在列表框中备查,并随时给出答题的正确率(如图5-19所示)。 设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性 (3) 编写代码。

  21. 出题部分由窗体的激活(Activate)事件代码完成:出题部分由窗体的激活(Activate)事件代码完成: Private Sub Form_Activate() Randomize (Time) a = Int(10 + 90 * Rnd) b = Int(10 + 90 * Rnd) p = Int(2 * Rnd) Select Case p Case 0 Label1.Caption = a & " + " & b & " = " Text1.Tag = a + b ' 将本题答案放入Text1.Tag中 Case 1 If a < b Then t = a: a = b: b = t Label1.Caption = a & " – " & b & " = " Text1.Tag = a – b ' 将本题答案放入Text1.Tag中

  22. End Select Form1.Tag = Form1.Tag + 1 Text1.SelStart = 0 Text1.Text = "" End Sub “关闭”按钮的Click事件代码: Private Sub Command1_Click() Unload Me End Sub 答题部分由文本框的按健(KeyPress)事件代码完成:

  23. Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then fm = "!@@@@@@@@@@@@@@" If Val(Text1.Text) = Text1.Tag Then Item = Format(Label1.Caption & Text1.Text, fm) & " √" List1.Tag = List1.Tag + 1 Else Item = Format(Label1.Caption & Text1.Text, fm) & " ×" End If List1.AddItem Item, 0 ' 将题目和回答插入到列表框中的第1项 Label2.Caption = "共" & Form1.Tag & "题," & Chr(13) & "正确率为:" Label3.Caption = Format(List1.Tag / Form1.Tag, "#0.0#%") Form_Activate ' 调用出题代码 End If End Sub

  24. 【例5-10】利用循环结构和列表框控件,设计的“选项移动”窗体。【例5-10】利用循环结构和列表框控件,设计的“选项移动”窗体。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写事件代码。

  25. 编写命令按钮的Click事件代码: Private Sub Command1_Click() i = 0 Do While i < List1.ListCount If List1.Selected(i) = True Then List2.AddItem List1.List(i) List1.RemoveItem i Else i = i + 1 End If Loop End Sub

  26. Private Sub Command2_Click() For i = 0 To List1.ListCount - 1 List2.AddItem List1.List(i) Next List1.Clear End Sub Private Sub Command3_Click() i = 0 Do While i < List2.ListCount If List2.Selected(i) = True Then List1.AddItem List2.List(i) List2.RemoveItem i Else i = i + 1 End If Loop End Sub

  27. Private Sub Command4_Click() For i = 0 To List2.ListCount - 1 List1.AddItem List2.List(i) Next List2.Clear End Sub 5.4.2 组合框 【例5-11】将例5-9算术练习中的列表框改为组合框(下拉列表框),如图5-22所示。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写程序代码 修改文本框Text1的按健(KeyPress)事件代码:

  28. Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Fm = "!@@@@@@@@@@@@@@" If Text1.Text = Text1.Tag Then Item = Format(Label1.Caption & Text1.Text, Fm) & " √" Combo1.Tag = Combo1.Tag + 1 Else Item = Format(Label1.Caption & Text1.Text, Fm) & " ×" End If Combo1.AddItem Item, 0 Combo1.ListIndex = 0 Label3.Caption = "共" & Form1.Tag & "题,正确率为:" Label2.Caption = Format(Combo1.Tag / Form1.Tag, "#0.0#%") Form_Activate End If End Sub

  29. 编写命令按钮Command2的Click事件代码: Private Sub Command2_Click() Form1.Tag = 0# Combo1.Tag = 0# Combo1.Clear Label3.Caption = "欢迎重新开始!" Label2.Caption = "" Form_Activate Text1.SetFocus End Sub 其他代码同例5-9。

  30. 2. 简单组合框 【例5-12】“简易抽奖机”。在组合框中输入号码,按“开始”按钮可以得到中奖的号码(如图5-23所示)。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写事件代码。 编写组合框Combo1的按健(KeyPress)事件代码:

  31. Private Sub Combo1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' 按回车键后,接收输入的选项 Combo1.AddItem Combo1.Text, 0 Combo1.SelStart = 0 Combo1.SelLength = Len(Combo1.Text) End If If KeyAscii = 27 Then ' 按〈Esc〉键后,移去选项 If Combo1.ListIndex <> -1 Then Combo1.RemoveItem Combo1.ListIndex End If End If End Sub 编写命令按钮Command1的Click事件代码,使之可以随机地抽取奖号: Private Sub Command1_Click() Randomize n = Combo1.ListCount a = Int(Rnd * n) Combo1.ListIndex = a MsgBox "中奖的号码是:" & Chr(13) & Combo1.Text, 0, "恭喜!" End Sub

  32. 3. 下拉组合框 【例5-13】在例5-12中使用下拉组合框,可以更加节省空间(如图5-25所示)。 设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写事件代码。

  33. Private Sub Combo1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' 按回车键后,接收输入的选项 Combo1.AddItem Combo1.Text, 0 Combo1.SelStart = 0 Combo1.SelLength = Len(Combo1.Text) Text1.Text = Combo1.ListCount End If If KeyAscii = 27 Then ' 按〈Esc〉键后,移去选项 If Combo1.ListIndex <> -1 Then Combo1.RemoveItem Combo1.ListIndex Text1.Text = Combo1.ListCount End If End If End Sub

  34. 编写命令按钮Command1的Click事件代码,使之可以随机地抽取奖号:编写命令按钮Command1的Click事件代码,使之可以随机地抽取奖号: Private Sub Command1_Click() Randomize n = Combo1.ListCount a = Int(Rnd * n) Combo1.ListIndex = a Label1.Caption = "中奖的号码是:" & Combo1.Text End Sub 5.5 算法举例 【例5-14】“水仙花数”是指一个3位数,其各位数的立方和等于该数,如:153 = 13 + 53 + 33

  35. 窗体界面的设计参见前面例子,这里给出命令按钮的Click事件代码:窗体界面的设计参见前面例子,这里给出命令按钮的Click事件代码: Private Sub Command1_Click() Dim p As Integer List1.Clear For n = 100 To 999 a = Int(n / 100) b = Int((n – a * 100) / 10) c = n - (a * 100 + b * 10) p = a ^ 3 + b ^ 3 + c ^ 3 If p = n Then List1.AddItem p Next End Sub

  36. 【例5-15】马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,一共花去50先令。问男人、女人以及小孩各有几人?如图5-28所示。【例5-15】马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,一共花去50先令。问男人、女人以及小孩各有几人?如图5-28所示。

  37. 窗体界面的设计参见前面例子,这里给出命令按钮的Click事件代码:窗体界面的设计参见前面例子,这里给出命令按钮的Click事件代码: Private Sub Command1_Click() List1.Clear For x = 1 To 16 For y = 1 To 24 z = 30 – x – y If 3 * x + 2 * y + z = 50 Then p = Format(x, "@@@") & Format(y, "@@@@@") & Format(z, "@@@@@") List1.AddItem p End If Next Next End Sub

  38. 习题五 5.1 输出101~500之间的所有奇数,奇数之和。 5.2 输出100~200之间不能被3整除的数。 5.3 输入初始值,输出100个不能被3整除的数。 5.4 设计程序,求s = 1 + (1 + 2) + (1 + 2 + 3) + … + (1 + 2 + 3 + … + n)的值。 5.5 设s = 1×2×3×…×n,求s不大于400000时最大的n。 5.6 设s = 11×22×33×…×nn,求s不大于400000时最大的n。 5.7 找出1~1000之间的全部“同构数”。 5.8 “完备数”是指一个数恰好等于它的因子之和,如6的因子为1、2、3,而6 = 1 + 2 + 3,因而6就是完数。编制程序,找出1~1000之间的全部“完备数”。 5.9 编制程序,求出所有小于或等于100的自然数对。自然数对是指两个自然数的和与差都是平方数,如8与17的和8 + 17 = 25与其差17 – 8 = 9都是平方数,则8和17称自然数对。

  39. 5.10 我国古代数学家张丘建在“算经”里提出一个世界数学史上有名的百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问鸡翁、母、雏各几何? 5.11 利用ex的下述近似公式计算e(直到最后一项小于10-6为止)。 5.12 编程序在窗体上输出的图形如图5-30所示。 5.13 编程序在窗体上输出的图形如图5-31所示。 图5-30 题5.12 图5-31 题5.13

  40. 5.14 求下述数列的前n项之和: ,,,,,… 5.15 验证“哥德巴赫猜想”。1742年6月,德国数学家哥德巴赫(C.Goldbah 1690-1764)在给彼得堡的大数学家欧拉的信中提出一个问题:任何大于6的偶数均可以表示为两个素数之和吗?欧拉复信道:“任何大于6的偶数均可以表示为两个素数之和,这一猜想我还不能证明,但我确信无疑地认为这是完全正确的定理。”这就是至今尚未被证明的哥德巴赫猜想。 5.16 输出1~100之间的平方、平方根、自然对数、e指数的数学用表。

More Related