• 沒有找到結果。

Visual Basic语言程序设计实验教程 - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "Visual Basic语言程序设计实验教程 - 万水书苑-出版资源网"

Copied!
21
0
0

加載中.... (立即查看全文)

全文

(1)第 5 章 循环结构程序设计. 一、实验目的 (1)掌握 For 语句的使用。 (2)掌握 Do While/Until…Loop 与 Do…Loop While/Until 两种循环语句的使用。 (3)加深理解循环的概念,掌握循环的规则及其执行过程。 (4)掌握多重循环的规则和程序设计方法。 (5)学会如何控制循环条件,防止死循环或不循环。 二、相关知识 在指定条件下多次重复执行一组相同的语句可以通过循环来实现。Visual Basic 提供了 下面几种形式的循环语句: 1.Do…Loop 循环语句 Do. While/Until<条件>. Do. 语句块 [Exit Do]. 语句块 或. 语句块 Loop. [Exit Do] 语句块 Loop While/Until<条件>. 2.FOR 循环语句 For 循环变量=初值 To 终值[Step 步长] 语句块 [Exit For] 语句块 Next 循环变量 3.循环嵌套的注意事项 内循环和外循环的变量不能同名;外循环必须完全包含内循环,不能交叉;循环的转 移遵循“允许循环内转移,允许转出,禁止转入”的原则。 4.列表框控件 列表框控件显示一个项目列表,让用户从其中选择一项或多项。列表框最主要的特点 是只能从其中选择,而不能直接写入或修改其中的内容,因此,它是从现有选项快速选择 的好工具。 列表框的 AddItem 方法用于添加列表框中的项目;RemoveItem 方法用于删除列表框中 的项目。通过查看 ListIndex 属性可以取得用户选中的列表框项目的索引;对 List、ListCount.

(2) 第5章. 循环结构程序设计. 35. 和 ListIndex 属性进行设置则可以对列表框中的项目进行操作。 5.组合框控件 组合框是文本框和列表框组合而成的控件,它有三种不同的类型,可以通过组合框的 Style 属性设置。组合框是输入控件中使用相当广泛的一种,它比文本框规范,比列表框灵 活而节省空间,所以使用组合框规范内容的输入是一个好的选择。 三、实验内容 实例 1. 求从键盘输入的自然数 n 的阶乘。程序运行时分别输入 5、15,观察结果。. 流程如图 5-1 所示。 开始. 输入 n. s=1 i=1. i<=n. 否. 是 s=s*i. i=i+1 输出阶乘结果 s. 结束 图 5-1. 实例 1 流程图. 程序代码如下: Private Sub Form_Click() Dim s As Single,n As Integer,i As Integer n = Val(InputBox("输入自然数 n","求 n 的阶乘",0)) s = l i =. 1. Do While i<=n s= i. s * =i. +. i 1.

(3) Visual Basic 语言程序设计实验教程. 36. Loop Print "n = ";n,n;"!=";s End Sub 程序解读:在该程序中,s 用来存放累乘积的结果,因此在初始化时 s=1;i 是控制循 环的循环变量;i<=n 是循环条件;s =s*i,i= i+1 是循环体;因为循环结构的关键字是 While, 所以当 i<=n 条件满足时,执行循环体,当 i>n 时,退出循环,执行后继语句输出结果。 如果将程序中的 Do While 改成 Do Until,程序的其他地方应该做怎样的修改呢?请自 己完成。 实例 2. 计算 e,要求其误差小于 0.00001,公式如下:. e =1+. 1 1 1 1 + + +"+ +" n! 2! 3! n!. 分析:该实例涉及两个问题。 (1)用循环结构求级数和的问题。求级数和的项数和精度都是有限的,否则有可能 1 会造成溢出或死循环。这道题是使用精度控制循环。因为事先我们不知道要循环多少次 n! 才会小于 0.00001,所以循环语句只能选择用于人为约束条件控制循环的 Do Loop 语句。 (2)累加与连乘。累加是在原有和的基础上再增加一个数,如 s=s+i。连乘则是在原 有积的基础上再乘以一个数,如 p=p*i。为了保证程序运行能得到正确的结果,一般在循 环体外对存放累加和的变量清零,对存放连乘的变量置 1。 流程图如图 5-2 所示,程序运行结果如图 5-3 所示。 开始. e=0:i=0:n=1:t=1. t > 10^-5. 否. 是 e = e+t. i =i+1. n=n*i. t=1/n. 输出结果. 结束 图 5-2. 实例 2 流程图.

