1、第四章 算法基础及VB的基本语句,2,1、了解结构化程序设计的基本概念2、掌握VB 程序设计中的常用语句3、掌握顺序、选择、和循环结构及相应的语句,教学要求,3,教学内容,4.1 算法及程序设计基础4.2 赋值语句及InputBox、MsgBox函数4.3 分支结构与分支结构语句4.4 循环结构与循环结构语句4.5 程序示例,4,4.1 算法及程序设计基础,一个程序( 过程)应包括:Nikiklaus Wirth认为:有人认为:,对数据的描述:指定所用数据的类型,作用域和数据的 组织形式,即数据结构(data structure)。 对操作的描述:即操作步骤,也就是算法(algorithm)。
2、,数据结构+算法=程序,程序=算法+数据结构+程序设计方法+语言工具和环境,5,1、算法的概念,算法即解决某个问题或处理某件事的方法和步骤;“采用什么结构,使用什么语句以及如何安排这些语句”。算法分类:数值计算算法非数值计算算法算法优劣: 正确性,效率,占用系统资源,便于理解,易于调试等。,6,18,10,M N R,8,10,8,2,8,2,0,2,0,R=8,R=2,R=0,M=2即最大公约数,求最大公约数,题目:求两个自然数的最大公约数分析:求最大公约数的常用方法是辗转相除法(欧几里德算法)。,2、算法示例,7,算法描述:,S1 输入两个自然数:M,N;S2 求M除以N的余数R;S3 使
3、M=N,即用N代换M;S4 使N=R,即用R代换N;S5 若R0,则重复执行S2,S3,S4,否则转至S6S6 输出M,M即为M,N的最大公约数。,8,3、算法的特征,确定性 可行性 有穷性 输入性 输出性,9,4、算法的描述,程序流程图,求最大公约数,10,程序编码实现算法,算法仅提供解题思路,计算机不可直接执行。用某一程序设计语言所提供的语言成分,根据该语言的特点,并利用该语言的各种工具和手段,遵照规定的语法规则去实现算法,得到原程序代码,计算机可识别并执行。,11,5.基本算法结构,1). 顺序结构,语句1,语句2,语句块,结构化程序设计,12,2)选择结构,结构化程序设计,13,3)循
4、环结构,结构化程序设计,14,三种基本结构的共同特点,只有单一入口和单一出口;结构中的每一部分都有被执行的可能;结构内不应出现永不终止的死循环。,15,4.2 赋值语句及InputBox、MsgBox函数,4.2.1 赋值语句4.2.2 InputBox函数4.2.3 MsgBox函数,16,4.2.1 赋值语句 格式:= 功能:先计算表达式的值,再将该值赋予左端的变量。 说明: -赋值号左端不仅可以是变量名,还可以是对象的属性; -表达式的类型和变量的类型要一致 -赋值语句是按语句出现的先后顺序执行的(顺序结构) 举例:,str1 = Nice to meet you number% = 7
5、2 Lable1.Caption = Filename is: Text.FontSize = 12 改变字号,17,使用下面的方法可以获取一个对象的属性值:var = object . Property 例如:Label1.Caption=Text1.Text 式中,var是变量名、object是对象名、property是该对象的某个属性名。特别注意:属性也存在数据类型,所以在获取对象的属性值时,最好使用具有相同数据类型的变量。,说明,18,注意:赋值号(=)与比较运算符(=)不同 赋值是独立的一条语句; 由运算符(=)连结两个操作数的关系表达式是语句的一部分, 不可单独存在 比较运算符不会
6、改变操作数的值; 赋值语句会,改变赋值号左边的量,所以必须是可以被赋值的变量或属性,Dim x As Integer, y As Integer, z As Booleanx=3 : y=4 : y=xz = x=yPrint x, y, z,19,Private Sub Form_Click() Dim a As Integer,b As Integer a=10 b=3*a Print a,bEnd Sub,Private Sub Form_Click() Dim a As Integer,b As Integer b=3*a a=10 Print a,bEnd Sub,例:单击窗体,下列
7、两段程序的执行结果分别是()和()。,提示:利用赋值语句给变量赋值后,在未有新的赋值语句再次给它赋值前,变量值保持不变。,20,例:交换两个变量的值。,Private Sub Form_Click() Dim a As Integer,b As Integer a=10 : b=2 Print a,b 填入程序代码 Print a,bEnd Sub,正确答案Dim Temp As IntegerTemp=a : a=b : b=Temp,题目说明单击窗体程序执行结果为: 10 2 2 10, 注意 变量a和b为两个不定值的变量,因此不能直接用 a=2 : b=10语句来解决这个问题。,一旦利用
8、赋值语句给变量赋新值,会覆盖原值,所以不能直接用 a=b : b=a语句来解决这个问题。,21,例:求一元一次方程x+5=0的解。,Private Sub Form_Click() Dim x As Integer 3*x+5=0 Print “x=”;xEnd Sub,Private Sub Form_Click() Dim x As Integerx=(0-)/3 - Print “x=”;xEnd Sub,语句是该例题的算法。,错误程序,正确程序,总结: 利用程序设计语言处理问题,我们首先要知道的是怎么解决问题,其次要知道怎么将解决问题的方法用程序设计语言来表达。,22,4.2.2 In
9、putBox函数格式:InputBox$(,)功能: 弹出对话框,用户输入数据后回车或单击“确定”按钮后,将输入内容赋值给相应的变量;按ESC键或单击“取消”按钮,返回空串。,23,说明(1)prompt:必选项。对话框中的提示信息。(2)title:可选。对话框的标题。省略则为应用程序名。(3)default:可选。显示在用户编辑框中的缺省值,省略为空。(4)x,y:可选。指定对话框的显示位置,省略则居中。,例:i = InputBox(“输入数组元素”+Chr(10)+“第一个元素为:”,程序示例, 100),缺省值,标题,提示字符串,24,例:用InputBox函数输入出生日期,计算年龄
10、。,Option ExplicitPrivate Sub Form_Click() Dim BirthDay As Date, Age As Integer BirthDay = InputBox(输入出生日期, 计算年龄) Age = Year(Date) - Year(BirthDay) Print 你今年:; Age; 岁End Sub,25,如果赋值号左端的变量为数值型或日期型等非字符型变量,输入字符数据 单击“取消”按钮 不输入直接按回车键,则系统都会提示出错:,Dim x As Integerx = InputBox(输入数组元素 + Chr(10) + 第一个元素为:, 示例,
11、10, 100, 100),注意,26,4.2.3 MsgBox函数格式:MsgBox(Prompt,Button,Title,HelpFile,Context)功能:向用户发布提示信息,并要求用户作出必要的响应。说明: (1)Prompt:必选项。字符串表达式,对话框中的提示信息。 (2)Button:指定显示按钮的数目及形式,使用的图标样式,这是一个由4个数值常量组成的式子,形式为c1+c2+c3+c4,用于决定信息框中按钮的个数和类型以及出现在信息框中的图标类型,各个参量的可选值及其功能; 详见P.62表4.2 (3)Title:对话框标题栏的显示信息。,27,MsgBox 需要重新来一
12、次?, 2 + 32 + 256 + 4096, 询问,MsgBox 数据非法,请重输!,1 + 16 + 0 + 4096, 警告,举 例,28,方法一: 发布提示信息,无须用户响应,在程序中作为独立语句存在,不加括号;例: MsgBox 非法数据!, , 警告,如果省略其中参数,逗号不能省略,MsgBox函数的用法,方法二: 需要用户响应,和普通函数调用方法相同。例: Response=MsgBox(真的删除该项吗?,4+48,提示信息) If Response=vbYes Then Else End If,29,4.3 分支结构与分支结构语句,4.3.1 If-Then-Else- En
13、d If语句4.3.2 Select- Case-End Select语句,30,1、 If-Then-Else语句格式1:If Then Else End If,4.3.1 If-Then-Else- End If语句,逻辑变量、关系表达式、逻辑表达式,逻辑框图:,功能: 如果条件成立,则执行A组语句,否则执行B组语句。,说明:If和End If语句成对出现,缺一不可;Else和B组语句部分可以省略,当条件不成立时,直接执行End If的后继语句;,31,Private Sub cmdCalculate_Click() Dim x as Single x=Val(text1.text) If
14、 x= 0 Then Text2.text = Str(Sqr(x) Else Text2.text = 数据小于0,错误! End IfEnd Sub,Private Sub cmdExit_Click() EndEnd Sub,Private Sub cmdClear_Click() Text1.Text = Text2.Text = Text1.SetFocusEnd Sub,例:从键盘输入一个数,求它的平方根。,缩格输入,32,例:计算分段函数y的值。,Private Sub cmdCalculate_Click() Dim x As Single,y As Single x=Val(
15、Text1.Text) If x = 0 Then y = 2*Sqr(x+7)-6 Else y = 5*x+Exp(x)-2 End If Text2.Text=Str(y)End Sub,cmdCalculate,33,格式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
16、 y = 2*Sqr(x+7)-6 Else y = 5*x+Exp(x)-2 Text2.Text=Str(y)End Sub,34,格式3: If Then End If格式4: If Then ,逻辑框图,35,2.嵌套的If结构 在If语句的“语句块”中包含另一个If语句,叫做嵌套的If结构。,If Then 外层 If Then 内层 Else If then Else 最内层 End IfElse If Then End IfEnd If,用于解决有多种情况的问题,36,例:输入三角形的三边a、b、c,求三角形的面积,P 64 例4-1,a0 and b0 and c0,a+bc
17、and b+ca and a+cb,37,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 (1) 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
18、 If Else Text4.Text=“边长不能小于0” End IfEnd Sub,计算公式:,其中:,a0 And b0 And c0,38,例:计算分段函数y的值。,Private Sub cmdCalculate_Click() Dim x As Single,y As Single x=Val(Text1.Text) If x0 Then y=1/(x-5) Else If x5 Then y=3*x2+4*x+5 Else y=Log(x) End If End If Text2.Text=Str(y)End Sub,39,例:输入分数并判断等级分。计算规则如下: 分数 100-
19、90 89-80 79-70 69-60 = 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 IfEnd Sub,缺点: 嵌套层次过多,结构不清晰,容易出错。,从文本框取数据,向文本框放数据,40,3、多分支If-Then-ElseIf语句格式: If Then ElseIf Then ElseIf T
20、hen Else End If,功能:-对条件自上而下依次判断,若条件i成立,则执行相应的Ai组语句;-若所有条件都不成立,则执行An+1组语句。-无论执行了哪个语句块,都将执行End If的后继语句。,41,(1)该语句结构可以解决多分支问题,只有一个End If语句,避免If语句嵌套层数过多的情况;(2)Else语句可以省略;(3)该结构是一个单出口的结构,即只会执行一组语句,若条件中有两个成立,则按语句的顺序执行前面的一组语句。,说 明,42,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim Score As Integer, Deg
21、ree 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 IfEnd Sub,特点:结构清晰。,将上例用If-Then-ElseIf语句改写:,90Score20、 Is“P”等 以上三种形式的组合,以逗号间隔,条件组
22、合是或的关系,不能表示与的关系 (3)Case Else语句部分可以省略;(4)以End Select语句结束;(5)该结构是一个单出口的结构,即只会执行一个语句块,若条件中有两个成立,则按语句的顺序执行前面的语句块。,说 明,45,例:将上例用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 T
23、o 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 IfEnd Sub,46,练习:键盘输入三个数,将它们从大到小依次排列输出。,Private Sub Form_Click()Dim a As Integer, b As Integer, c As Integer, temp As Integer a = InputBox(输入a, 顺序输出) b =
24、 InputBox(输入b, 顺序输出) c = InputBox(输入c, 顺序输出) If a c Then Print a, b, c Else Print a, c, b End IfEnd Sub,保证a为a,b两数中的大值,47,分支结构的适用情况,验证用户输入数据的合法性分段函数计算用于区分等级其他须根据条件不同执行不同操作的情况,48,4.4 循环结构与循环结构语句,4.4.1 Do-loop循环结构语句(条件循环)4.4.2 For-Next 循环结构语句(计数循环)4.4.3 循环嵌套,49,由一定的条件控制,反复执行某个程序段的程序结构称为循环结构。 用于解决一些需要重复
25、进行某些操作的问题。 循环要素: & 循环控制条件 条件或逻辑表达式 & 循环体 重复执行的语句块 & 为防止死循环,在循环体内必须要有对应语句,使得循环控制条件会不满足,结束循环运行。,基本概念,50,例:在窗体上打印10行“Hello”。 循环控制条件 是否已打印了10行 循环体在窗体上打印一行“Hello” 提示:要设立一个变量,用于记录已打印的行数,每打印一行,计数变量要加1,循环控制条件即计数变量小于等于10,51,一、“当型”循环条件成立时,执行循环体,图2:先执行一次循环体,然后再判断条件,决定是否继续执行循环,此结构至少执行一次循环体。,图 1,图 2,图1:先判断条件,当条件
26、成立则执行循环体,否则执行循环结构的后续语句。,52,二、“直到型”循环条件不成立时,执行循环体,图3:先判断条件,条件不成立则执行循环体,直到条件不成立,执行循环结构的后续语句。,图 3,图 4,图4:先执行一次循环体,再判断条件,决定是否继续执行循环。,53,4.4.1 Do-Loop 循环结构语句格式一 Do While Loop,执行步骤:1 判断条件是否成立。如果条件不成立,转向第4步2 执行循环体;3 转向执行第1步;4 执行Loop语句的后继语句。,当型循环,54,Private Sub Form_click() Dim i as integer i=0 Do While i10
27、 print “hello” i=i+1 LoopEnd Sub,上例的实现:,缩格,55,例 求S=1+2+3+4+100,Private Sub Form_click() Dim n as Integer,s as Long n=1 s=0 Do While n=100 s=s+n n=n+1 Loop Print “1+2+3+100=”;sEnd Sub,实现累加,56,格式二: Do Loop While ,执行步骤:1 执行循环体; 2 判断条件是否成立。如果条件成立,转向第 1 步3 条件不成立,则结束循环,执行Loop语句的后继语句。,当型循环,57,格式三 Do Until
28、Loop,执行步骤:1 判断条件是否成立。如果条件成立,转向第4步2 执行循环体;3 转向执行第 1 步;4 执行Loop语句的后继语句。,直到型循环,58,格式四 Do Loop Until ,执行步骤:1 执行循环体; 2 判断条件是否成立。如果条件不成立,转向第 1 步,若条件成立,则执行 第3步 3 执行Loop语句的后继语句。,直到型循环,59,(1)While 短语总是在条件成立时,继续进行循环;条件不成立时,结束循环。因此用于“当型”循环;(2)Until 短语总是在条件不成立时,执行循环体;条件成立时,则结束循环。因此称为“直到型”循环;(3)上述两条短语是可以相互转换的。,总
29、 结,Do While i=10 print “hello” i=i+1 Loop,60,格式五(特殊形式): Do Loop,执行过程:反复执行循环体。该结构称为“死循环“,在循环体内必须通过 Exit Do 语句强制退出循环体。Exit Do语句一般与If-then语句结合使用,即当满足某一条件时,才强制退出循环。 If Then Exit Do,Loop后续语句,Do print “hello” i=i+1 If i=10 then Exit Do Loop,61,(1)Do和Loop为循环结构关键字,必须成对出现,缺一不可;(2)循环体为可执行语句组成,可以嵌套分支结构和循环结构;(3
30、)语句 Exit Do 用于无条件退出循环,可在任意Do-Loop语句结构的循环体中出现。(4)使用循环结构,一定要避免死循环的出现。,Do-Loop语句使用说明,62,算法分析:求最大公约数的常用方法是 辗转相除法。,例:求两个数的最大公约数。,P 68 例4-3,18,10,M N R,8,10,8,2,8,2,0,2,0,R=8,R=2,R=0,M=2即最大公约数,63,在该例中,我们使用了三个变量,分别表示被除数(m)、除数(n)及余数(r)。,Do r=m Mod n m=n n=rLoop Until r=0,最大公约数是( )?,64,由于输入的数据M和N要求是自然数,在程序中应
31、加入对数据的合法性进行检验的部分; 考虑到程序的应用范围,数据类型可选用长整型。,问题分析及界面设计,65,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 Int(m) Or m Int(n) Or n 1e-7 Pi = Sqr(8 * s) Print PiEnd Sub,70,71,Private Sub Form_Click() Dim Pi As Single, s As Single, r A
32、s 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 PiEnd Sub,72,格式: For = To Step 循环体 Next 功能:由计数变量控制,有限次地执行循环体。,4.4.2 计数循环(For-Next循环),步骤:1. 计算初值、终值和步长值,将初值赋予计数变量;2. 比较计数变量和终值,若计数变量大于终值,结束循环;3. 计数变量小于终值,执行循环体;4. 计数变量=计数变量+步长值5. 转向第2步。,73,For - Next是关键字,成对出现,缺一不可; 循环体由可执行语句组成,可嵌套分支结构和循环结构; 计数变量应为整型或单精度型,初值、终值和步长值为相应类型的表达式; 步长值可以为正,也可以为负,省略时默认步长值为1; 循环次数为:Int(终值-初值)/步长值)+1 Exit For语句可以出现在循环体中,用于无条件退出循环,说 明,74,Private Sub Form_Click() For i = 1 To 10 Step 2 Print i; Next i Print i=; iEnd Sub,