vb程序设计教程(潘蕾)vb课件

上传人:san****019 文档编号:16426002 上传时间:2020-10-02 格式:PPT 页数:74 大小:1.09MB
返回 下载 相关 举报
vb程序设计教程(潘蕾)vb课件_第1页
第1页 / 共74页
vb程序设计教程(潘蕾)vb课件_第2页
第2页 / 共74页
vb程序设计教程(潘蕾)vb课件_第3页
第3页 / 共74页
点击查看更多>>
资源描述
第四章 Visual Basic的基本控制结构,授课教师:潘 蕾,E-Mail: ,2,1、掌握VB 程序设计中的常用语句 2、掌握顺序、选择、和循环结构及相应的语句,教学要求,3,教学内容,4.1 顺序结构 4.2 选择结构 4.3 循环结构 4.4 循环嵌套 4.5 程序示例,4,4.1 顺序结构,顺序结构是程序设计中最基本、最简单的结构,在此结构中,程序按照语句出现的先后顺序依次执行。顺序结构是任何程序的基本结构,即使在选择结构和循环结构中也包含有顺序结构。,5,4.1 顺序结构,【例4.1】 单击窗体,在窗体上输出两行不同格式的文字。 新建工程,在窗体的Click事件中添加以下代码: Private Sub Form_Click() Form1.FontSize = 12 Form1.ForeColor = vbRed Form1.Print 您好 Form1.FontSize = 16 Form1.ForeColor = vbBlue Form1.Print 欢迎学习 Visual Basic End Sub,6,4.2 选择结构(分支结构),4.2.1 If-Then-Else- End If语句 4.2.2 Select- Case-End Select语句,选择结构是根据某个条件决定执行哪部分程序,可以用If语句或Select Case语句实现。其中If语句根据分支的多少分为单分支、双分支和多分支If语句。Select Case语句使程序只能根据某一个条件的不同取值来决定执行哪部分程序。大部分情况下两种语句间可以相互替换。,7,1、 If-Then-Else语句(双分支结构) 格式1:If Then Else End If,4.2.1 If-Then-Else-End If语句,逻辑框图:,功能: 如果条件成立,则执行A组语句,否则执行B组语句。,说明: (1)判断条件可以是逻辑变量、关系表达式、逻辑表达式 (2)If和End If语句成对出现;,条件?,A组语句,B组语句,成立,不成立,8,例:计算分段函数y的值。,Private Sub cmdCalculate_Click() Dim x As Single,y As Single x=Val(Text1.Text) If x = 0 Then Else End If Text2.Text=Str(y) End Sub,cmdCalculate,缩格输入,Private Sub cmdExit_Click() End End Sub,Private Sub cmdClear_Click() Text1.Text = Text2.Text = Text1.SetFocus End Sub,从文本框取数据,向文本框放数据,y = 2*Sqr(x+7)-6,y = 5*x+Exp(x)-2,9,格式2:单行If-Then-Else语句 If Then Else 说明: (1)在A组语句和B组语句都只有一个语句时,可使用该格式; (2)End If语句省略。 例:上例可改写为以下程序段。,Private Sub cmdCalculate_Click() Dim y As Single,x As Single x=Val(Text1.Text) If x = 0 Then y = 2*Sqr(x+7)-6 Else y = 5*x+Exp(x)-2 Text2.Text=Str(y) End Sub,10,格式3:省略 ELSE 的 If 语句(单分支语句) If Then End If 格式4:省略 ELSE 的 单行 If 语句 If Then ,逻辑框图,11,2.嵌套的If结构: 在If语句的“语句块”中包含另一个If语句,叫做嵌套的If结构。,If Then 外层 If Then 内层 Else If then Else 最内层 End If Else If Then End If End If,用于解决有多种情况的问题,4.2.1 If-Then-Else-End If语句,12,例:输入三角形的三边a、b、c,求三角形的面积,a0 and b0 and c0,a+bc and b+ca and a+cb,13,Private Sub cmdCalculate_Click() Dim a As Single,b As Single,c As Single,p As Single,s As Single a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If a0 And b0 And c0 Then If a+bc And b+ca And c+ab Then p=(a+b+c)/2 s=Sqr(p*(p-a)*(p-b)*(p-c) Text4.Text=Str(s) Else Text4.Text=“不能构成三角形” End If Else Text4.Text=“边长不能小于0” End If End Sub,计算公式:,其中:,14,练习:键盘输入三个数,将它们从大到小依次排列输出,Private Sub Form_Click() Dim a As Integer, b As Integer, c As Integer, temp As Integer a = InputBox(输入a, 顺序输出) b = InputBox(输入b, 顺序输出) c = InputBox(输入c, 顺序输出) If a c Then Print a, b, c Else Print a, c, b End If End Sub,保证a为a,b两数中的大值,15,例:输入分数并判断等级分。计算规则如下: 分数 100-90 89-80 79-70 69-60 60 等级分 A B C D E,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Degree As String If KeyAscii = 13 Then Score = Val(Text1.Text) If Score = 90 And Score = 80 Then Degree = B Else If Score = 70 Then Degree = C Else If Score = 60 Then Degree = D Else Degree = E End If End If End If End If Text2.Text = Degree End If End Sub,缺点: 嵌套层次过多,结构不清晰,容易出错。,从文本框取数据,向文本框放数据,16,3、多分支If-Then-ElseIf语句 格式: If Then ElseIf Then ElseIf Then Else End If,功能: -对条件自上而下依次判断,若条件i成立,则执行相应的Ai组语句; -若所有条件都不成立,则执行An+1组语句。,4.2.1 If-Then-Else-End If语句,17,(1)该语句结构可以解决多分支问题,只有一个End If语句,避免If语句嵌套层数过多的情况; (2)Else语句可以省略; (3)该结构是一个单出口的结构,即只会执行一组语句。无论执行了哪个语句块,都将执行End If的后继语句。,说 明,18,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Degree As String If KeyAscii = 13 Then Score = Val(Text1.Text) If Score = 90 And Score = 80 Then Degree = B ElseIf Score = 70 Then Degree = C ElseIf Score = 60 Then Degree = D Else Degree = E End If Text2.Text = Degree End If End Sub,特点: 结构清晰。,将上例用If-Then-ElseIf语句改写:,80=Score90 ?,19,格式:Select Case Case Case Case Case Else End Select,功能: 计算测试表达式的值,自上而下检查测试条件; 若表达式的值符合测试 i,则执行相应的语句块 i; 若所有条件都不成立,则执行语句块n+1。,4.2.2 多分支Select-Case-End Select语句,20,例:将上例用Select Case语句改写。,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Degree As String If KeyAscii = 13 Then Score = Val(Text1.Text) Select Case Score Case 90 To 100 Degree = A Case 80 To 89 Degree = B Case 70 To 79 Degree = C Case 60 To 69 Degree = D Case Is60 Degree = E End Select Text2.Text = Degree End If End Sub,21,【例4.4】 将例4.3用Select Case语句实现。,程序代码如下: Private Sub Command1_Click() Dim st As String * 1 st = Text1.Text Select Case st Case a To z Text2.Text = 是小写字母 Case A To Z Text2.Text = 是大写字母 Case 0 To 9 Text2.Text = 是数字字符 Case Else Text2.Text = 是其他字符 End Select End Sub,22,(1)测试表达式可以是算术表达式或字符表达式; (2)测试条件有四种形式: 常量,如2、3、“A”等 闭区间,如3 To 78、“B” To“H”等 开区间,如Is20、 Is30 (3)Case Else语句部分可以省略; (4)以End Select语句结束; (5)该结构是一个单出口的结构,即只会执行一个语句块,若条件中有两个成立,则按语句的顺序执行前面的语句块。无论执行了哪个语句块,都将执行End Select的后继语句。,说 明,23,分支结构的适用情况,验证用户输入数据的合法性 分段函数计算 用于区分等级 其他须根据条件不同执行不同操作的情况,24,例1,例2,25,4.3 循环结构,4.3.1 For-Next 循环结构语句(计数循环) 4.3.2 Do-loop循环结构语句(条件循环) 4.3.3 GoTo语句* 4.3.4 循环嵌套,26,在屏幕上打印5行*号,每行5个:,举例,顺序结构实现: Private Sub Command1_Click() Print * Print * Print * Print * Print * End Sub,循环结构实现: Private Sub Command1_Click() Dim i As Integer Do While i 5 Print * i = i + 1 Loop End Sub,循环控制条件,循环体,注:循环控制条件 是否已打印了5行 循环体在窗体上打印一行“*” 提示:要设立一个变量,用于记录已打印的行数,每打印一行,计数变量要加1,循环控制条件即计数变量小于等于5,27,由一定的条件控制,反复执行某个程序段的程序结构称为循环结构。用于解决一些需要重复进行某些操作的问题。 循环要素: 循环体 重复执行的语句块 循环控制条件 条件或逻辑表达式 注:为防止死循环,在循环体内必须要有对应语句,使得循环执行条件会不满足,结束循环运行。,基本概念,28,4.3.2 Do-Loop 循环(条件循环),Do-Loop循环的两种类型: “当型” (While)循环 “直到型”(Until)循环,29,4.3.2 Do-Loop 循环结构语句 一、“当型”循环:当条件成立时,执行循环体,至少执行一次循环体,30,4.3.2 Do-Loop 循环 二、“直到型”循环:直到 条件成立时,退出循环体,31,(1)Do和Loop为循环结构关键字,必须成对出现,缺一不可; (2)循环体由可执行语句组成,可以嵌套分支结构和循环结构; (3)While语句和Until语句是可以相互转换的; (4)使用Exit Do语句可无条件退出循环,一般情况下在该语句前加上If条件判断,如: If e Then Exit Do 当在执行循环体时,如果条件e被满足,则执行Exit Do语句直接退出循环。,说 明,32,格式五(特殊形式): Do Loop,执行过程:反复执行循环体。 该结构称为“死循环”,在循环体内必须通过 Exit Do 语句强制退出循环体。,Do print “*” i=i+1 If i=5 then Exit Do Loop,注意:如果程序运行时出现死循环, 可以使用 Ctrl+Break中止。,33,算法分析:求最大公约数的常用方法是,例1:求两个数的最大公约数,解决这类问题的核心是如下两点: (1)需要重复运行的操作相除取余 (2)终止循环的条件除数为0,M N R,8,2,0,Do r=m Mod n m=n n=r Loop Until n=0,最大公约数是( )?,m,辗转相除法,0,34,由于输入的数据M和N要求是自然数,在程序中应加入对数据的合法性进行检验的部分; 考虑到程序的应用范围,数据类型可选用长整型。,问题分析及界面设计,35,Private Sub Command1_Click() Dim m As Long, n As Long, r As Long m = Val(Text1.Text) 取数据M n = Val(Text2.Text) 取数据N If m 1 Or n 1 Then Text3.Text = 数据错误! Else Do 求最大公约数 r = m Mod n m = n n = r Loop Until n = 0 Text3.Text = CStr(m) 输出最大公约数 End If End Sub,Private Sub Command2_Click() Text1.Text = Text2.Text = Text3.Text = End Sub,Private Sub Command3_Click() End End Sub,检验数据合法性,Mod 前后加空格,36,例2:将十进制数转换成二进制,算法分析:十进制向二进制转换, 采取的是除2取余法。,解决本问题必须考虑的是如下几点: (1)需要重复运行的操作除2取余 (2)终止循环的条件商为0 (3)二进制字符串的输出由高位到低位,37,注意: 在循环控制条件中必须出现变量,且该变量在循环体中一定要改变值,否则会造成“死循环”,即无休止的循环。 若在运行程序过程若出现“死循环”,用Ctrl+Break可以强制终止程序的执行。,s = Cstr(r) s End Sub,实现累加,练习1:求S=1+2+3+4+100 :,100内的奇数/偶数和?,39,练习2:计算圆周率的近似值。计算公式如下:,计算精确到通项的值小于10-7。 提示:s=s+可实现累加。,解决求累加和的问题,关键注意两点: (1)通项的表示; (2)循环的结束条件;,40,Private Sub Form_Click() Dim Pi As Single, s As Single, r As Single Dim n As Integer n = 1: s = 0s为累加器 Do r = 1 / (2 * n - 1) 2求通项 s = s + r n = n + 1 Loop While r 1e-7 Pi = Sqr(8 * s) Print Pi End Sub,41,1)通项为:,2)循环的结束条件为: |r|1e-4,42,Private Sub Form_Click() Dim Pi As Single, s As Single, r As Double Dim n As Integer n = 1: s = 0 Do r = (-1) (n + 1) * 1 / (2 * n - 1)求通项 s = s + r n = n + 1 Loop While Abs(r) 0.0001 Pi = 4 * s Print Pi End Sub,43,格式: For = To Step 循环体 Next 功能:由计数变量控制,有限次地执行循环体。,4.3.1 计数循环(For-Next循环),相当于以下语句的实现: i= Do Until i ii Loop,44,Private Sub Form_Click() For i = 1 To 10 Step 2 Print i; Next i Print i=; i End Sub,执行本程序,窗体上将显示:1 3 5 7 9 i=11。它表明循环一共执行了5次,退出循环时,i的取值为11。,例1:请写出窗体上打印的内容,以及循环执行的次数。,45,1)循环控制变量主要是用于控制循环的执行次数, 但通过合理的设 置,可以在循环体中巧妙加以利用,以提高程序的效率.,分析:这个式子有现成的求和公式,在这里主要借助该例体现一下在循环体中计数变量的应用。 设:计数变量为i,初值为1,终值为100,步长值为1,可省略。i从1变化到2、3、4、100,正好和式子中的通项变化一致。,S=0 For i=1 To 100 S=S+i Next i,S=0 For i=100 To 1 Step -1 S=S+i Next i,例2:求S=1+2+3+100。,S=0:n=1 Do While n=100 S=S+n n=n+1 Loop,46,For - Next是关键字,成对出现,缺一不可; 循环体由可执行语句组成,可嵌套分支结构和循环结构(例4.6); 计数变量应为整型或单精度型,初值、终值和步长值为相应类型的表达式; 步长值可以为正,也可以为负,省略时默认步长值为1; 循环次数为:Int(终值-初值)/步长值)+1; Exit For语句可以出现在循环体中,用于无条件退出循环; 初值、终值、步长值包含的变量如果在循环体内被改变,不会影响循环执行的次数,但循环控制变量若在循环体内被重新赋值,则循环的次数有可能变化。,说 明:,47,【例4.6】 输入20个整数,分别计算并输出正数和负数的平均值。,程序运行后,显示一个对话框,在对话框中输入第一个数,接着再显示一个对话框,再输入下一个数直到20个数输完为止。输入完20个数之后,文本框1和文本框2中分别显示正数和负数的平均值。,Private Sub Form_Click() Dim i As Integer, number As Integer Dim Pnumber As Integer, Nnumber As Integer Dim p As Integer, n As Integer Dim Pav As Single, Nav As Single For i = 1 To 20 number = InputBox(Enter data:) 输入数据 If number 0 Then Pnumber = Pnumber + number 正数求和 p = p + 1 正数计数 Else Nnumber = Nnumber + number 负数求和 n = n + 1 负数计数 End If Next i Pav = Pnumber / p 求正数平均值 Nav = Nnumber / n 求负数平均值 Text1.Text = Str(Pav) 显示正数平均值 Text2.Text = Str(Nav) 显示负数平均值 End Sub,48,*写出下列程序的运行结果,Private Sub Form_Click() Dim p As Integer, i As Integer, n As Integer p = 2: n = 20 For i = 1 To n Step p p = p + 2 n = n - 3 i = i + 1 If p = 10 Then Exit For Next i Print i, p, n End Sub,49,分析:这类问题没有什么算法,只有将所有情况列举然后检查得分情况,直到发现答案为止。设该生共答对i道题,答错(26-i)道题,如果 i*8-(26-i)*5=0 那么i就是答案。i的变化范围是1-26。一旦找到答案,可以立即结束循环。,穷举法要点: -通过循环语句,遍历所有可能的情况; -在循环体内通过条件语句,将符合条件的情况找出来。,例3:某试卷有26个问题,答对一题得8分,答错一题扣5分,某学生 回答了全部26个问题,总分为0分,问他答对几道题,答错几道题。,Private Sub Form_Click() Dim i As Integer For i = 1 To 26 If i * 8 - (26 - i) * 5 = 0 Then Exit For Next i Print 答对; i; 道, 答错; 26 - i; 道 End Sub,条件(关系表达式),50,*例4 从字母数字组成的字符串中找出所有的大写字母并逆序输出(P71-例5-5),51,一、界面设计(如上图) 二、算法设计 由题意,所需执行的操作应该是:依次判断字符串中的每一个字符是否是大写字母,若是,则取出放入结果字符串中。 1)考虑通过在一个循环结构里面嵌套一个判断结构实现,因重复执行判断的次数,即字符串的长度len(s)已知,则循环结构用FOR语句实现; 2)判断一个字符是否是大写字母,可先将单个字符从字符串中取出Mid(s,i,1),并将该字符直接与“A”、”Z”字符进行比较,应大于等于“A” ,并同时小于等于”Z”x=“A” AND x=“Z”; 3)要实现逆序,即将最新获得的大写字母字符,连接在已获得的结果字符串的前面t=x 是素数! Else Print x; 不是素数! End If,i = x,For i=2 To x-1 If x Mod i=0 Then Print x;不是素数 Else Print x;是素数 End If Next i,其实不用整除到X-1,整除到Sqr(X),即可判断,错误程序,54,4.3.3 GoTo语句(选讲),前面介绍的循环结构都是根据某个条件进行循环,称为有条件跳转语句;还有一种结构,即GoTo语句,是无条件跳转语句,程序执行到该语句时不需要判断条件,直接将程序执行的流程无条件地转移到本过程的另一段程序代码。 格式为: GoTo 行标签|行号 行标签为语句行标识符的简称。该语句在执行后,无条件地转移到行标签或行号所在的位置处往下执行。行标签的命名与变量命名相同,行标签的后面跟“:”,行号则采用正整数形式。 GoTo语句可以改变程序的执行顺序,跳过程序的某一部分去执行另一部分,或者返回已经执行过的某段程序使之重复执行,因此,用GoTo语句可以构成循环。 在结构化程序设计中,要尽量少用或不用GoTo语句,以免造成结构混乱,程序可读性下降,用选择结构或循环结构来代替。,55,【例4.8】 用GoTo语句编写例4.7程序,程序代码如下: Option Explicit Private Sub Command1_Click() Dim n As Integer, sum As Integer n = 1 sum = 0 There: sum = sum + n n = n + 1 If sum 1000 Then GoTo There Print sum最小值=; sum Print n最小值=; n -1 End Sub,56,4.4 循环的嵌套 所谓循环的嵌套,是指在循环结构中包含另一个循环结构。条件循环和计数循环可以相互嵌套。,57,例1:在窗体上按行依次打印1到10,每个数字打印10遍。 分析:这是一个典型的需要用二重循环结构的例子,外层用于控制打印的数字,内层控制每个数字打印的遍数。,Private Sub Form_click() Dim i as integer,j as integer For i=1 to 10 For j=1 to 10 Print i; Next j Print Next I End Sub,问题: 在执行整个程序中 print i 语句共执行了多少次?,打印10个数字,每个数字打印10遍,换行,58,(1)内层循环必须完全包含在外层循环之中,不能交叉; (2)内层循环中还可以嵌套循环结构,但建议不要使用多层循环,解决一般问题最多需要三重循环; (3)在多重DO-LOOP循环中,若有EXIT DO语句,则只会强制退出该语句所在的循环,并执行LOOP的后续语句,并不会退出所有的循环(就近原则)。 (4)在多重FOR-NEXT循环中,若有EXIT FOR语句,则只会强制退出该语句所在的循环,并执行NEXT的后续语句,并不会退出所有的循环。,说 明,59,【例4.9】 编写程序,找出100以内所有满足a2+b2=c2且ab的自然数组合。,本题也属于“穷举”问题,解题的基本思想是:一一列举各种可能的情况,并判断哪种情况是符合要求的解,这种算法称为穷举法(又称“枚举法”),通常采用循环结构来实现。 程序界面如图所示,主要由三个列表框和一个命令按钮及用于说明的标签组成,查找到的a、b、c分别放入三个列表框中,组数显示在界面下方的标签4上。,60,程序代码如下: Private Sub Command1_Click() Dim a As Integer, b As Integer, c As Integer Dim i As Integer For a = 1 To 100 For b = 1 To 100 For c = 1 To 100 If a 2 + b 2 = c 2 And a=b Then List1.AddItem a List2.AddItem b List3.AddItem c i = i + 1 End If Next c Next b Next a Label4.Caption = 共有 S End Sub,Private Sub Form_Click() Dim S As Long, i As Integer Dim fact As Long fact = 1 For i = 1 To 10 fact = fact * i S = S + fact Next i Print s=; S End Sub,*问题:这两段程序的功能分别是什么?,请注意多重循环中赋初值语句的位置。,62,4.5 程序示例,63,例1:产生10个2050随机整数,打印在窗体上,并指出最大值和最小值。,分析: 1. 要求得到10个随机数,用记数循环FOR语句实现。 2. 产生随机整数的方法是 x = Int(上界 -下界+1)*Rnd)+下界 必须和Randomize语句配合使用。 3. 要求出最大值和最小值,则每产生一个随机数,即与已知的最大数、最小数比较,若它大于已知的最大数,则它是新的最大数;若它小于已知的最小数,则它是新的最小数。,64,Private Sub Form_Click() Dim i As Integer, x As Integer, Dim max As Integer, min As Integer For i = 1 To 10 x = Int(Rnd * 31) + 20 Print x; Next I Print Print max=; max Print min=; min End Sub,max = 20: min = 50,If max x Then min = x,65,例2: 找出所有三位水仙花数。所谓水仙花数,是指各位数字的立方和等于它本身的数,如153=13+53+33。 (P77例5-9),解题思路: 第一步:找出确定一个数是水仙花数的方法; 第二步:从100到999依次判断。 算法实现: 采用循环穷举所有100到999的整数 确定是否水仙花数的基本要素是分解出个、十、百位上的数值进行立方和运算,方法如下: 1、穷举法 2、算术法 3、截取字符串法,66,Private Sub Command1_Click() Dim i As Integer, a As Integer, b As Integer Dim c As Integer, st As String For i = 100 To 999 a=i100 b=(I Mod 100)10 c=I Mod 10 If i=a3+b3+c3 Then st = i If n Mod 2 = 0 Then ou = ou + n Else ji = ji + n End If Next i Print Print 奇数之和=; ji Print 偶数之和=; ou End Sub,解1:,73,解2:找出1000以内的所有完数。所谓完数,是指它的所有的质因子之和等于它本身的数,如6=1+2+3。,解题思路: 第一步:找出确定一个数是完数的方法; 第二步:从1到1000依次判断。 算法实现: 两层循环: 内层循环用于找出某数 m 的所有因子并相加求和,并在循环结束后依据因子和是否与该数相等来判断该数是否是完数; 外层循环则用于穷举所有1000以内的整数。,74,Private Sub Form_Click() Dim i As Integer, f As Integer, s As Integer For i = 1 To 1000 s = 0 For j = 1 To i - 1 If i Mod j = 0 Then s = s + j Next j If s = i Then Print i Next i End Sub,注意s赋初值的位置,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!