(4) 第5章. 图 5-3. 循环结构程序设计. 37. 程序运行界面. 操作步骤: (1)新建一个标准 EXE 工程。 (2)在窗体上放置一个标签和一个命令按钮。 (3)双击命令按钮,进入代码编辑窗口,编写程序代码。. Private Sub Command1_Click() Dim i%, n&, t!, e! e = 0: i = 0: n = 1: t = 1 Do While t > 0.00001 e=e+t i=i+1 n=n*i t=1/n Loop Label1.Caption = Label1.Caption & e & "(计算了" & i & "项的和)" End Sub Private Sub Form_Load() Command1.Caption = "计算 e 的近似值" Label1.Caption = "e 的近似值=" End Sub (4)运行调试程序,直到满意为止。 实例 3. 在文本框中输入字符串,统计其中数字字符出现的个数。. 分析:本题需要对输入的字符串的每个字符逐个进行判断,因此判断语句需要重复执 行,这就需要用循环结构来控制。循环体的内容是从字符串中取一个字符,再判断该字符 的类型;循环次数是已知的,就是字符串中的字符个数,因此使用 For Next 循环语句。 流程如图 5-4 所示,程序运行结果如图 5-5 所示。 代码如下:. private Sub Command1_Click() Dim c As String, c1 As String, p As Integer, n As Integer c = Text1.Text For p = 1 To Len(c) c1 = Mid(c, p, 1).

(5) Visual Basic 语言程序设计实验教程. 38. If c1 >= "0" And c1 <= "9" Then n = n + 1 Next p Label1.Caption = ". 数字字符的个数为:" & Str(n). End Sub 开始. c=Text1.Text. p=1. p<=len(c). 否. 是 c1=Mid(c,p,1). c1 是数字字符. 否. 是 n=n+1. p=p+1. 显示结果. 结束 图 5-4. 图 5-5. 实例 4. 实例 3 流程图. 实例 3 程序运行界面. 单击窗体,在窗体上画出如图 5-6 所示由星号组成的三角形(三角形必须由. 循环语句计算生成)。.

(6) 第5章. 图 5-6. 循环结构程序设计. 39. 实例 4 程序运行界面. 分析:本题需要输出 6 行内容,重复 6 次在每行输出空格和星号,所以控制结构用 For. Next 循环语句控制。循环次数与总行数相等,为 6 次;循环体部分就是每行输出空格和星 号,空格个数与该行的行号之间的关系为 6-行号,星号个数与该行的行号之间的关系为 2* 行号-1。 程序流程如图 5-7 所示。 开始. i=1. i<=6. 否. 是 打印每行所需个数的星. 结束 图 5-7. 实例 4 流程图. 代码如下:. Private Sub Form_Click() Dim i As Integer For i = 1 To 6 Print Tab(16 - i); String(2*i-1, "*") Next i End Sub 实例 5 将可打印的 ASCII 码制成表格输出,使每个字符与它的编码值对应起来,每 行打印 7 个字符。 分析:在 ASCII 码中,只有“ ”(空格)到“~”是可打印的字符,其余为不可打印 的控制字符。可打印的字符的编码值为 32~126,可通过 Chr()函数将编码值转换成对应的 字符输出。.

