第5章 Visual Basic控制结构 郭清溥
第5章Visual Basic控制结构 【本章要点】 程序设计三种基本结构: 顺序结构 选择结构 循环结构 常用算法。 课时安排 6学时(理论),6学时(上机)
5.1 算法及其描述 还记得吗? 2.1.2 程序设计 2.程序设计的步骤 (3) 描述算法 自然语言不够精确,容易产生歧义性; 2.1.2 程序设计 2.程序设计的步骤 (3) 描述算法 自然语言不够精确,容易产生歧义性; 伪码非常接近源代码,它要求程序员必须了解这种源代码才行; 流程图是用几何图形、线条、必要的文字来描述处理的步骤,相对来讲比较直观。 还记得吗?
5.1 算法及其描述 还记得吗? 2.1.2 程序设计 2.程序设计的步骤 (3) 描述算法 流程图 表示两个具有相同标记的“连接点”相连 2.1.2 程序设计 2.程序设计的步骤 还记得吗? 流程图 (3) 描述算法 表示两个具有相同标记的“连接点”相连 连接点 表示算法的流动方向 流向线 表示对框内的条件进行判断 判断框 表示对框内的内容进行处理 处理框 表示输入/输出操作 输入/输出框 表示算法的开始或结束 起止框 含义 符号名称 符号
5.1 算法及其描述 还记得吗? 2.1.2 程序设计 2.程序设计的步骤 (3) 描述算法 流程图 False True 条件 A A B 2.1.2 程序设计 2.程序设计的步骤 还记得吗? 流程图 (3) 描述算法 B A 条件 True False A B A 条件 True False
5.1 算法及其描述 还记得吗? 2.1.2 程序设计 2.程序设计的步骤 (3) 描述算法 N-S盒图 True False B A 条件 2.1.2 程序设计 2.程序设计的步骤 还记得吗? (3) 描述算法 N-S盒图 True False B A 条件 A 条件 A B
5.1+ 顺序结构的程序设计 顺序结构是一种线性结构。是程序设计中最简单同时也是最基本的结构。它要求顺序地执行每一个基本的加工处理单位。 语句组1 语句组n 语句组2 … … 语句组2 语句组1 开始 结束 语句组n
5.1+ 顺序结构的程序设计 例 Visual Basic期终成绩由三部分组成:期终考试、作业和测试成绩,它们分别占70%,10%,20%。现有一个学生的成绩依次为 89,90,78,编写程序,求其总评成绩。 例 鸡兔同笼问题:鸡和兔子被放在同一个笼中,现在已知鸡兔的总头数和总脚数。编写程序,求笼中鸡和兔子各多少只?
5.1+ 顺序结构的程序设计 例 编写程序,在实数范围内求解一元二次方程: aX2+bX+c=0 例 A、B、C三人上街买糖果。三人买好后,A对B、C说:“我可以按你们现有的数量再送你们每人一份。”之后,B对A、C ;C对A、B也说了同样的话。互相赠送后,每人各有64块糖果。编写程序,计算A、B、C原来各买了多少块糖果?
5.2 选择结构 选择结构,是一种常用的主要基本结构,是计算机科学用来描述分支现象的重要手段。其特点是:根据所给定选择条件为真(即分支条件成立)与否,而决定从各实际可能的不同操作分支中执行某一分支的相应操作。并且任何情况下恒有“无论分支多寡,必择其一;纵然分支众多,仅选其一”的特性。
5.2 选择结构 5.2.1 简单选择结构 单分支结构格式 功能 块方式: If <条件> Then 5.2.1 简单选择结构 单分支结构格式 功能 块方式: If <条件> Then <语句组1> End If 行方式: If <条件> Then <语句组1> 当条件为真时,执行语句组1;当条件为假时,顺序向下执行。
5.2 选择结构 5.2.1 简单选择结构 单分支结构流程图 语句组1 条件 True False True 条件 ? False 语句组1
T Y = 5 X = 3 Y 5 X 3 T = 5.2 选择结构 5 3 5 5.2.1 简单选择结构 例如: 5.2.1 简单选择结构 例如: 两个数据X,Y比较大小,使得X不小于Y。 间接交换: T = Y : Y = X : X = T 比较时会涉及到交换。 T Y = 5 5 间接交换 ③ ① X = 3 3 Y 5 X 3 ② T = 5 交换
5.2 选择结构 5.2.1 简单选择结构 例如: 两个数据X,Y比较大小。使得X不小于Y。 用下面的语句可以实现 块方式: 5.2.1 简单选择结构 例如: 两个数据X,Y比较大小。使得X不小于Y。 用下面的语句可以实现 块方式: If X < Y Then T = Y : Y = X : X = T EndIf 行方式: If X < Y Then T = Y : Y = X : X = T
5.2 选择结构 5.2.1 简单选择结构 功能 双分支结构格式 块方式: 当条件为真时,执行语句组1;当条件为假时,执行语句组2 。 5.2.1 简单选择结构 双分支结构格式 功能 块方式: If <条件> Then <语句组1> Else <语句组2> End If 行方式: If <条件> Then <语句组1> Else <语句组2> 当条件为真时,执行语句组1;当条件为假时,执行语句组2 。
5.2 选择结构 语句组2 语句组1 条件 5.2.1 简单选择结构 双分支结构流程图 条件 语句组1 语句组2 True False 5.2.1 简单选择结构 双分支结构流程图 条件 语句组1 语句组2 True False 语句组2 语句组1 条件 True False
5.2 选择结构 5.2.1 简单选择结构 例如: x>0 y = x≤0 这个问题可有多种方法实现:
5.2 选择结构 5.2.1 简单选择结构 例如: x>0 y = x≤0 双分支结构: …… If x > 0 Then 5.2.1 简单选择结构 x>0 y = x≤0 例如: 双分支结构: …… If x > 0 Then y = Sin(x) + Sqr((x * x + 1) / x) Else y = Sqr(x*x+1)-5*x End If
5.2 选择结构 5.2.1 简单选择结构 例如: x>0 y = x≤0 可以实现,但不够优化! 单分支结构方法1: …… 5.2.1 简单选择结构 例如: x>0 y = x≤0 可以实现,但不够优化! 单分支结构方法1: …… If x > 0 Then y = Sin(x)+ Sqr((x * x + 1)/x) If x <= 0 Then y = Sqr(x*x+1)-5*x
5.2 选择结构 ? 5.2.1 简单选择结构 例如: x>0 y = x≤0 可以实现,但不够优化! 单分支结构方法2: 语句 5.2.1 简单选择结构 例如: x>0 y = x≤0 可以实现,但不够优化! 单分支结构方法2: …… y = Sqr(x*x+1)-5*x If x > 0 Then y = Sin(x)+ Sqr((x * x + 1)/x) 语句 If x > 0 Then y = Sin(x)+ Sqr((x * x + 1)/x)) 起作用吗? 当X=-1时表达式 Sin(x)+ Sqr((x * x + 1)/x)的结果是什么? 请思考:这样修改程序行吗?为什么? ? …… y = Sin(x)+ Sqr((x * x + 1)/x) If x <= 0 Then y = Sqr(x*x+1)-5*x …… If x > 0 Then y = Sin(x)+ Sqr((x * x + 1)/x) y = Sqr(x*x+1)-5*x
5.2 选择结构 5.2.2 选择结构的嵌套 选择结构内部如果包含了选择结构,这就叫做分支结构的嵌套(或者叫做If语句的嵌套)。 5.2.2 选择结构的嵌套 选择结构内部如果包含了选择结构,这就叫做分支结构的嵌套(或者叫做If语句的嵌套)。 嵌套时要注意: 嵌套的每一个 If 语句必须与 EndIf 配对且使用缩格书写。
编写程序,输入一个X的值,按照以下表达式计算 Y 的值: 5.2 选择结构 5.2.2 选择结构的嵌套 编写程序,输入一个X的值,按照以下表达式计算 Y 的值: 1+X2 (X>0) ① Y= 0 (X=0) ② 1-X2 (X<0) ③ 例5 分析: 我们要根据输入的X的值的范围确定选用哪个表达式计算Y: 如果X>0成立,则利用表达式①计算Y的值; 否则,如果X=0成立,则利用表达式②计算Y的值; 否则,X<0一定成立,利用表达式③计算Y的值。 这就形成了选择结构的嵌套。
5.2 选择结构 5.2.2 选择结构的嵌套 例5
5.2 选择结构 Private Sub comStart_Click() 5.2.2 选择结构的嵌套 Dim X!, Y! 5.2.2 选择结构的嵌套 Private Sub comStart_Click() Dim X!, Y! X = Val(txtX.Text) If X > 0 Then Y = 1 + X * X Else If X < 0 Then Y = 0 Y = 1 - X * X End If txtY.Text = Y End Sub 例5
5.2 选择结构 5.2.3 多分支结构 1. Select Case 语句 功能 格式 Select Case <测试表达式> 在给出的多个备选分支中,测试表达式顺序与表达式1、表达式2比较,当某个比较的结果为真时,则执行下面相应的语句组,语句组执行完成以后,转到End Select语句后执行;如果前面的表达式都不成立,则执行语句组 N+1。 Select Case <测试表达式> Case <表达式1> <语句组1> Case <表达式2> <语句组2> …… [Case Else <语句组 n+1> ] End Select
5.2 选择结构 5.2.3 多分支结构 1. Select Case 语句 说明 (1) Case 语句中的表达式有三种不同的形式: ① 表达式1 [,表达式2 ] … 例如, Case 2,4,6,9 ② 表达式1 To 表达式2 例如, Case "A" To "E" ③ Is 关系表达式 例如, Case Is<=12
5.2 选择结构 5.2.3 多分支结构 1. Select Case 语句 说明 例如, Case 2,4,9 To 12 即当测试值为2、或4、或9、或10、或11、或12时成立。 “测试表达式”的类型应同Case表达式的类型一致。
5.2 选择结构 5.2.3 多分支结构 2.多分支If 语句 功能 格式 当条件1为真时,执行语句组1;当条件2为真时,执行语句组2;……;当条件均为假时,执行语句组n+1。 如果Else选项缺省,且条件均不成立,则顺序向下执行。 If <条件1> Then <语句组1> ElseIf <条件2> Then <语句组2> …… ElseIf <条件n> Then <语句组n> [ Else <语句组n+1> ] End If
5.2 选择结构 5.2.3 多分支结构 2.多分支If 语句 多分支If结构流程图
5.2 选择结构 5.2.3 多分支结构 2.多分支If 语句 多分支If结构流程图
5.2 选择结构 5.2.3 多分支结构 例6 编写程序,将学生的百分制成绩按要求转换成相应的等次输出。等次分为五种,具体划分为: 90 ~ 100: 优秀 80 ~ 89: 良好 70 ~ 79: 中等 60 ~ 69: 及格 0 ~ 59: 不及格
5.2 选择结构 5.2.3 多分支结构 例6 分析: 90 ~ 100: 优秀 80 ~ 89: 良好 70 ~ 79: 中等 90 ~ 100: 优秀 80 ~ 89: 良好 70 ~ 79: 中等 60 ~ 69: 及格 0 ~ 59: 不及格 假设程序中我们分别用R表示输入的百分制成绩,用G表示相应的等次。其中R的值用InputBox输入,输入的R和计算的结果G分别用标签显示。
5.2 选择结构 5.2.3 多分支结构 例6
5.2 选择结构 5.2.3 多分支结构 例6 这个问题可有多种方法实现: A. 多分支If结构: Private Sub cmdStart_Click() Dim R%, G$ R = Val(InputBox("", "输入百分制成绩")) lblR.Caption = "百分制成绩: " & R If R >= 90 Then G = "优秀" ElseIf R >= 80 Then G = "良好" ElseIf R >= 70 Then G = "中等" ElseIf R >= 60 Then G = "及格" Else G = "不及格" End If lblG.Caption = "等 次: " & G End Sub 例6 这个问题可有多种方法实现: A. 多分支If结构:
5.2 选择结构 5.2.3 多分支结构 B. Select Case结构: 例6 Select Case R Case Is >= 90 G= "优秀" Case 80 To 89 G= "良好" Case 70 To 79 G= "中等" Case 60 To 69 G = "及格" Case Is < 60 G= "不及格" End Select Case Is >= 80 这样修改条件语句 结果会如何? 这样修改条件语句 结果会如何? Case Else
5.2 选择结构 结果如何? 5.2.3 多分支结构 例6 C. 单分支结构: If R< 60 Then G= "不及格" 条件语句调整顺序!
5.2 选择结构 5.2.3 多分支结构 例6 D. If语句的嵌套 If R>= 90 Then G= "优秀" Else End If 例6 D. If语句的嵌套
5.2 选择结构 5.2.4 条件函数 VB中提供的条件函数:IIF()函数和Choose()函数,前者代替IF语句,后者可代替Select Case语句,均适用于简单的判断场合。
5.2 选择结构 5.2.4 条件函数 1. IIf()函数 格式 IIf(<条件>,<条件真值时的表达式>,<条件假值的表达式>) 功能 IIf函数首先要计算“条件”、“条件真值时的表达式”、“条件假值的表达式”的值,当“条件”的值为“真”时,则IIf函数返回“条件真值时的表达式”;当“条件”为“假”时,则IIf函数返回“条件假值时的表达式”
5.2 选择结构 5.2.4 条件函数 1. IIf()函数 例如: 取x,y中大的数,将其存入MaxNum变量中。 A. If X>Y Then MaxNum = X Else MaxNum = Y B. If X>Y Then MaxNum = X Else MaxNum = Y End If C. MaxNum = IIf(X > Y, X, Y)
5.2 选择结构 5.2.4 条件函数 2. Choose()函数 格式 功能 Choose()函数会根据“整数表达式”的值来决定返回的值(Choose函数会自动将“整数表达式”的值进行取整操作)。如果“整数表达式”的值是1,则返回“选项列表”中的第1个选项;如果“整数表达式”的值是2,则会返回“选项列表”中的第2个选项;……以此类推。若“整数表达式”的值小于1或大于列出的选项数目,则Choose()函数返回Null。
5.2 选择结构 5.2.4 条件函数 2. Choose()函数 例如 Nop的取值范围为1~4,使其对应转换成“+”、“-”、“×”、“÷” 符号,我们可以使用如下语句: Op$ = Choose(Nop, "+", "-", "×", "÷") 当Nop的值为1时,返回字符串“+”,将其存入Op$变量中;当Nop的值为3时,返回字符串“×”,将其存入Op$变量中;……
5.2 选择结构 5.2.5 GoTo语句的程序实现 格式 Go To{<标号> | <行号>} 功能 该语句的功能是无条件地转移到标号或行号指定的语句行。
5.2 选择结构 有限制的使用。 5.2.5 GoTo语句的程序实现 说明 “行标号”的格式 <行标号>: “行标号”的格式 <行标号>: GoTo语句会破坏程序的结构,因此在VB中要 有限制的使用。 3. 多数情况下GoTo语句可以用循环语句替代。
5.2 选择结构 5.2.5 GoTo语句的程序实现 例7 显示输入数据的算术平方根。 我们可以利用函数Sqr计算数据的算术平方根 Private Sub cmdStart_Click() Dim X%, XSqrt! X = InputBox("输入一个正整数") XSqrt = Sqr(X) lblResult.Caption = X & "的算术平方根=" & XSqrt End Sub
如果输入的数据是负数,则会弹出“出错提示”对话框 5.2 选择结构 5.2.5 GoTo语句的程序实现 例7 显示输入数据的算术平方根。 Err 对象的 Number 如果输入的数据是负数,则会弹出“出错提示”对话框
5.2 选择结构 5.2.5 GoTo语句的程序实现 例7 显示输入数据的算术平方根。 Private Sub cmdStart_Click() Dim X%, XSqrt! X = InputBox("输入一个正整数") XSqrt = Sqr(X) lblResult.Caption = X & "的算术平方根=" & XSqrt End Sub 我们应该对输入的数据加以过滤 ReInput: If X < 0 Then MsgBox "错误!请重做", 0 + 48 + 0, "警告" GoTo ReInput End If
第5章作业1 P116 习题:一、二
第5章作业1 1. 修改讲义中的例4.6,当输入的参数使得一元二次方程没有实数解时,给出提示信息。 2. 从甲地到乙地托运行李。行李重量在50千克以内时,每千克0.80元;超过50千克时,其超过部分每千克1.10元。编写程序,计算托运行李W千克时所付的运费。 3. 输入一年份,编写程序,要求判断出是否为闰年。闰年的条件是能被4整除,但不能被100整除;或者能被4整除又能被400整除(如:1992年,2000年均为闰年)。