VisualBasic程序设计.ppt_第1页
VisualBasic程序设计.ppt_第2页
VisualBasic程序设计.ppt_第3页
VisualBasic程序设计.ppt_第4页
VisualBasic程序设计.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2019/5/27,1,Visual Basic程序设计,第十讲 第四章 程序流程 (二),2019/5/27,2,4.4 循环结构,For Next 循环,DoLoop 循环,2019/5/27,3,4.4 循环结构,循环结构是算法语言中一种重要的结构,它的应用非常广泛,把要重复执行的语句放在循环结构中,就可避免多次重复输入。在使用循环结构时,有些循环的次数事先可以确定,这种循环称为确定性循环。有些循环的循环次数是不能事先确定,需要根据条件来决定是否继续循环,我们称这种循环为不确定循环。,2019/5/27,4,在VB程序设计语句中有二种形式的循环结构。 其中For循环结构用来设计循环次数可以事先确定的循环结构。即循环次数已知循环结构。 而DoLoop循环结构一般用来设计循环次数无法事先确定的循环结构。,2019/5/27,5,4.4.1 For循环结构,For 循环结构的一般形式: For 循环控制变量= 初值 To 终值Step 步长 语句组1 Exit For 循环体 语句组2 Next 循环控制变量,2019/5/27,6,For 循环结构 -格式,说明: For循环以For语句开始,以Next语句结束。 循环变量用来控制循环次数; 初值代表循环变量的初始被赋的值; 终值代表循环变量最终能继续进行循环的值; 步长代表每循环一次循环变量增长的值。,2019/5/27,7,循环的次数可以从循环初值、终值、和步长计算出来: R=INT(终值-初值+步长)/步长) 例如: For I=1 To 10 Step 2 循环次数 R=INT(10-1+2)/2)=INT(5 .5)=5 For I=5.0 To 25. Step 0.5 R=INT(25.-5.0+0.5)/0.5)=INT(41.0)=41,For循环结构 -循环次数的计算,2019/5/27,8,For循环结构 -循环结构的一些规定,1、循环变量初值 、终值和步长分别可以是常数、 变量和表达式。如果是变量,则它应是预先被赋 值。如果是表达式,则应先计算表达式的值。 2、初值 、终值和步长的值可以为正或负,初值 、 终值可以为零。但步长不能为零。 例如: For I= -1 To 3 Step -1的循环次数为: R=INT(-3-(-1)+(-1)/-1)=3。,2019/5/27,9,即当I的值为-1,-2,-3时,执行正常循环,当I的值变成-4时不再执行循环时。 3、脱离循环的条件是: 循环变量沿变化的方向超过终值。如果步长的值为正,则“超过”意味着“大于”,如果步长为负,则“超过”意味着“小于”。,For 循环结构 -循环结构的一些规定,2019/5/27,10,4、如果计算出循环次数R0,按R=0处理,即一次也不执行循环体。 5、如果循环变量的初值 、终值和步长类型和循环变量的类型不一致,则按赋值的规则处理,即先将其类型化成循环变量的类型,然后进行处理,即先将初值 、终值和步长的类型化成循环变量的类型,然后进行处理。,For 循环结构 -循环结构的一些规定,2019/5/27,11,1、执行For循环语句时先将初值赋给循环控制变量。 2、再利用公式计算循环次数。 计算循环次数的公式: R=Int(终值-初值+步长)/步长),For循环结构 -循环结构的执行过程,2019/5/27,12,3、检查循环次数,若R=0(或R0,则执行循环体。 4、执行Next语句时,循环变量增值步长。循环次数R-1。 5、返回前面步骤3,重复执行步骤3,4。,For循环结构 -循环结构的执行过程,2019/5/27,13,6、其中Exit For为在满足一定条件下退出For循环结构。 若For循环的语句为: For 循环变量=e1 To e2 Step e3 循环体 Next 循环变量 则其执行过程可用下页的流程图表示:,For循环结构 -循环结构的执行过程,2019/5/27,14,图4-15 For循环执行过程流程图.,当R=0时则循环变量的值就超过终值,若步长为负值时,超过终值则表示小于终值。,2019/5/27,15,【例4-7】输入一个正整数,利用For循环来判断是否为素数。 分析:所谓素数是指除了1和它本身之外,不能被其他的数整除的数。判断一个自然数n(3)是否为素数的方法是:依次用2 各数作除数去除,如果余数都不为0,则为素数。 工程设计步骤如下: (1)启动VB,选“新建工程”中“标准EXE”工程。在出现的窗体上添加1个文本框、两个标签和两个命令按钮。如图4-16左图所示。,2019/5/27,16,(2)设置窗体和控件的属性如图4-16右图所示。 其中标签Label2的Caption属性开始设置为“输出判断结果:”在工程运行后应输出具体的判断结果。,图4-16判断素数工程设计界面和属性设置,2019/5/27,17,在文本框中输入一个自然数n,j = , i = 2,当 i =,求 n / i 的余数r,余数r = 0,退出循环,i j,Y,N,输出n为素数,输出n为非素数,i = i+1,图4-17 判断自然数n是否为素数的程序流程,Y,N,2019/5/27,18,(3)编写代码 编写单击Command1命令按钮“判断”所执行的代码 Private Sub Command1_Click() Dim i As Long, j As Long, n As Long n = Val(Text1.Text) j = Clng(Sqr(n) Debug.Print j,2019/5/27,19,For i = 2 To j If n Mod i = 0 Then Exit For Next i Debug.Print i If i j Then Label2.Caption = Text1.Text & “为素数“ Else Label2.Caption = Text1.Text & “为非素数“ End If End Sub,2019/5/27,20,编写单击Command2命令按钮“退出”所执行的代码 Private Sub Command2_Click() Unload Me End Sub 编写Form_Activate()事件发生时所执行的代码 Private Sub Form_Activate() Text1.SetFocus End Sub,2019/5/27,21,(4)运行结果。按F5键运行工程,当出现运行画面时在提示的文本框中输入1个自然数例如137,然后单击“判断”按钮,就会在标签2中显示“137为非素数”的信息。如图4-16所示。,图4-16 判断素数工程运行结果,2019/5/27,22,4.4.2 多重循环,通常把循环体内不含有循环语句的循环称为单层循环,而把循环体内含有循环语句的循环称为多重环。例如在一个循环体内含有一个循环语句的称为二重循环。多重循环又称为多层循环和循环的嵌套。下面通过例题来讲解多重循环的应用。,2019/5/27,23,【例4-8】我国古代数学家张丘建在“算经”里提出一个世界数学史上有名的百鸡问题:鸡翁一、值钱五、鸡母一、值钱三,鸡雏三、值钱一,百钱买百鸡,问鸡翁、母、雏各几何? 分析:若公鸡x只,母鸡y只,小鸡z只,依题意可以列出以下方程组:,2019/5/27,24,在上面的两个方程中,有3个未知数,属于不定方程,无法直接求解。下面我们用“穷举法”求解。穷举法是将各种可能的组合全部一一测试,将符合条件的组合输出。这里使用二层循环结构。即将公鸡数从1变化到100,母鸡数也从1变化到100,对于每一组公鸡和母鸡数,从100中减去公鸡和母鸡数就得到小鸡的个数,然后再计算买三种鸡的总钱数是否为100元。若是就得到一组解,然后再继续。,2019/5/27,25,再仔细分析一下,若100元钱全部都买公鸡最多买20只,如果全部买母鸡最多买33只,所以穷举法外循环中公鸡数可从1 变到19,内循环中母鸡数可从1 变化到33,小鸡个数应100中减去公鸡数和母鸡数得到。 工程设计步骤如下: (1)新建“标准EXE”工程,在出现的窗体上添加四个标签、一个列表框、一个框架和两个命令按钮。其中标签1是放在框架内。,2019/5/27,26,(2)标签1的Caption属性设为“公鸡五元、母鸡三元、小鸡一元钱三只。100元钱买100只鸡。问公鸡、母鸡、小鸡各多少只?”标签2-标签4的Caption属性分别设置为“公鸡”、“母鸡”、“小鸡”。如下图所示。,2019/5/27,27,(3)代码编写如下: 编写单击命令按钮“计算”所执行的代码如下。 Private Sub Command1_Click() List1.Clear For x = 1 To 19 外循环求公鸡数 For y = 1 To 33 内循环求母鸡数 z = 100 - x y 小鸡数 If 5 * x + y * 3 + z / 3 = 100 Then p = Format(x, “) & Format(y,_ “)& Format(z, “),Format 是格式化一个表达式。,2019/5/27,28,Rem 把满足条件的一种情况添加到列表框中。 List1.AddItem p End If Next y Next x End Sub 编写单击命令按钮“退出”所执行的代码如下。 Private Sub Command2_Click() End End Sub,在列表框中使用AddItem方法添加项目,2019/5/27,29,(4)运行结果。按F5键运行工程出现运行界面后按“计算”按钮后,得到结果如下图所示。,图4-17 百钱买百鸡问题的运行结果,2019/5/27,30,例4-10在窗体上输出下列图案,2019/5/27,31,问题分析: 该图案共有十行,每行有十个星号。要想输出该图案应使用 For 循环结构,可以先用变量a存放这十个星号。使用语句: a=“*” 由于要输出的是一个平行四边形,每一行的起始位置比上一行位置多2列。因此要使用Tab函数来确定每一行输出的起始位置。 语句Print Tab(2* i) ;表示从第2* i 列开始输出内容。编写代码如下:,2019/5/27,32,Option Explicit Private Sub Command1_Click() Dim a As String, i As Integer, j As Integer a = “*“ Form1.FontSize = 14 For i = 1 To 10 Print Tab(2 * i); Print a Next i End Sub,表示从每一行的第2* i 列开始输出变量a的值。,2019/5/27,33,例4-11在窗体上输出下列图案,2019/5/27,34,问题分析: 该图案共有十行,每行有不同的星号。第一行有一个“*”,第二行有三个“*”,第三行有五个“*”,要想输出该图案应使用双层 For 循环结构,外层循环决定输出的行数,内层循环决定每行输出的星号数。可以先用变量a存放一个星号。使用语句: a=“*” 由于要输出的是一个等腰三角形,每一行的起始位置比上一行位置少一列。因此要使用Tab函数来确定每一行的起始位置。 语句Print Tab(18- i) ;表示从第18-i 列开始输出内容。编写代码如下:,2019/5/27,35,编写代码如下: Option Explicit Private Sub Form_Click() Dim a As String Dim i As Integer, j As Integer a = “*“ Form1.FontSize = 14,2019/5/27,36,For i = 1 To 10 Print Tab(18 - i); For j = 1 To 2 * i - 1 Print a; Next j Print Next i End Sub,外循环决定共输出几行,内循环决定每行共有几个“*”第一行是1个“*”,第二行是3个“*”,第n是2*n-1个“*”。,输出的位置,2019/5/27,37,例4-12在窗体上输出乘法九九表,2019/5/27,38,Option Explicit Private Sub Form_Click() Dim i As Integer, j As Integer, k As Integer Dim m As Integer FontSize = 12 Print Tab(25); “乘法九九表“ Print: Print Print “* “; For i = 1 To 9 Print Tab(i * 6); i; Next i Print,输出表头,2019/5/27,39,For j = 1 To 9 Print j; “ “; For k = 1 To j Print Tab(k * 6); j * k; “ “; Next k Print Next j End Sub,内循环决定输出乘积及个数,外循环决定共输出几行,2019/5/27,40,例4-13打印下列图案,分析:上面的图案可分成两个等腰三角形。上面的三角形有5行第1行为一个“*”,第2行为三个“*”,第3行为五个第5行有2*5-1个“*”。代码编写如下页所示。,2019/5/27,41,Option Explicit Private Sub Form_Click() Dim i As Integer, j As Integer Dim a As String For i = 1 To 5 Print Tab(20 - i); For j = 1 To 2 * i - 1 Print “*“; Next j Print Next i,输出上三角形,2019/5/27,42,For i = 4 To 1 Step -1 Print Tab(20 - i); For j = 1 To 2 * i - 1 Print “*“; Next j Print Next i End Sub,输出下三角形,2019/5/27,43,4.4.3 Do Loop循环结构,Do Loop循环结构也是常用的循环结构。对于一些无法事先确定循环次数的程序,可用Do Loop型循环结构。 它的格式有两种: 格式1:先测型 Do While| Until Exit Do Loop,2019/5/27,44,格式2:后测型 Do Exit Do Loop While | Until ,2019/5/27,45,2. 说明: (1)格式1中“Do While Loop语句”,是先测型当型循环。即先判断While后面的条件是否为“真”,如果为“真”则执行循环体里面的各语句,如果为“假”,则退出循环,循环直到条件为“假”终止。,2019/5/27,46,(2)格式2中“Do Loop While 语句”是后测型当型循环。与前者的区别在于,它不管条件的真假,都会先执行“Do”后面的语句,也就是循环体,当执行到Loop While 语句时,再判断的真假,如果为“真”则返回执行循环体里面的各语句,如果为“假”,则退出循环,循环直到条件为“假”终止。也就是说,它至少执行循环体一次。,2019/5/27,47,在两种格式中While语句都可以用Until语句代替,它是直到条件为真时则终止循环。注意While 语句后面的条件和 Until语句的条件正好互补。 例如:求5! 如果使用当型循环则While 后的条件是(N5)。为了避免混淆,所以我们建议只用Do While循环即可。,2019/5/27,48,(3)格式中 Exit Do 为可选项,在上面两种Do 循环结构中,可以有一个或多个Exit Do语句,以便在满足一定的条件下,随时退出循环体。 下页中分别给出前测型Do WhileLoop 和Do Until Loop循环结构的逻辑框图。同学们可自己画出后测型的两种逻辑框图。,2019/5/27,49,开始,计算“条件”值,结束,Y,N,开始,计算“条件”值,结束,N,Y,Do WhileLoop循环逻辑框图,Do UntilLoop循环逻辑框图,2019/5/27,50,【例4-14】任意输入一个自然数,编程输出其各个因子。工程设计步骤如下: (1)新建“标准EXE”工程,在出现的界面上添加三个标签、一个文本框、和两个命令按钮如图4-18所示。,DoLoop循环举例,2019/5/27,51,(2)设置窗体及控件的属性。标签1的Caption属性为“请输入一个自然数”;标签2的Caption属性为“N的因子是:”;标签3的Caption属性为空,在运行时赋值。另外标签3的Autosize属性为True,以便在运行时赋值能根据实际内容自动适应。其他属性如下页图4-18所示。,2019/5/27,52,图4-18求自然数因子的工程界面及属性设置,2019/5/27,53,输入一个数y,图4- 19 输出某个自然数y的所有因子流程图,i=2,y Mod i=0,While y 1,输出 i,y =y i,i = i +1,Y,N,2019/5/27,54,(3)编写代码如下: 编写单击命令按钮“计算”所执行的代码 Private Sub Command1_Click() Dim x As String, y As Single y = Val(Text1.Text) i = 2 x = “,2019/5/27,55,Do While y 1 If y Mod i = 0 Then x = x & “* “ & Str(i) & Chr(13) y = y i Else i = i + 1 End If Loop Label3.Caption = x Label2.Caption = Text1.Text & “的因子是:“ End Sub,为找下一个因子做准备。,2019/5/27,56,(4)运行结果。按F5执行工程,当出现运行界面时,从文本中输入一个自然数,然后单击命令按钮“计算”就会得到如图4-20所示的结果。即在标签3中输出了自然数的各个因子相乘的结果;另外,标签2的内容也根据输入的数自动改变如图4-20所示。,2019/5/27,57,图4-20 求自然数因子的运行结果,2019/5/27,58,【例4-15】用牛顿迭代法求方程的根。所求的方程为: 分析:用牛顿迭代法求方程f (x ) = 0在 x0 附近的实根的方法如下。 (1)选一个接近x 的真实根x1 ; (2)通过x1 求出f( x1 )。在几何中就是作x = x1 ,交f (x )于 f ( x1 )见图4-21所示。 (3)过f( x1 )作f (x )的切线,交x 轴于 x2,可以用公式求出x2。由于,2019/5/27,59,(4)通过x2 求出f( x2 )。 (5)再通过f( x2 )作f (x )的切线,交x 轴于 x3 。 (6)再通过x3 求出f( x3 )。再通过f( x3 )作f (x )的切线,交x 轴于 x4 。一直求下去,直到接近真正的根。当两次求出的根之差 | xn+1-xn |就认为xn+1足够接近于真实的根。,故,2019/5/27,60,牛顿迭代公式是:,f(x),x1,x2,x3,x4,f(x1),f(x2),f(x3),f(x4),y,x,图4-21牛顿迭代法几何原理图,2019/5/27,61,工程设计步骤如下: (1)新建“标准EXE”工程,在出现的界面上添加两个标签、一个文本框、一个图片框和两个命令按钮。如图4-22左图所示。 (2)设置窗体及控件的属性如图4-22左图所示。,4-22牛顿迭代法求方程根工程界面设计及运行结果,2019/5/27,62,(3)编写代码如下 编写单击Command1命令按钮“求根”所执行的代码 Private Sub Command1_Click() Dim f As Double, f1 As Double Const eps = 0.0001 Dim x0 As Double, x1 As Double x1 = Val(Text1.Text),2019/5/27,63,Do x0 = x1 f = Exp(-x0) - x0 f1 = -Exp(-x0) - 1 x1 = x0 - f / f1 Loop While (x1 - x0) eps Picture1.Cls Picture1.Print x1 End Sub,根从图片框上输出,牛顿迭代法求根,2019/5/27,64,编写单击Command2命令按钮“退出”所执行的代码 Private Sub Command2_Click() End End Sub 编写单击窗体所执行的代码 Private Sub Form_Click() Text1.Text = “ “ Picture1.Cls End Sub,2019/5/27,65,编写文本框变化时所执行的代码 Private Sub Text1_Change() Const Tile = “牛顿迭代法求方程根程序“ If Text1.Text “ “ And_ Not IsNumeric(Text1.Text) Then MsgBox “输入的不是数字!“, vbOKOnly, Tile T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论