(7) Visual Basic 语言程序设计实验教程. 40. 程序流程如图 5-8 所示。 开始. asc=32. asc<=126. 否. 是 在图片框中打印字符及其 ASCII 值. i=i+1. 结束 否. i=7 是 换行. asc=asc+1. 图 5-8. 实例 5 流程图. 操作步骤: (1)新建一个标准 EXE 工程。 (2)在窗体上画一个图片框,并使图片框与窗体几乎一样大。 (3)双击图片框,进入代码编辑窗口,编写图片框的单击事件驱动程序,其代码如下:. Private Sub Picture1_Click() Dim Asc As Integer, i As Integer Picture1.Print " ASCII 码对照表" For Asc = 32 To 126 Picture1.Print Tab(7 * i + 2); Chr(Asc); "="; Asc; i=i+1 If i = 7 Then i = 0: Picture1.Print Next End Sub Private Sub Form_Load() Picture1.BackColor = &HFFFFFF End Sub (4)运行调试程序,直到满意为止。.

(8) 第5章. 循环结构程序设计. 41. 程序解读:在该程序中,循环次数是确定的,就是将 ASCII 代码为 32~126 的字符逐 个输出,因此使用 For Next 循环来控制;循环体中三条语句的作用分别是:Picture1.Print 用于输出字符,其中的 Tab 用于指定输出位置,变量 i 的作用是记录在一行中已经输出的 字符个数,If 语句用于判断在一行中是否已经输出了 7 个字符,如果输出了 7 个字符,就 换行输出。程序运行界面如图 5-9 所示。. 图 5-9. 实例 6. 实例 5 程序运行界面. 在窗体上画一个标签和一个列表框。程序运行后,在列表框中添加若干列表. 项。当双击列表框中的某个项目时,在标签 Label1 中显示选中的项目,如图 5-10 所示。. 图 5-10. 实例 6 程序运行图. 分析:本题涉及到对列表框的使用。列表框的重要属性有存放列表框中各项内容的. List(),存放选中项序号的 ListIndex,存放选中内容的 Text,存放列表框中总项数的 ListCount。 列表框的重要方法有添加项的 AddItem,删除项的 RemoveItem,删除所有内容的 Clear。 操作步骤: (1)新建一个标准 EXE 工程。 (2)在窗体上画一个标签和一个列表框。 (3)进入代码编辑窗口,编写程序代码。. Private Sub Form_Load() List1.AddItem "北京" List1.AddItem "上海" List1.AddItem "河北" End Sub.

(9) Visual Basic 语言程序设计实验教程. 42. Private Sub List1_Click() Label1.Caption = List1.Text End Sub (4)运行调试程序,直到满意为止。 四、实验程序设计与调试 (一)看图写程序. 1.统计资料显示,2005 年日本 GDP 为 4,7528 亿美元,年增长率为 2.8% ;中国 GDP 为 2,2257 亿美元,年增长率为 9.8%。编程计算,若年增长率保持不变,多少年后中国 GDP 将超过日本?流程如图 5-11 所示,请写出相应代码,并上机调试运行。程序运行界面如图. 5-12 所示。 开始. Jp=47528:Cn=22257:Y=0. Jp=Jp*1.028. Cn=Cn*1.098. Y=Y+1. Cn<=Jp. 否. 是 在标签中显示结果. 结束 图 5-11. 图 5-12. 看图写程序第 1 题流程图. 看图写程序第 1 题程序运行界面.

(10) 第5章. 循环结构程序设计. 43. 2.有一堆苹果,个数在 50 至 500 之间,按 5 人均分余 4 个,按 6 人均分余 3 个,按 7 人均分余 2 个,用穷举法设计程序,输出苹果有多少个?共有几种分法?流程如图 5-13 所示,请写出相应程序,并上机调试。程序运行界面如图 5-14 所示。 开始. n=0. k=50. k<=500. 否. 是 k mod 5=4 and k mod 6=3 and k mod 7=2. 否. 是 n=n+1. print k. k=k+1. 输出 n. 结束 图 5-13. 图 5-14. 看图写程序第 2 题流程图. 看图写程序第 2 题程序运行界面. 3.在窗体上已经建立了两个文本框(Text1 及 Text2)和一个命令按钮(Command1), 用户在文本框 Text1 中输入文本,单击命令按钮后,将文本框 Text1 中的非英文字母替换 成“*” ,并按输入顺序显示在文本框 Text2 中。例如,输入“12aA3b4B5”,在文本框 Text2.

