《VB语言程序设计循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《VB语言程序设计循环结构程序设计.ppt(54页珍藏版)》请在三一办公上搜索。
1、循环结构程序设计,本章内容,5.1 循环语句 5.2 多重循环5.3 列表框与组合框 5.4 常用算法 5.5 程序举例,循环结构,循环三要素:(1)初始化:决定循环的初始状态,即与循环相关的变量的初始值;(2)循环体:循环中反复执行的部分;(3)循环的条件:决定循环结束的条件。三种循环结构:for、while、do。,FOR 循环,格式:For 循环变量初值 To 终值 Step 步长循环体Exit ForNext 循环变量功能:按循环变量的初值、终值和步长所确定的次数执行循环体。,5.2 多重循环,在一个循环结构的循环体内含有另一个完整的循环结构,称之为多重循环或嵌套循环。说明:内外循环之
2、间必须完整包含,不得交叉。内循环变量与外循环变量不能同名。,多重循环,正例:for i=1 to 10for j=1 to 10 next j next i,内循环 j,外循环 i,错例:for i=1 to 10for j=1 to 10 next i next j,例5.9 多重循环程序示例 Private Sub Form_Load()Show For i=1 To 3 外循环 For j=5 To 7 内循环 Print i,j Next j Next i End Sub 注意内、外循环层次要分清,不能交叉,本例可采用两重循环来实现。外循环控制输出7行,内循环控制每行输出要求的字符数。
3、在进入内循环之前,使用Print Tab()来对起始输出位置定位,退出内循环后,使用Print来控制换行。,例5.10 编一程序,输出下列所示的图形,Private Sub Form_Load()Show For i=1 To 7 Print Tab(10-i);输出位置 For j=1 To 2*i-1 Print Chr(i+48);Next j Print Next i End Sub 注意:Print Chr(i+48)与 Print i 有所不同,(1)分析:设1元硬币为a枚,2元硬币为b枚,5元硬币为c枚,可列出方程 a+b+c=10 a+2b+5c=25采用两重循环,外循环变量a
4、从010,内循环变量b从010(2)创建应用程序的用户界面,例5.11 取1元、2元、5元的硬币共10枚,付给25元钱,有多少种不同的取法?,Private Sub Form_Load()Show CurrentX=0:CurrentY=1500 Print,“5元,“2元,“1元 n=0 记录解的组数 For a=0 To 10 For b=0 To 10 c=10-b-a If a+2*b+5*c=25 And c=0 Then n=n+1 Print(;n;),c,b,a End If Next b,a 合并两个Next语句End Sub,例 题,打印九九乘法表。,思考:,程序如何改动,
5、可以得到如下结果。,列表框(ListBox),列表框(ListBox),如果列表项数量超过列表框所能显示的数目,VB会自动为列表框加上滚动条。列表框只能从其中选择,而不能直接修改其中的内容(不像文本框Text)。,列表框的属性,For i=0 to List1.ListCount-1 step 1 Print List1.List(i)Next i,列表框的属性,Print List1.List(List1.ListIndex),Print List1.Text,列表框的属性,Multiselect和Style属性举例,列表框举例,列表框各主要属性的值:List1.ListIndex=3(下标
6、从0开始的)List1.ListCount=5 List1.Selected(3)=True,其余为False。List1.Text 为“cox”,与List1.List(List1.ListIndex)相等,List1,基本方法,1.AddItem方法格式:Object.AddItem 列表项,索引功能:AddItem方法用于在程序代码中添加列表项。说明:默认索引时,在列表框的最后添加新列表项,有索引时,则在索引指定的位置添加。,例如:在城市名称列表框(List1)的第一个位置前添加“广州市”:List1.AddItem“广州市,0,2.RemoveItem方法格式:Object.Remov
7、eItem 索引功能:用于删除指定的列表项。,例如:删除“重庆市”列表项,索引号为2,则:List1.RemoveItem 2,例如:删除选中的列表项:List1.RemoveItem List1.ListIndex,例如:添加选中的列表项:List2.AddItem List1.Text,3.Clear方法格式:Object.Clear功能:用于删除所有列表项。例如:从List1中删除所有列表项:List1.Clear,采用以下方法,可为列表框List1赋值(添加列表项):(1)在属性窗口中设置(Ctrl+Enter)(2)利用AddItem赋值(3)利用List属性赋值 List1.Add
8、Item“教授”List1.List(0)=“教授”List1.AddItem“副教授”List1.List(1)=“副教授”List1.AddItem“讲师”List1.List(2)=“讲师”List1.AddItem“助教”List1.List(3)=“助教”,列表框列表项的输出(1)用鼠标单击列表框内某一表项,则该表项值存放在Text属性中。例如:x=List1.Text 把表项值存放在x变量中(2)指定索引号来取表项的内容,例如:List1.ListIndex=3 x=List1.Text(3)直接从数组List()中读取,例如:x=List1.List(5),(1)分析:判别条件为
9、(n Mod 16=0)And(Sqr(n)=Int(Sqr(n)。(2)创建应用程序的用户界面和设置对象属性,例5.12 设计程序,找出4位数中能被16整除的完全平方数,把这4位数显示在列表框中,其个数显示在标签中。,(3)编写程序代码Private Sub Form_Load()Label1.Caption=按“显示”按钮,可以在列表框中显示4位数中 _&能被16整除的完全平方数End SubPrivate Sub Command1_Click()List1.Clear For n=1000 To 9999 If(n Mod 16=0)And(Sqr(n)=Int(Sqr(n)Then L
10、ist1.AddItem n End If Next n Label1.Caption=符合条件的4位数的个数为:&List1.ListCountEnd Sub,(1)创建应用程序的用户界面和设置对象属性 用户先在左列表框(List1)选择一个或多个选修课,当单击“显示”按钮时,在右列表框(List2)中将显示出用户选中的所有课程。单击“清除”按钮时,将清除右列表框中的内容(2)编写程序代码,例5.13 设计一个选课程序,MultiSelect属性值为2,Private Sub Form_Load()List1.AddItem 电子商务 List1.AddItem 网页制作 List1.Add
11、Item Internet简明教程 List1.AddItem 计算机网络基础 List1.AddItem 多媒体技术“End SubPrivate Sub Command1_Click()List2.Clear For i=0 To List1.ListCount-1 If List1.Selected(i)Then List2.AddItem List1.List(i)End If Next iEnd Sub,组合框(ComboBox),组合框结合了文本框和列表框的特性。用户可以从文本框中输入文本,也可以从列表框中选择列表项。,组合框(ComboBox),列表框中列出可供用户选择的选项,当
12、用户选定某项后,该项内容自动装入文本框中。除下拉式列表框(其Style属性值为2)之外都允许在文本框中用键盘输入,但输入的内容不会自动添加到列表框中。,组合框特有的重要属性,组合框举例,组合框各主要属性的值:combo1.ListIndex=0 combo1.ListCount=8 combo1.Text 为“李宁”combo1没有Selected(i)和MultiSelect属性,Combo1,(1)创建应用程序的用户界面和设置对象属性,例5.14 在窗体上设置3个组合框,用于选择微机部分配置,包括CPU/主频、硬盘及内存。,图片框,设计界面,(2)编写程序代码 Private Sub Fo
13、rm_Load()Combo1.Text=Combo1.List(0)Combo2.Text=Combo2.List(0)Combo3.Text=Combo3.List(0)End Sub Private Sub Command1_Click()“确定”按钮的事件过程 Picture1.Cls Picture1.Print 微机的基本配置 Picture1.Print String(20,=)Picture1.Print CPU:;Combo1.Text;GB Picture1.Print 硬盘(GB):;Combo2.Text Picture1.Print 内存(MB):;Combo3.Te
14、xt End Sub,(1)创建应用程序的用户界面(2)设置对象属性 组合框的Style属性为0,TabIndex(键序)为0 两个标签;四个命令按钮;一个文本框Text1,用来显示当前的选修课总课程数,例5.19 编制程序,把一批课程名放入组合框中,再对组合框进行项目显示、添加、删除、全部删除等操作,例5.20,(3)编写程序代码 Private Sub Form_Load()Combo1.AddItem 电子商务 Combo1.AddItem 网页制作 Combo1.AddItem Internet简明教程 Combo1.AddItem 计算机网络基础 Combo1.AddItem 多媒体
15、技术 Combo1.Text=置空值 Text1.Text=Combo1.ListCount 表项个数 End Sub Private Sub Command1_Click()”添加”If Len(Combo1.Text)0 Then Combo1.AddItem Combo1.Text Text1.Text=Combo1.ListCount End If Combo1.Text=Combo1.SetFocus End Sub,Private Sub Command2_Click()“删除”Dim ind As Integer ind=Combo1.ListIndex If ind-1 The
16、n-1表示无表项 Combo1.RemoveItem ind 删除已选定的表项 Text1.Text=Combo1.ListCount End If End Sub Private Sub Command3_Click()“全清”Combo1.Clear Text1.Text=Combo1.ListCount End Sub Private Sub Command4_Click()End End Sub,54、在考生文件夹下有一个工程文件sj82.vbp,相应的窗体文件为sj82.frm,包含了所有控件和部分程序,如图所示。要求:1)利用属性窗口向列表框添加四个项目:Visual Basic,
17、Turbo C,C+,Java;2)请编写适当的程序完成以下功能:当选择列表框中的一项和单选按钮Option1,然后单击确定命令按钮,则文本框中显示XXX笔试;当选择列表框中的一项和单选按钮Option2,然后单击确定命令按钮,则文本框中显示XXX上机。其中XXX是在列表框中所选择的项目。注意:考生不得修改窗体文件中已经存在的程序,退出程序时必须通过单击窗体右上角的关闭按钮。在结束程序运行之前,必须至少要进行一次选择操作(包括列表框和单选按钮),否则不得分。最后把修改后的文件按原文件名存盘。,Private Sub Command1_Click()If Option1.Value Then T
18、ext1=List1.Text&Option1.Caption+Else Text1=List1.Text&Option2.Caption+End IfEnd Sub 注意:text1中显示“Turbo c上机”才会得满分。,43、在名称为Form1的窗体上画一个名称为Label1、标题为添加项目:的标签;画一个名称为Text1的文本框,没有初始内容;画一个名称为Combo1的下拉式组合框,并通过属性窗口输入若干项目(不少于3个,内容任意);再画两个命令按钮,名称分别为Command1、Command2,标题分别为添加、统计。在运行时,向Text1中输入字符,单击添加按钮后,则Text1中的内
19、容作为一个列表项被添加到组合框的列表中;单击统计按钮,则在窗体上显示组合框中列表项的个数,如图所示。请编写两个命令按钮的Click事件过程。*注意:程序中不得使用变量,也不能使用循环。存盘时必须存放在考生文件夹下,工程文件名为sj27.vbp,窗体文件名为sj27.frm。,Private Sub Command1_Click()Combo1.AddItem Text1.TextEnd SubPrivate Sub Command2_Click()Print Combo1.ListCountEnd Sub,5.4 常用算法,算法是对某个问题求解过程的描述。常用的算法有:穷举法、递推法、排序法、
20、查找法、递归法等。1.累加、连乘和计数 累加(如s=s+k)是在原有和的基础上一次一次地每次加一个数,连乘(如t=t*c)则是在原有积的基础上一次一次地每次乘一个数。计数通常每次增加的值是1(n=n+1)。课后题 找出3位数中的“水仙花”数,计算其个数。所谓水仙花数,是指各位数字立方和等于该数本身,如153是一个水仙花数,因为153=13+53+33。程序中采用计数方法n=n+1(或称“计数器”)来记录有多少个“水仙花”数。,Private Sub Form_Load()找水仙花数 Dim k As Integer,a As Integer,b As Integer Dim c As Inte
21、ger,n As Intege Show n=0 Print 三位数的水仙花数是:For k=100 To 999 a=Int(k/100)求百位数 b=Int(k-100*a)/10)求十位数 c=k Mod 10 求个位数 If k=a3+b3+c3 Then Print k 输出水仙花数 n=n+1 对满足条件的数进行计数 End If Next k Print 一共有&n&个水仙花数End Sub,2穷举法,“穷举法”也称为“枚举法”,它是计算机解题常用的一种方法。其做法是:从所有可能解中,逐个进行试验,若满足条件,就得到一个解,否则不是。直到条件满足或判别出无解为止。例5.15 用1
22、00元买100只鸡,母鸡3元1只,小鸡1元3只,问各应买多少只?下面采用穷举法来解此题。对于此题,令母鸡为x只,小鸡为y只,根据题意可知y=100-x,开始先让x初值为1,以后逐次加1,求x为何值时,条件3x+y/3=100成立。如果当x达到30时还不能使条件成立,则可以断定此题无解。因为买的母鸡数不可能超过30,超过30就不能买到100只鸡。,100元买100只鸡,Private Sub Form_Load()Dim x As Integer,y As Integer Show For x=1 To 30 y=100-x If 3*x+y/3=100 Then Print“母鸡只数为:”;x
23、,Print“小鸡只数为:”;y End If Next xEnd Sub,程序运行结果是:母鸡只数为:25小鸡只数为:75,例 题,“百鸡百钱”问题。要求用100元钱买100只鸡,已知一只公鸡5元,一只母鸡3元,3只小鸡1元。现有100元钱,要买100只鸡,求公鸡、母鸡和小鸡各买多少只。,Private Sub Form_Load()Dim x As Integer,y As Integer,z%,k%Show print 公鸡,母鸡,雏鸡 For x=0 To 20 For y=0 To 33 z=100 x-y If 5*x+3*y+z/3=100 Then Print x,y,z k=
24、k+1 End If Next y Next x print 可能方案有:;k;种End Sub,3.递推法,“递推法”也称为“迭代法”,其基本思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。通过InputBox函数输入a值,并以a作为x的初值。要求前后两次求出的x的差的绝对值小于10-5。分析:这是一个“递推”问题,先从a推出第一个x值 即(a+a/a)/2x,再以该x值(旧值)推出x的新值 即(x+a/x)/2x,依次向前推,每次以x旧值推出x的新值 即(x+a/x)/2x。当x旧值与新值之差的绝对值小于10-5时,此时的x新值为所
25、求。,Private Sub Form_Load()Dim a As Single,xn0 As Single,xn1 As Single Show 用xn0表示旧值,xn1表示新值 a=Val(InputBox(请输入一个正数)xn1=a 以a作为x的初值 Do xn0=xn1 确定旧值 xn1=(xn0+a/xn0)/2 计算新值 Loop While Abs(xn0-xn1)=0.00001 判断 Print a;的平方根为;xn1End Sub 如果输入的a值为3,程序运行结果是:3的平方根为 1.732051,例5.18 从键盘输入一个正整数,然后把该数的每位数字按逆序输出。例如:输
26、入3485,则输出5843;输入100000,则输出000001。以下采用两种不同解法。(1)数值处理方法 通过表达式x Mod 10取出该整数x的个位数并输出,如对于x=3485,则取出5;利用赋值语句x=x 10截去x的个位数,如对于x=3485,处理后x=348;重复执行和,直到x=10 Print x Mod 10;x=x 10 Loop Print x,(2)字符串处理方法,把该整数作为一个数字字符串,从字符串后部往前逐个取出字符,即可实现按逆序输出。Dim x As String x=InputBox(请输入一个正整数)把该数以字符串方式赋给变量x For k=Len(x)To 1
27、 Step-1 Print Mid(x,k,1);从后部往前逐个取出字符并显示 Next k,例5.19 求解s=1!+2!+3!+10!的值,采用两种不同解法(1)解法一:采用两重循环,外循环10次,每次循环计算一次阶乘,把每次阶乘值累加起来,即得求解结果。Dim s As Long,t As Long s=0 For j=1 To 10 计算10个阶乘 t=1 计算1个阶乘前,先赋初值 For k=1 To j 计算j!,需要循环j次 t=t*k 连乘j次 Next k s=s+t 把每次计算得到的阶乘值t累加 Next j Print s,(2)解法二 求解s=1!+2!+3!+10!的值,这10个阶乘有一个特点,后一个阶乘为上一个阶乘再乘以一个数,如2!=1!*2,3!=2!*3,4!=3!*4,k!=(k-1)!*k。根据这一特点,程序只须采用单重循环就可以求解。Dim s As Long,t As Long s=0 t=1 For k=1 To 10 循环10次,每次求1个阶乘 t=t*k 求k!,其值等于(k-1)!*k,即t*k s=s+t 每次加入一个阶乘值t Next k Print s,