




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章 循环结构程序设计5.1 循环结构程序设计的概念实际的数据处理中,常需要进行一些大量重复的操作如求: 1+2+3+n 1!+2!+3!+.+n!这些操作都可有用循环结构实现VB中有多种循环结构,最常用的有Do.Loop结构和For.Next结构5.2 DoLoop语句DO循环的格式无条件循环 DO 循环体LOOP当循环前测试型 DO WHILE 循环体 LOOP当循环后测试型 DO 循环体 LOOP WHILE 直到循环前测试 DO UNTIL 循环体 LOOP 直到循环后测试型 DO 循环体 LOOP UNTIL 另外可以用EXIT DO语句终止循环 例(p94-1.vbp)用exit do 退出循环操作 Private Sub Command1_Click() Dim Sum As Single, x As Single Sum = 0 Do x = Val(InputBox(enter a value) If x = 0 Then Exit Do Sum = Sum + x Print sum=; SumLoopEnd Sub例5-1(P95-1.VBP)计算1+2+3+.+100可以用当循环来实现。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 SubPrivate Sub Form_Load() Label1.Caption = 今有100个数:1、2、3、100,试计算其累加和。 Label2.Caption = Command1.Caption = &C 计算End Sub例5-2(p96-1.vbp)判断一个正整数是否是素数。选用当循环。Private Sub Command1_Click() Dim n As Integer, i As Integer, a As String Select Case Val(Text1.Text) Case Is 2147483647 MsgBox 此数太大!, vbInformation + vbOKOnly, 注意 Case Else n = Val(Text1.Text) s = 0: i = 2 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.SetFocusEnd Sub例5-3(p97-1.vbp)计算。计算公式:分析:分子为2保持不变 若第n项的分母为,则第n+1项的分母为第1项除外,第2项的分母为,p的初值为0若前n项的乘积为,则前n+1项乘积为第1项的乘积为2,s的初值为2通过前后两个乘积的差,来控制循环。从而得流程图:Private Sub Command1_Click()Dim m As Integer, p As Double, s As Double Dim pi As Double, f As String , t As Double m = Val(Text1.Text) p = 0: s = 2 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.SetFocusEnd Sub例5-4输入两个正整数,求它们的最大公约数(P98-VBP)。用辗转相除法,m、n是两个正整数,r是余数,用直到循环操作的流程图:注:若m= 100 THEN EXIT FORNEXT iPRINT sum例5-5利用for循环结构显示1000以内的所有能被37整除的自然数。Private Sub Command1_Click() Dim a As String, n As Integer a = For n = 1 To 1000 If n Mod 37 = 0 Then a = a & Str(n) & vbCrLf End If Next Text1.Text = aEnd Sub注:Text1属性Multiline设置为True,属性ScrollBars设置为2(Vertical),运行时才会出现垂直滚动条,且这两个属性都只能在窗体设计时设置,在运行时这两个属性是只读的,不能更改。例5-6(p101-1.vbp)求从1000到1100之间的所有素数程序流程如右图:是一个用fornext实现的双重循环,外层循环依次生成1000到1100之间的各个数,内层循环对每一个数进行测 试,测试后退出内层循环后判断:若s=0 ,是素数,输出该数;若s0,不是素数,n自动加1,进入下一轮外循环,准备测试下一个数。Private Sub Command1_Click() Dim a As String, n As Integer Dim i As Integer, s As Integer a = For n = 1001 To 1100 Step 2 s = 0 For i = 2 To 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 = aEnd Sub5.4 列表框与组合框列表框(ListBox):是用户可以从中进行选择的滚动列表组合框(ComboBox):将文本框和列表框的功能结合在一起。用户可通过在组合框中输入文本来选定项目,也可从列表中选定项目。5.4.1 列表框 ListBox 控件显示项目列表,从其中可以选择一项或多项。如果项目总数超过了可显示的项目数,就自动在 ListBox 控件上添加滚动条。1.属性基本属性:ListBox最常用的属性有Name、Enabled、Visiblet和Index(控件数组中用)等.List 属性:返回或设置控件的列表部分的项目。object.List(index) = stringobject对象表达式,一个ListBox对象。Index列表中具体某一项目的号码。string字符串表达式,指定列表项目。列表是一个字符串数组,数组的每一项都是一列表项目,在设计时可以通过属性浏览器得到。List数组的下标是从0开始的,也就是说,第一个元素的下标是0.可在设计状态添置项目,用Ctrl+Enter回车换行.参见例(p102-1.vbp)。ListIndex 属性:返回或设置控件中当前选择项目的索引在窗体设计时不可用,只能在程序中设置和引用。说明表达式 List(List1.ListIndex) 返回当前选择项目的字符串。列表中的第一项是 ListIndex = 0,ListCount 始终比最大的 ListIndex 值大 1。对于可以做多重选择的控件,该属性的行为取决于所选择项目的个数。如果只选择了一个项目,ListIndex 返回该项目的索引。在多重选择中(MultiSelect=1/2),ListIndex 返回包含在焦点矩形内的项目的索引,而不管该项目是否被选。例(P102-1.VBP)Private Sub List1_Click() Text1 = List1.List(0) Text2 = List1.List(List1.ListIndex)End SubListCount 属性: 返回控件的列表部分项目的个数。该属性只能在程序中设置和引用.列表中最后一个元素的下标=ListCount-1Selected 属性:返回或设置在 ListBox 控件中的一个项的选择状态。该属性是一个与 List 属性一样、有相同项数的布尔值数组。在窗体设计时是不可用的。格式:object.Selected(index) = booleanObject对象表达式,其值是一个ListBox对象。Index 控件中项的索引号。Boolean一个用来指定项是否被选中的布尔表达式其值为:True表示项被选中,False(缺省值)表示项没有被选中。说明:此属性对能够复选是尤其有用的。可以快速检查在列表中哪些项已被选中。也可以从代码中使用该属性选中或取消选中列表中的一些项。Sorted 属性:返回一个值,指定控件的元素是否自动按字母表顺序排序,该属性只能在设计状态设置.当值为:True 列表中的项目按字符码顺序排序。False(缺省值) 列表中的项目不按字母表顺序排序。Text 属性: ListBox 控件返回列表框中选择的项目;返回值总与表达式List(ListIndex)的返回值相同。只能在程序中设置和引用.在运行时为只读。可以用 Text 属性来确定当前选择的项目。(p102-2.vbp)Private Sub List1_Click() Text1 = List1.List(0) Text2 = List1.TextEnd SubMultiSelect 属性:返回或设置一个值,该值指示是否能够在 ListBox 控件中进行复选以及如何进行复选。在运行时是只读的。0 (缺省值)不允许复选。1 简单复选。鼠标单击或按下 SPACEBAR (空格键)在列表中选中或取消选中项。(箭头键移动焦点。)22 扩展复选。按下 SHIFT 并单击鼠标或按下 SHIFT 以及一个箭头键(上箭头、下箭头、左箭头、和右箭头)将在以前选中项的基础上扩展选择到当前选中项。按下 CTRL 并单击鼠标来在列表中选中或取消选中项。Style 属性值为:常数值描述VbListBoxStandard0(缺省值)标准的。ListBox 控件按它在Visual Basic 老版本中的样子显示;即,象是文本项的列表。VbListBoxCheckbox1复选框。在 ListBox 控件中,每一个文本项的边上都有一个复选框。在 ListBox 中可以选择多项。 2.方法AddItem 方法用于将项目添加到 ListBox 控件,语法格式: object.AddItem item, indexobject必需的。一个对象表达式,其值一个ListBox对象。Item必需的。字符串表达式,它用来指定添加到该对象的项目。Index可选的。是整数,它用来指定新项目或行在该对象中的位置。对于 ListBox 控件的首项,index 为 0。说明:如果所给出的 index 值有效,则 item 将放置在 object 中相应的位置。如果省略 index,当 Sorted 属性设置为 True 时,item 将添加到恰当的排序位置,当 Sorted 属性设置为 False 时, item 将添加到列表的结尾RemoveItem 方法:用以从 ListBox 控件中删除一项。语法格式: object.RemoveItem indexobject必需的。一个对象表达式,其值为“应用于”列表中的一个ListBox对象。index必需的。一个整数,它表示要删除的项或行在对象中的位置。对于 ListBox 中的首项,index = 0。Clear 方法:用于清除 ListBox的内容。语法格式:object.Clearobject 所在处代表一个对象表达式,其值为列表中的一个ListBox对象。例5-7(p102-3.vbp)用列表框显示1000到1100之间的素数Private Sub Command1_Click() Dim n As Integer Dim i As Integer, s As Integer For n = 1001 To 1100 Step 2 s = 0 For i = 2 To Sqr(n) If n Mod i = 0 Then s = 1 Exit For End If Next If s = 0 Then List1.AddItem n NextEnd Sub例5-8(p103-1.vbp)同构数是一个整数,它恰好出现在其平方的右端,例如5*5=25,25*25=125,即5和25都是同构数。求10000以内的同构数。1位同构数n: n=n*n mod 102位同构数n: n=n*n mod 1003位同构数n: n=n*n mod 10004位同构数n: n=n*n mod 10000可以用for循环中嵌套select选择语句来实现,流程如图:Private Sub Command1_Click() Dim n As Long For n = 1 To 10000 Select Case n Case n * n Mod 10 List1.AddItem Format(n, ) & Format(n * n, ) Case n * n Mod 100 List1.AddItem Format(n, ) & Format(n * n, ) Case n * n Mod 1000 List1.AddItem Format(n, ) & Format(n * n, ) Case n * n Mod 10000 List1.AddItem Format(n, ) & Format(n * n, ) End Select NextEnd Sub例5-9算术练习程序(P104-1.VBP)。出题部分由窗体的Activate事件过程实现。Activate事件当一个窗体对象成为活动窗口时发生。程序中用Form1.Tag来存放生成的题目数。答题部分通过文本框的KeyPress事件过程实现。程序中用List1.Tag来存放完成的题目数。注意:窗体设计时或初始化控件时必须把程序使用的Tag赋值为0,否则编译时会报类型不匹配,因为Tag默认为字符串型。由于属性Tag是附加在各控件的,在这里相当于窗体文件(模块)级的变量,共窗体内各过程共享.Private Sub Form_Load()初始化控件 Label1.Caption = Label1.BackStyle = 1 Label1.BackColor = QBColor(15) Text1.Text = Frame1.Caption = Label2.Caption = Label3.Caption = Command1.Caption = 关闭(&C) Image1.Picture = LoadPicture(D:notevbasicVB3EXAMPLEPOINT02.ICO) Form1.Tag = 0 强制使Tag属性为数值 List1.Tag = 0End SubPrivate Sub Form_Activate() 出题过程 Dim a As Integer, b As Integer, p As Integer 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 Case 1 Label1.Caption = a & - & b & = Text1.Tag = a - b End Select Form1.Tag = Form1.Tag + 1 Text1.SelStart = 0 Text1.Text = End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)答题过程 Dim frm As String, item As String If KeyAscii = 13 Then frm = ! If Val(Text1.Text) = Text1.Tag Then item = Format(Label1.Caption & Text1.Text, frm) & 生成一个列表项 List1.Tag = List1.Tag + 1 Else item = Format(Label1.Caption & Text1.Text, frm) & End If List1.AddItem item, 0 Label2.Caption = 共 & Form1.Tag & 题, & Chr(13) & 正确率为: Label3.Caption = Format(List1.Tag / Form1.Tag, #0.0#%) Form_Activate End IfEnd Sub选择和移动数据例5-10(P105-VBP)相互移动。注:listbox的style,Multiselect属性只能在窗体设计时完成,在程序运行时是只读的,不能更改。本例中:List1.Style=1(带复选框),List2.Multiselect=2(扩展复选,即多项选择),列表框的其它属性都取默认值。Private Sub Form_Load()初始化控件 Label1.Caption = 经营商品 Label2.Caption = 需采购商品 Label3.Caption = Ctrl或Shift+鼠标左键可以在右框中选择多项数据 Command1.Caption = 选项右移 Command2.Caption = 全部右移 Command3.Caption = 选项左移 Command4.Caption = 全部左移 List1.AddItem 电冰箱 List1.AddItem 洗衣机 List1.AddItem 彩色电视机 List1.AddItem 组合音响 List1.AddItem 影碟机 List1.AddItem 电水壶 List1.AddItem 饮水机 List1.AddItem 微波炉 List1.AddItem 照相机 List1.AddItem 计算机 List1.AddItem 电话机End SubPrivate Sub Command1_Click()选项右移 Dim i As Integer 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 LoopEnd SubPrivate Sub Command2_Click()全部右移 Dim i As Integer For i = 0 To List1.ListCount - 1 List2.AddItem (List1.List(i) Next List1.ClearEnd SubPrivate Sub Command3_Click()选项左移 Dim i As Integer 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 LoopEnd SubPrivate Sub Command4_Click()全部左移 Dim i As Integer For i = 0 To List2.ListCount - 1 List1.AddItem (List2.List(i) Next List2.ClearEnd Sub5.4.2 组合框组合框控件将文本框和列表框的功能结合在一起。有了这个控件,用户可通过在组合框中输入文本来选定项目,也可从列表中选定项目。组合框向用户提供了供选择的列表。如果项目数超过了组合框能够显示的项目数,控件上将自动出现滚动条。用户即可上下或左右滚动列表。此外,组合框节省了窗体的空间。组合框的样式有三种组合框样式。每种样式都可在设计时或运行时来设置,而且每种样式都使用数值或相应的 Visual Basic 常数来设置组合框的样式(Style)。下拉式组合框 0 vbComboDropDown简单组合框 1 vbComboSimple下拉式列表框 2 vbComboDropDownList下拉式组合框在缺省设置 (Style = 0) 下,组合框为下拉式组框,在屏幕上只显示文本编辑框和一个下拉箭头。用户可(象在文本框中一样)直接输入文本,也可单击组合框右侧的附带箭头打开选项列表。选定某个选项后,将此选项插入到组合框顶端的文本部分中。当控件获得焦点时,也可按 ALT+ DOWN ARROW 键打开列表。简单组合框(Style = 1 ) 将组合框 Style 属性设置为 1 将指定一个简单的组合框,任何时候都在其内显示列表。为显示列表框部分,必须将列表框绘制得足够大。当选项数超过可显示的限度时将自动插入一个垂直滚动条。用户可直接输入文本,也可从列表中选择。象下拉式组合框一样,简单组合框也允许用户输入那些不在列表中的选项。下拉式列表框(Style = 2 ) 下拉式列表框 (Style = 2 ) 与正规列表框相似 它显示项目的列表,用户必须从中选择。但下拉式列表框与列表框的不同之处在于,除非单击框右侧的箭头,否则不显示列表。这种列表框与下拉式组合框的主要差别在于,用户不能在列表框中输入选项,而只能在列表中选择。当窗体上的空间较少时,可使用这种类型的列表框。例(P107-1.VBP)ComboBox的三种形式Private Sub Form_Load() Combo3.Text = 组合框样式0 Combo2.Text = 组合框样式1 Combo1.Text = 组合框样式2End Sub注:过程中最后一句编译不能通过,因为下拉列表框的文本框部分是只读的,不能写入新的数据项。注意:当组合框的样式为0或1,即为下拉式组合框和简单组合框时,在它的列表框中选择的数据项,会立即在它的文本框中显示出来,在它的文本框中输入的数据,可以用语句:组合框名.AddItem 组合框名.Text,index添加到它的列表框中。下拉列表框Style=2例5-11(P108-1.VBP)前面算术练习程序中的列表框改为组合框,在窗体设计时,设置Style=2(DropdownList,下拉列表框),并增加一个重置按钮,可重复练习。Private Sub Form_Load()初始化控件 Label1.Caption = Label1.BackStyle = 1 Label1.BackColor = QBColor(15) Text1.Text = Frame1.Caption = Label2.Caption = Label3.Caption = Command1.Caption = 关闭(&C) Command2.Caption = 重置(&R) Image1.Picture = LoadPicture(D:notevbasicVB3EXAMPLEPOINT02.ICO) Form1.Tag = 0 强制使Tag属性为数值 Combo1.Tag = 0End SubPrivate Sub Form_Activate()出题过程 Dim a As Integer, b As Integer, p As Integer 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 Case 1 Label1.Caption = a & - & b & = Text1.Tag = a - b End Select Form1.Tag = Form1.Tag + 1 Text1.SelStart = 0 Text1.Text = End SubPrivate Sub Text1_KeyPress(KeyAscii As Integer)答题过程 Dim frm As String, item As String If KeyAscii = 13 Then frm = ! If Val(Text1.Text) = Text1.Tag Then item = Format(Label1.Caption & Text1.Text, frm) & 生成一个列表项 Combo1.Tag = Combo1.Tag + 1 Else item = Format(Label1.Caption & Text1.Text, frm) & End If Combo1.AddItem item, 0 Combo1.ListIndex = 0 Label2.Caption = 共 & Form1.Tag & 题, & Chr(13) & 正确率为: Label3.Caption = Format(Combo1.Tag / Form1.Tag, #0.0#%) Form_Activate End IfEnd SubPrivate Sub Command2_Click()重置过程 Form1.Tag = 0 Combo1.Tag = 0 Combo1.Clear Label3.Caption = 欢迎重新开始! Label2.Caption = Form_Activate Text1.SetFocusEnd SubPrivate Sub Command1_Click() Unload MeEnd Sub简单组合框Style=1例5-12(P109-1.VBP)简易抽奖机使用简单组合框,在窗体设计时设置Style=1(Simple Combo)Private Sub Form_Load() 初始控件 Frame1.Caption = 请输入参加抽奖的号码 Label1.Caption = 输入所有抽奖号码后,按开始按钮,将得到中奖号码 Command1.Caption = 开始 Command2.Caption = 自动生成抽奖号码 Combo1.Text = End SubPrivate Sub Combo1_KeyPress(KeyAscii As Integer) 输入抽奖号码过程 If KeyAscii = 13 Then 按回车键后,接收文本框中的输入项 Combo1.AddItem Combo1.Text, 0 Combo1.Se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 游戏化教学在小学语文低年段识字中的应用与效果研究论文
- 花园及菜园管理制度
- 茶具洗消间管理制度
- 草莓收购点管理制度
- 苗木销售合同 (一)
- 财务会计工作计划 (七)
- 课程计划与课程标准
- 计算流体力学网格生成方法阅读笔记
- 湖北省孝感市安陆市2024-2025学年七年级下学期期中道德与法治试题(含答案)
- 自动控制理论课程设计课程教学大纲
- 2024年凉山州木里县选聘社区工作者真题
- 保险公司攒钱活动方案
- 九师联盟2024-2025学年高二下学期6月摸底联考英语试题(含答案)
- 2024智联招聘人社局解决就业大型招聘会活动方案
- 2025年高考真题-化学(黑吉辽卷) 含答案(黑龙江、吉林、辽宁、内蒙古)
- 2025年高考英语全国二卷(解析)
- 医院护理岗位笔试题目及答案
- 芯核半导体科技有限公司年产2400套半导体零部件项目环评资料环境影响
- 供水行业安全培训课件
- 2025家常保姆雇佣合同协议书
- 中小学校长管理能力测试题及答案
评论
0/150
提交评论