(11) Visual Basic 语言程序设计实验教程. 44. 中显示为“**aA*b*B*”。流程如图 5-15 所示,请写出相应程序,并上机调试。程序运行 界面如图 5-16 所示。 开始. s=Text1.Text. t=" ". k=1. k<=len(s). 否. 是 c=Mid(s, k, 1). c 是非英文字符. 否. 是 c="*". t=t & c Text2.Text=t k=k+1 结束 图 5-15. 图 5-16. 看图写程序第 3 题程流程图. 看图写程序第 3 题程序运行界面. (二)根据程序画流程图. 1.在文本框 Text1 中输入一个正整数 N,单击“计算”命令按钮 Command1,计算 1.

(12) 第5章. 循环结构程序设计. 45. 到 N 所有自然数中的偶数(不包括 0)的乘积:2 * 4 * 6 * … * m (m<=N),结果显示在 标签 Label1 中。程序运行界面如图 5-17 所示,请画出相应流程图。. 图 5-17. 根据程序画流程图第 1 题程序运行界面. Private Sub Command1_Click() Dim fact As Double, k As Integer, n As Integer n = Val(Text1) fact = 1 For k = 2 To n Step 2 fact = fact * k Next k Label1.Caption = "累乘结果=" & fact End Sub 2.单击窗体,输出 100 到 500 之间的所有完全平方数,并显示在窗体上,要求每行 打印 3 个数。 (一个整数若是另一个整数的平方,则这个数就是完全平方数,例如:400=202,. 400 是完全平方数。)程序运行界面如图 5-18 所示,请画出相应流程图。. 图 5-18. 根据程序画流程图第 2 题程序运行界面. Private Sub Form_Click() Dim i As Integer, k As Integer k=0 Print " 100-500 的完全平方数有:" For i = 100 To 500 If Sqr(i) = Int(Sqr(i)) Then Print i;.

(13) Visual Basic 语言程序设计实验教程. 46. k=k+1 If k Mod 3 = 0 Then Print End If Next i End Sub 3.指定一个初始值,从该数值开始(包括该数值)找出 100 个不能被 7 整除的自然 数。要求通过文本框接收初始值,找出的自然数显示在列表框中。程序运行界面如图 5-19 所示,请画出相应流程图。. 图 5-19. 根据程序画流程图第 3 题程序运行界面. Private Sub Command1_Click() Dim n As Integer, count As Integer n = Val(Text1) count = 0 Do While count < 100 If n Mod 7 = 0 Then List1.AddItem n count = count + 1 End If n=n+1 Loop End Sub (三)阅读分析程序 1.执行下面的程序,单击窗体后,窗体上显示的内容是( Private Sub Form_Click() For I = 0 To 10 Step -2. )。.

(14) 第5章. 循环结构程序设计. 47. I=I+2 Next Print I End Sub 2.运行下面的程序后,单击命令按钮 Command1,则在标签框 Label1 中显示的结果 是(. )。. Private Sub Command1_Click ( ) X = "BASIC" L = Len (X ) For k= 1 To L V = Mid ( X, k, 1 ) W = V + W + "-" Next k Label1.Caption = W End Sub 3.运行程序后,单击窗体,则在窗体上显示的结果为(. )。. Private Sub Form_Click() For x = 1 To 4 num = Int(Rnd + x) Select Case num Case 4 y = "W" Case 3 y = "X" Case 2 y = "Y" Case 1 y = "Z" End Select Next x Print y End Sub (四)程序填空 1.重庆市 2004 年 GDP 为 2650 亿元,比上年增长 12%。在增长率保持不变的情况下, 计算重庆市 GDP 达到或超过 5000 亿元的年份。程序流程如图 5-20 所示,程序运行界面如 图 5-21 所示,请将程序填充完整。.

