vb选择结构程序设计.ppt_第1页
vb选择结构程序设计.ppt_第2页
vb选择结构程序设计.ppt_第3页
vb选择结构程序设计.ppt_第4页
vb选择结构程序设计.ppt_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第5章 选择结构程序设计,本章要点: 1块结构条件语句IfThenEnd If的使用 2多分支条件语句ElseIf的应用 3 多分支选择语句Select CaseEnd Selec的应用 选择结构是一种常用的基本结构,其特点是根据所给定的选择条件为真或假,来决定从不同操作中选择执行一种操作。,选择结构程序设计,5.1 块If条件语句,5.4 Select Case 语句,5.5 应用举例,返回,退出,5.2 块If语句的嵌套,5.3 ElseIf条件语句,5.1块If语句(If.Then语句),块If语句是用来判断条件成立与否,然后决定下一步怎么执行的一种控制语句,这种选择结构是最常用的双选择结构,即只有两种操作可以选择。如果条件为真,执行其中一个操作;如果条件为假,则执行另外一个操作。 块结构if语句语法格式如下: If Then Else End If,说明: 为必选项,它可以是关系表达式、布尔表达式、数值表达式或字符串表达式,但总的说来它是一个逻辑值的表达式,其返回结果必须是True或False。对于数值表达式,VB将0作为False,非0作为True 来处理;对于字符串表达式,VB只允许出现包含数字的字符串,当字符串中的数字值为0时,则认为是False,否则认为是True。 和可以是一条语句,也可以是多条语句。,单行结构If语句的执行过程是这样的:首先计算的值,如果结果为True,则执行,否则,执行。,选择结构流程图,【例5.1】设计界面如图5-2所示,用文本框Text1输入x的值,单击按钮时,在标签Label1中显示出x的绝对值。 运行界面 “求绝对值”按钮Command1的单击事件过程如下: Private Sub Command1_Click() x = Val(Text1.Text) 将文本框中的字符内容转换成数值 If x 0 Then Label1.Caption = x Else Label1.Caption = -x 根据x的正负确定显示结果 End Sub,使用该语句时,应该注意以下问题: (1)整个块结构必须以If开始,以End If结束。 (2)块结构If 语句中Then后面的语句不能与其写在同一行上,否则,必须加上分隔符。 (3)块结构中的是可以省略的。省略后即简化为以下形式: If Then End If 这种形式的If语句主要用来判断一些操作是否执行。当条件成立时,根据完成的一定的操作;而当条件不成立时不做任何处理,直接执行下条语句。,例如,例5.1也可以采用下列程序段来实现。 x = Val(Text1.Text) If x 0 Then x = -x 取负数x的相反数 End If Label1.Caption = x (4)在块结构中,If后面显式的给出了判断条件,Else后面虽然没有显式的给出一个条件,但相当于存在一个与If部分相反的隐含条件。,返回,在实际应用中,经常会遇到“多分支”选择的程序,即从多种情况中选择执行其中一种情况,这时,就要使用块if语句的嵌套。 块结构If语句可以嵌套,即在上述结构中的和部分仍然可以包含另外一个块结构If语句。如果在条件成立或不成立的情况下要继续判断其他条件,则可以在语句块的位置上再使用另外一个块结构条件语句。,5.2 块if语句的嵌套,If子句部分的嵌套结构,Else子句部分的嵌套结构,使用嵌套语句时应注意以下问题: (1)如果存在嵌套时,语句中的每一个Else必须和一个If相对应,应避免产生混乱。在书写时,可以将同一层的If子句和Else子句左对齐,内层的各语句块相对于外层向右缩进若干空格,以使程序结构更加清楚,便于阅读和查错。 (2)每一个块结构都必须以If开始,以End If结束。 (3)内层嵌套的块结构中除了满足该层规定的条件外,还必须首先满足外层结构中相应位置的条件。 (4)VB中对块嵌套的层数没有限制,在嵌套的块结构中仍然可以继续嵌套其他的块结构,但嵌套时外层的块结构必须完全“包住”内层的块结构,不能相互“骑跨”。 (5)利用块If语句的嵌套可以解决“多分支”选择的问题。,【例5.2】建立如图5-3所示的界面,输入任一点的坐标(X,Y),判断该点位于哪个象限。 在平面直角坐标系中,点所在的象限有以下4种情况: X0 ,Y0 点位于第一象限内 X0, Y0 点位于第二象限内 X0, Y0 点位于第三象限内 X=0或Y=0 位于原点,给出提示“该点不在任何象限内”。 建立界面,分别通过文本框Text1和Text2输入坐标X、Y的值,单击“判断”按钮Command1进行判断,将结果直接显示在窗体上。,Private Sub Command1_Click() x = Val(Text1.Text) y = Val(Text2.Text) 判断坐标点是否位于坐标轴 If x = 0 Or y = 0 Then Print “该点不位于任何象限“ Exit Sub End If 判断坐标点所在象限 If x 0 Then If y 0 Then Print “该点位于第一象限“ Else Print “该点位于第四象限“ End If Else If y 0 Then Print “该点位于第二象限“ Else Print “该点位于第三象限“ End If End If End Sub,程序代码如下:,程序运行界面,【例5.3】编程序求一元二次方程ax2+bx+c=0的根(a不等于零)。 分析:根据数学知识,要求一元二次方程的根,必须知道方程的三个系数a、b、c的值,然后根据判别式b2-4ac的值的情况判断方程的根。方程的根有以下三种情况: 当b2-4ac0时,方程有两个不相等的实根; 当b2-4ac=0时,方程有两个相等的实根; 当b2-4ac0时,方程有两个复根。,设计如右所示的界面,分别在文本框Text1、Text2和Text3中输入a、b、c的值,单击“求解”按钮后在标签Label5中给出方程的解。,“求解”按钮的事件代码如下: Private Sub Command1_Click() Dim a, b, c, dert As Integer Dim p, r, x1, x2 As Single Dim str As String str = Chr(10) & Chr(13) a = Val(Text1.Text) 判断a是否为0,如果为0,则退出过程 If a = 0 Then MsgBox “a不能为0“: Exit Sub b = Val(Text2.Text) c = Val(Text3.Text) dert = b * b - 4 * a * c p = -b / (2 * a) If dert = 0 Then If dert 0 Then r = Sqr(dert) / (2 * a),x1 = p + r x2 = p - r Else x1 = p x2 = p End If Label5.Caption = “x1=“ & x1 & str & “x2=“ & x2 Else r = Sqr(-dert) / (2 * a) Label5.Caption = “x1=“ & p & “+“ & r & “i“ & str & “x2=“ & p & “-“ & r & “i“ End If End Sub,返回,5.3 ElseIf语句,ElseIf子句的格式: If 条件1 then 语句块1 ElseIf 条件2 then 语句块2 Else 语句块n+1 End If,对ElseIf子句的格式说明: (1)可以放置任意多个ElseIf子句。 (2)关键字ElseIf中间没有空格,不能写成Else If。 ElseIf子句的功能:依次判断条件,如某一条件成立,则执行其下面的语句块;如果所有条件均不成立,则执行Else后面的语句。在相应语句块执行完后,会跳过End If,执行其后面的语句。,Else If结构执行过程,功能说明: (1)不管有几个ElseIf子句,程序执行完一个语句块后,其余ElseIf子句不再执行。 (2)当多个ElseIf子句中的条件都成立时,只执行第一个条件成立的子句中的语句块。因此,在使用ElseIf语句时,要特别注意各判断条件的前后次序。,【例5.4】输入一个学生的成绩score,根据其所在分数段给出他的考试等级。,score60时,打印“不及格”; 60=score=70时,打印“一般”; 70score=80时,打印“中等”;,80100时,打印“成绩有问题”。,该程序就是一个多分支选择的问题,可以使用ElseIf语句实现。程序代码如下: Private Sub Command1_Click() Dim score As Single score = Val(Text1.Text) If score = 60 And score 70 And score 80 And score 90 And score = 100 Then Print “优秀“ Else Print “成绩有问题“ End If End Sub,因为只有在前一个条件不成立的情况下,才有可能继续判断下一个条件是否成立,所以,上例中的条件部分也可以进一步简化,改成如下形式: If score 60 Then Print “不及格“ ElseIf score = 70 Then Print “一般“ ElseIf score = 80 Then Print “中等“ ElseIf score = 90 Then Print “良好“ Elseif score = 100 Then Print “优秀“ Else Print “成绩有问题“ End If,【例5.6】设计一个口令检测程序,当用户输入的口令正确时,显示“你已成功进入本系统”,否则,显示“口令错!请重新输入”。如果连续三次输入了口令仍不正确,则提示“你无权使用本系统”。 分析:假设使用一个文本框Text1来接收口令,运行时用户输入完口令并按回车键后系统才对输入的口令进行检查,因此本例使用了Text1的KeyUp事件。当焦点位于文本框内,按下键盘上任一键后会产生KeyUp事件,同时返回按键代码KeyCode。回车键的代码为13,所以程序首先判断用户是否在Text1中按下了回车键,若KeyCode13,表示口令输入完。,说明:在程序中是使用了一个静态变量I,用于统计输入错误口令的次数。静态变量I只在第一次判断口令时被初始化为0,以后每次执行该过程时,如果口令错误,则I的值累加1,因此,当I的值为3时,表示用户已经连续三次输入了错误口令。,程序代码如下: Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) Static I As Integer If KeyCode = 13 Then If UCase(Text1.Text) = “abcd“ Then Label2.Caption = “你已成功进入本系统“ ElseIf I 3 Then I = I + 1 Label2.Caption = “口令错!请重新输入“ Text1.SetFocus Else MsgBox “你无权使用本系统“ End If End If End Sub,返回,5.4 Select Case语句,Select Case的结构形式为: Select Case Case Case Case Case Else End Select,格式说明: (1)“测试表达式”可以是数值表达式或字符串表达式。 (2)“表达式列表”与“测试表达式”的类型必需相同。 (3)“表达式列表”由下表形式的表达式组成。 (4)当使用多个表达式组成列表时,表达式与表达式之间要用英文逗号“,”隔开。,Select Case语句功能:根据“测试表达式”的值,选择第一个符合条件的语句块执行。 Select Case语句的执行过程是:先求“测试表达式”的值,然后顺序测试该值符合哪一个Case子句中情况,如果找到了,则执行该Case子句下面的语句块,然后执行End Select后面的语句;如果没找到,则执行Case Else后面的语句块,然后执行End Select后面的语句。,【例5.7】用Select Case语句代替ElseIf语句来实现成绩的鉴定。保持界面不变,双击“鉴定”按钮,修改代码如下:,Private Sub Command1_Click() 单击“鉴定”按钮 Dim x! 单击“鉴定”按钮 x = Text1.Text Select Case x Case Is = 90 Text2.Text = “优秀“ Case Is = 80 在x90不成立时,再判断x80是否成立 Text2.Text = “良好“ Case Is = 70 Text2.Text = “中“ Case Is = 60 Text2.Text = “及格“ Case Else Text2.Text = “不及格“ End Select End Sub,【例5.8】某交易中介公司按交易双方成交额收取中介费用,收费标准如下: 交易额=10000 5% 5000=交易额10000 3% 1000=交易额5000 2% 500=交易额1000 1% 交易额500 免费 假设交易额通过文本框Text1输入,则“计算费用”按钮Command1的事件代码如下:,Private Sub Command1_Click() Trade=Val(Text1.Text) Select Case Trade Case Is500 Discount=0,Case Is1000 Discount=0.01 Case Is5000 Discount=0.02 Case Is10000 Discount=0.03 Case Else Discount=0.05 End Select Fee = Trade * Discount Print Fee End Sub,在解决多分支选择情况的程序时,采用Select Case语句比较方便,并且程序结构清楚,便于阅读和修改。,IIf 函数,VB中还提供了一个选择函数IIf 函数,用来实现简单的选择结构。其功能是根据表达式的值,来返回两部分中的一个。其语法格式为: IIf(, , ),例如,求分段函数:,y=,函数值的语句可以简单地表示为: y=Iif(x0,2*x+3,4-3*x),返回,5.5 应用举例,【例5.9】:猜数游戏。由计算机任意设置一个1100之间的整数,然后让用户猜出这个数是多少。 说明: 为了引导用户猜中由计算机设置的随机数,可以在猜数的过程中给以适当的提示。即在每次猜完之后,计算机显示相应的提示信息,用户可以根据这些信息继续猜,逐步接近要猜的数,直至猜中。当用户猜的数与目标数之间相差不超过2时,提示“接近了”;相差不超过10时,提示“有些远”;相差超过10时,提示“太远了”。,Private Sub Form_Load() Cls Randomize number = Int(Rnd * 100) + 1 MsgBox “计算机设置了一个1100之间的整数,“ & vbCrLf & _ “请您猜出这个数是多少。“ & vbCrLf & _ “如果输入-1,则停止猜数,并输出要猜的数。“ End Sub Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer) Dim guess, diff, k As Integer If KeyCode = 13 Then guess = Val(Text1.Text) If guess = -1 Then MsgBox “要猜的数是“ & number: Exit Sub diff = Abs(number - guess),If diff = 0 Then k = 0 ElseIf diff = 2 Then k = 1 ElseIf diff = 10 Then k = 2 Else k = 3 End If Select Case k Case 0 MsgBox “恭喜你,猜对了!“ Case 1 MsgBox “接近了,再努力!“ Case 2 MsgBox “有些远,再努力!“ Case 3 MsgBox “太远了,继续努力!“ End Select End If End Sub,【例5.10】:编程计算某年某月某日是星期几。 分析: 该程序大致可分为三部分: (1)输入部分:输入年、月、日,可通过InputBox函数来实现。 (2)计算部分:用来完成对输入的日期是星期几的计算,因此它是本题的关键。在这一部分应解决以下几个问题: 判断平年、闰年。 凡是能被4 整除但不能被100整除的年份为闰年,如1980年。 凡是能被400整除的年份为闰年,如2000年。 除以上两种情况以外的其余年份都是平年。 计算总天数。 总天数的计算公式为:总天数=平年累积值+闰年累积值+月累积值+日期 计算星期几。查阅有关资料可知,1899年12月31日是星期日,因此可把week的值定为1;week的初值加上总天数并对7取模,所得的余数即为星期几。 (3)输出部分:把计算结果以适当的格式输出。,程序如下 : Private Sub Form_Click() 输入部分 Dim Y, M, D, Month2, day0, day1, daysum, week As Integer Y = InputBox(“请输入当前日期“ & “先输入年份(1901-2100)“) M = InputBox(“请输入月份(112):“) D = InputBox(“ 请输入日(131):“) 计算部分 If (Y Mod 100 0) And (Y Mod 4 = 0) Or (Y Mod 100 = 0) And (Y Mod 400 = 0) Then Month2 = 29 Else Month2 = 28 End If,Select Case M Case 1 day0 = 31 day1 = 0 Case 2 day0 = Month2 day1 = 31 Case 3 day0 = 31 day1 = Month2 + 31 Case 4 day0 = 30 day1 = Month2 + 62 Case 5 day0 = 31 day1 = Month2 + 92 Case 6 day0 = 30 day1 = Month2 + 123,Case 7 day0

温馨提示

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

评论

0/150

提交评论