《VisualBasic程序设计教程》由会员分享,可在线阅读,更多相关《VisualBasic程序设计教程(40页珍藏版)》请在金锄头文库上搜索。
1、Visual Basic Visual Basic 程序设计教程程序设计教程机械工业出版社同名教材 配套电子教案2003 年 6月第5章 循环结构程序设计5.15.1 循环结构程序设计的概念循环结构程序设计的概念5.25.2 DoDoLoopLoop语句语句5.2.1 5.2.1 前测型前测型DoDoLoopLoop循环循环5.2.2 5.2.2 后测型后测型DoLoopDoLoop循环循环 5.3 5.3 For.NextFor.Next语句语句 5.45.4 列表框与组合框列表框与组合框5.4.1 5.4.1 列表框列表框5.4.2 5.4.2 组合框组合框5.45.4 算法举例算法举例习
2、题五习题五 5.2.1 前测型DoLoop循环其语法为Do While | Until 条件语句列1Exit Do语句列2Loop【例5-1】求累加和1 + 2 + 3 + 100(如图5-2)。设计步骤如下:窗体界面的设计参见前面章节,这里仅给出命令按钮的Click事件代码 :Private Sub Command1_Click()Dim s As Integer, n As Integers = 0: n = 1Do While n 100s = s + nn = n + 1LoopLabel2.Caption = “1+2+3+100 = “ & sEnd Sub【例5-2】输入一个正整
3、数,利用“当型”循环判断是否素数。设计步骤如下:窗体界面的设计参见前面章节,这里给出命令按钮的Click事件代码:Private Sub Command1_Click()Dim n As LongSelect Case Val(Text1.Text)Case Is 2147483647MsgBox “此数太大!“, vbInformation + vbOKOnly, “注意“Case Elsen = Val(Text1.Text)s = 0: i = 2Do While i 0Text3.Text = mEnd Sub5.3 For.Next语句其语法为For循环变量=初值To终值Step步长
4、 语句列1Exit For语句列2 Next 循环变量【例5-5】利用For循环结构显示1000以内的所有能被37整除的自然数(如图5-13所示)。设计步骤如下:(1) 窗体界面的设计与属性设置。 (2) 编写代码。编写命令按钮的Click事件代码:Private Sub Command1_Click()a = “For n = 1 To 1000If n Mod 37 = 0 Thena = a & Str(n) & vbCrLfEnd IfNextText1.Text = aEnd Sub【例5-6】求从1000到1100之间的所有素数。窗体界面的设计参见图5-15,这里给出命令按钮的Cl
5、ick事件代码:Private Sub Command1_Click()a = “For n = 1001 To 1100 Step 2s = 0For i = 2 To Int(Sqr(n)If n Mod i = 0 Thens = 1Exit ForEnd IfNextIf s = 0 Then a = a & Str(n) & vbCrLfNextText1.Text = aEnd Sub5.4 列表框与组合框 【例5-7】将例5-6中的文本框改为列表框(如图5-16所示)。将窗体中的文本框换为列表框,无需修改列表框的属性,只需修改命令按 钮的Click事件代码: Private Su
6、b Command1_Click()List1.ClearFor n = 1001 To 1100 Step 2s = 0For i = 2 To Int(Sqr(n)If n Mod i = 0 Thens = 1 : Exit ForEnd IfNextIf s = 0 Then List1.AddItem n 使用列表框的Add方法增加列表项Next End Sub【例5-8】“同构数”是指这样的整数:它恰好出现在其平方数的右端,例 如1和5就是这样的数。试找出19999之间的全部“同构数”(如图5-17所示)。窗体界面的设计参见图5-17,这里给出命令按钮的Click事件代码:Priv
7、ate Sub Command1_Click()List1.ClearFor n = 1 To 9999Select Case nCase n 2 Mod 10List1.AddItem Format(n, “) &Format(n 2, “)Case n 2 Mod 100List1.AddItem Format(n, “) & Format(n 2, “)Case n 2 Mod 1000List1.AddItem Format(n, “) & Format(n 2, “)Case n 2 Mod 10000List1.AddItem Format(n, “) & Format(n 2,
8、“)End SelectNextEnd Sub【例5-9】小学生做加减法的算术练习程序。计算机连续地随机给出两 位数的加减法算术题,要求学生回答,答对的打“”,答错的打“”。 将做过的题目存放在列表框中备查,并随时给出答题的正确率(如图5 -19所示)。设计步骤如下:(1) 建立应用程序用户界面。 (2) 设置对象属性 (3) 编写代码。出题部分由窗体的激活(Activate)事件代码完成:Private Sub Form_Activate()Randomize (Time)a = Int(10 + 90 * Rnd)b = Int(10 + 90 * Rnd)p = Int(2 * Rnd)
9、Select Case pCase 0Label1.Caption = a & “ + “ & b & “ = “Text1.Tag = a + b 将本题答案放入Text1.Tag中Case 1If a -1 ThenCombo1.RemoveItem Combo1.ListIndexEnd IfEnd If End Sub编写命令按钮Command1的Click事件代码,使之可以随机地抽取奖号: Private Sub Command1_Click()Randomizen = Combo1.ListCounta = Int(Rnd * n)Combo1.ListIndex = aMsgBo
10、x “中奖的号码是:“ & Chr(13) & Combo1.Text, 0, “恭喜!“ End Sub3. 下拉组合框【例5-13】在例5-12中使用下拉组合框,可以更加节省空间(如图5-25所示) 。设计步骤如下:(1) 建立应用程序用户界面与设置对象属性。 (2) 编写事件代码。Private Sub Combo1_KeyPress(KeyAscii As Integer)If KeyAscii = 13 Then 按回车键 后,接收输入的选项Combo1.AddItem Combo1.Text, 0Combo1.SelStart = 0Combo1.SelLength = Len(C
11、ombo1.Text)Text1.Text = Combo1.ListCountEnd IfIf KeyAscii = 27 Then 按Esc 键后,移去选项If Combo1.ListIndex -1 ThenCombo1.RemoveItem Combo1.ListIndexText1.Text = Combo1.ListCountEnd IfEnd IfEnd Sub编写命令按钮Command1的Click事件代码,使之可以随机地抽 取奖号:Private Sub Command1_Click()Randomizen = Combo1.ListCounta = Int(Rnd * n)
12、Combo1.ListIndex = aLabel1.Caption = “中奖的号码是:“ & Combo1.TextEnd Sub5.5 算法举例【例5-14】“水仙花数”是指一个3位数,其各位数的立方和等于该数,如:153 = 13 + 53 + 33窗体界面的设计参见前面例子,这里给出命令按钮的Click事件代码:Private Sub Command1_Click()Dim p As IntegerList1.ClearFor n = 100 To 999a = Int(n / 100)b = Int(n a * 100) / 10)c = n - (a * 100 + b * 10
13、)p = a 3 + b 3 + c 3If p = n Then List1.AddItem pNextEnd Sub【例5-15】马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花了3先令,每个女人花了2先令,每个小孩花了1先令,一共花去50先令。问男人、女人以及小孩各有几人?如图5-28所示。窗体界面的设计参见前面例子,这里给出命令按钮的Click事件代码 :Private Sub Command1_Click()List1.ClearFor x = 1 To 16For y = 1 To 24z = 30 x yIf 3 * x + 2
14、* y + z = 50 Thenp = Format(x, “) & Format(y, “) & Format(z, “)List1.AddItem pEnd IfNextNextEnd Sub习题五5.1 输出101500之间的所有奇数,奇数之和。5.2 输出100200之间不能被3整除的数。5.3 输入初始值,输出100个不能被3整除的数。5.4 设计程序,求s = 1 + (1 + 2) + (1 + 2 + 3) + + (1 + 2 + 3 + + n) 的值。5.5 设s = 123n,求s不大于400000时最大的n。5.6 设s = 112233nn,求s不大于400000
15、时最大的n。5.7 找出11000之间的全部“同构数”。5.8 “完备数”是指一个数恰好等于它的因子之和,如6的因子为1、2、 3,而6 = 1 + 2 + 3,因而6就是完数。编制程序,找出11000之间的全 部“完备数”。5.9 编制程序,求出所有小于或等于100的自然数对。自然数对是指两个 自然数的和与差都是平方数,如8与17的和8 + 17 = 25与其差17 8 = 9都 是平方数,则8和17称自然数对。5.10 我国古代数学家张丘建在“算经”里提出一个世界数学史上有名的 百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百 钱买百鸡,问鸡翁、母、雏各几何?5.11 利用ex的下述近似公式计算e(直到最后一项小于10-6为止)。5.12 编程序在窗体上输出的图形如图5-30所示。5.13 编程序在窗体上输出的图形如图5-31所示。图5-30 题5.12 图5-31 题5.135.14 求下述数列的前n项之和:,5.15 验证“哥德巴赫猜想”。1742年6月,德国数学家哥德巴赫(C.Goldbah 1690-1764)在给彼得堡的大数学家欧拉的信中提出一个问题:任何大于6