(15) Visual Basic 语言程序设计实验教程. 48. 开始. GDP=2650. ?. ?. Y=Y+1 否. ? 是. 在标签中显示结果. 结束 图 5-20. 图 5-21. 程序填空第 1 题流程图. 程序填空第 1 题程序运行界面. Private Sub Command1_Click() Dim GDP As Single, Y As Integer GDP = 2650 Do Y=Y+1 Loop While Label1.Caption = Str(Y) + "年 GDP 达到" + Str(GDP) + "亿元" Label1.Caption = Str(Y) + "年 GDP 达到" + Str(GDP) + "亿元" End Sub.

(16) 第5章. 循环结构程序设计. 49. 2.在窗体上已经建立两个文本框(Text1 及 Text2)和一个命令按钮(Command1), 用户在文本框 Text1 中输入文本,单击命令按钮后,从文本框 Text1 中取出英文字母,并 按输入顺序显示在文本框 Text2 中。例如,输入“12aA3b4B5”,在文本框 Text2 中显示为 “aAbB” 。程序运行界面如图 5-22 所示,流程图如图 5-23 所示,请通过上机调试来完善下 列程序代码。. 图 5-22. 程序填空第 2 题运行结果 开始. s = Trim( ? ). k=1. 否. k<=? 是 Mid(s, k, 1) 否. ? 是 ?. k=k+1. 显示结果. 结束 图 5-23. Private Sub Command1_Click(). 程序填空第 2 题流程图.

(17) Visual Basic 语言程序设计实验教程. 50. Dim s As String, y As String s = Trim(. ). y = "" For k = 1 To x = Mid(s, k, 1) If. Then y=. End If Next Text2.Text = y End Sub 3.下述程序能够验证一个输入的数是否为素数(素数是只能被 1 和自身整除的自然 数),程序流程图如图 5-24 所示,程序运行界面如图 5-25 所示,请通过上机调试完善下列 程序代码。 开始. f = True. 输入 n. i=2. 否. i<=? 是 n Mod i =? 否. 是. f=False. i=i+1 是 是. f=?. 是素数. 不是素数. 结束 图 5-24. 否. 程序填空第 3 题流程图.

(18) 第5章. 图 5-25. 循环结构程序设计. 51. 程序填空第 3 题程序运行界面. Private Sub Command1_Click() Dim n As Integer, i As Integer, f As Boolean f = True n = Val(InputBox("请输入一个正整数" + vbCrLf + "(大于 1)", "素数", 2)) For i = 2 To Then. If n Mod i = f = False Exit For End If Next i If f =. Then Print n; "是素数" Else Print n; "不是素数". End Sub (五)程序改错 1.以下程序的功能是将用户键盘输入的十进制整数转换成二进制数,并在窗体上输 出,请将给定程序中不正确的地方进行修改,使之能完成预定功能。. Private Sub Form_Click() Dim B As Long, D As Boolean 'Error1 D = Val(InputBox("请输入一个十进制数", "输入")) Do While D >= 0. 'Error2. B=B&D/2. 'Error3. D=D/2. 'Error4. Loop Print B End Sub 要求:根据上述程序代码改错,改错时不得增加和删除语句。 2.验证级数: 1+. 1 1 1 1 1 + 2 + 3 + 4 +"+ n = 2 1 2 2 2 2 2.

(19) Visual Basic 语言程序设计实验教程. 52. 在文本框 Text1 中输入 n,单击“计算”命令按钮 Command1 计算级数的值,计算所 得级数值与 2 之差的绝对值显示在标签框 Label1 中。. Private Sub Command1_Click ( ) n = Asc ( Text1.Text ). 'Error1. S=1 For k = 0 To n. 'Error2. V=k^2. 'Error3. S=1/S+1/V. 'Error4. Next k D = 2-Abs (S). 'Error5. Label1.Caption = D End Sub 要求:根据上述程序代码改错,改错时,不得增加和删除语句。 (六)程序设计. 1.在文本框 Text1 和 Text2 中分别输入任意正整数 N1 和 N2(N1<N2),然后单击命 令按钮 Command1,计算出 N1 到 N2 之间所有数(不包括 N1 和 N2)的累加和,结果在 标签 Label1 中显示,如图 5-26 所示。要求:画出流程图,并设计程序上机调试。. 图 5-26. 程序设计第 1 题程序运行界面. 2.单击窗体,在窗体上打印出如图 5-27 所示的内容。要求:画出流程图,并用循环 结构设计出程序再上机调试。. 图 5-27. 程序设计第 2 题程序运行界面.

(20) 第5章. 循环结构程序设计. 53. 3.在窗体的单击事件中求级数 S=1/(1+4)+1/(1+2×4)+1/(1+3×4)+…+1/(1+n×4)+…的前 100 项之和,将结果显示在窗体上,如图 5-28 所示。要求:画出流程图,并设计出程序再上 机调试。. 图 5-28. 程序设计第 3 题程序运行界面. (七)高级应用. 1.如果一个三位整数等于它的各位数的立方和,则此数称为“水仙花数”,如 153=13+53+33。编写程序求所有的水仙花数,将水仙花数显示在列表框中,如图 5-29 所示。 要求:分别用单层循环结构和多层循环结构完成此题的程序设计。. 图 5-29. 高级应用第 1 题程序运行界面. 2.凡是满足 x2+y2=z2 的正整数数组(x,y,z)称为勾股数组(如 3,4,5) 。请找出任意一个 正整数 n(通过 InputBox 函数输入)以内的所有勾股数组,把这些数组显示在列表框中, 如图 5-30 所示。. 图 5-30. 高级应用第 2 题程序运行界面. 3.设计程序,在窗体上建立一个列表框 List1 和一个“显示”命令按钮 Command1。 列表框高(Height)为 1770,宽(Width)为 1300,字体为“黑体”,字号为 14,列表框中.

(21) Visual Basic 语言程序设计实验教程. 54. 已有 5 个列表项,依次为“表项 1”至“表项 5” 。要求程序运行后,可以通过多次单击选 中多个列表项。单击“显示”按钮,在窗体上输出所有选中的列表项,如图 5-31 所示。. 图 5-31. 高级应用第 3 题程序运行界面. 4.用迭代法求 x = a 。求平方根的迭代公式为: a ⎞ 1⎛ x n +1 = ⎜ x n + x n ⎟⎠ 2⎝ 要求:通过 InputBox 函数输入 a 值,并以 a 作为 x 的初值。要求前后两次求出的 x 的 差的绝对值小于 10-5,如图 5-32 所示。. 图 5-32. 高级应用第 4 题程序运行界面. 五、实验思考题. 1.设计循环结构的三要素是什么? 2.循环结构对条件的控制分为哪两种情况?什么时候使用 Do…Loop 循环语句,什么 时候使用 For…Next 循环语句?. 3.在使用 Do Loop 循环语句时,关键字 While 和 Until 的区别是什么? 4.在 For … Next 循环中,试分析循环初值、终值和步长的关系。 5.在编写循环体时,哪些语句需要放在循环体内?哪些变量的初值需要在循环体外 赋值?. 6.Exit Do 语句的作用是什么?它可以在哪些循环中使用?.

(22)

參考文獻

相關文件

中國語文課程為各學習階 段提供「建議篇章」, 推薦 適合學生程度的文言經典作 品。. 教師可按學校情況,靈 活地把「建議篇章」融入課

校本文化 文化 文化及 文化 及 及文學課程 及 文學課程 文學課程整體規畫 文學課程 整體規畫 整體規畫 整體規畫. 一年級 二年級 三年級

中三級 中文科聆聽卷(普通話) 小三級 中文科閱讀卷 小六級 中文科聆聽卷(廣州話) (NCS版本). 小六級 中文科聆聽卷(普通話)

個人、社會及人文教育學習領域課程架構提供一個框架讓學校自行規劃和發展校

在 在 運用新修訂自評框架後 運用新修訂自評框架後 的意見

扭蛋機製作活動 (準備階段) 形式:

在香港,公營學校為本地適齡學生 (包括非華語學生) 提供中小 學免費教育,開設中、英文課程,培養學生「兩文 (中、英文) 三語

這次是我第一次踏足日本,以往只能從學校的日文課或網上資源暸解日本文