《vb选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《vb选择结构程序设计.ppt(37页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 选择结构程序设计本章要点:1块结构条件语句IfThenEndIf的使用2多分支条件语句ElseIf的应用3多分支选择语句SelectCaseEndSelec的应用 选择结构是一种常用的基本结构,其特点是根据所给定的选择条件为真或假,来决定从不同操作中选择执行一种操作。选择结构程序设计 块If条件语句 Select Case 语句 应用举例返回退出 块If语句的嵌套 ElseIf条件语句If语句(语句(If.Then语句)语句)块If语句是用来判断条件成立与否,然后决定下一步怎么执行的一种控制语句,这种选择结构是最常用的双选择结构,即只有两种操作可以选择。如果条件为真,执行其中一个操作;
2、如果条件为假,则执行另外一个操作。块结构if语句语法格式如下:IfThenElseEndIf说明:为必选项,它可以是关系表达式、布尔表达式、数值表达式或字符串表达式,但总的说来它是一个逻辑值的表达式,其返回结果必须是True或False。对于数值表达式,VB将0作为False,非0作为True来处理;对于字符串表达式,VB只允许出现包含数字的字符串,当字符串中的数字值为0时,则认为是False,否则认为是True。和可以是一条语句,也可以是多条语句。单行结构If语句的执行过程是这样的:首先计算的值,如果结果为True,则执行,否则,执行。T(真)F(假)条件满足?语句块1语句块2End If之
3、后的语句选择结构流程图【例】设计界面如图5-2所示,用文本框Text1输入x的值,单击按钮时,在标签Label1中显示出x的绝对值。运行界面“求绝对值”按钮Command1的单击事件过程如下:PrivateSubCommand1_Click()x=Val(Text1.Text)将文本框中的字符内容转换成数值Ifx0ThenLabel1.Caption=xElseLabel1.Caption=-x根据x的正负确定显示结果EndSub使用该语句时,应该注意以下问题:(1)整个块结构必须以If开始,以EndIf结束。(2)块结构If语句中Then后面的语句不能与其写在同一行上,否则,必须加上分隔符。
4、(3)块结构中的是可以省略的。省略后即简化为以下形式:IfThenEndIf这种形式的If语句主要用来判断一些操作是否执行。当条件成立时,根据完成的一定的操作;而当条件不成立时不做任何处理,直接执行下条语句。例如,例5.1也可以采用下列程序段来实现。x=Val(Text1.Text)Ifx0Thenx=-x取负数x的相反数EndIfLabel1.Caption=x(4)在块结构中,If后面显式的给出了判断条件,Else后面虽然没有显式的给出一个条件,但相当于存在一个与If部分相反的隐含条件。返回 在实际应用中,经常会遇到“多分支”选择的程序,即从多种情况中选择执行其中一种情况,这时,就要使用块
5、if语句的嵌套。块结构If语句可以嵌套,即在上述结构中的和部分仍然可以包含另外一个块结构If语句。如果在条件成立或不成立的情况下要继续判断其他条件,则可以在语句块的位置上再使用另外一个块结构条件语句。5.2 块块ifif语句的嵌套语句的嵌套If子句部分的嵌套结构Else子句部分的嵌套结构使用嵌套语句时应注意以下问题:(1)如果存在嵌套时,语句中的每一个Else必须和一个If相对应,应避免产生混乱。在书写时,可以将同一层的If子句和Else子句左对齐,内层的各语句块相对于外层向右缩进若干空格,以使程序结构更加清楚,便于阅读和查错。(2)每一个块结构都必须以If开始,以EndIf结束。(3)内层嵌
6、套的块结构中除了满足该层规定的条件外,还必须首先满足外层结构中相应位置的条件。(4)VB中对块嵌套的层数没有限制,在嵌套的块结构中仍然可以继续嵌套其他的块结构,但嵌套时外层的块结构必须完全“包住”内层的块结构,不能相互“骑跨”。(5)利用块If语句的嵌套可以解决“多分支”选择的问题。【例】建立如图5-3所示的界面,输入任一点的坐标(X,Y),判断该点位于哪个象限。在平面直角坐标系中,点所在的象限有以下4种情况:X0,Y0点位于第一象限内X0,Y0点位于第四象限内X0点位于第二象限内X0,Y0ThenIfy0ThenPrint该点位于第一象限ElsePrint该点位于第四象限EndIfElseI
7、fy0ThenPrint该点位于第二象限ElsePrint该点位于第三象限EndIfEndIfEndSub程序代码如下:程序运行界面【例】编程序求一元二次方程ax2+bx+c=0的根(a不等于零)。分析:根据数学知识,要求一元二次方程的根,必须知道方程的三个系数a、b、c的值,然后根据判别式b2-4ac的值的情况判断方程的根。方程的根有以下三种情况:当b2-4ac0时,方程有两个不相等的实根;当b2-4ac=0时,方程有两个相等的实根;当b2-4ac=0ThenIfdert0Thenr=Sqr(dert)/(2*a)x1=p+rx2=p-rElsex1=px2=pEndIfLabel5.Cap
8、tion=x1=&x1&str&x2=&x2Elser=Sqr(-dert)/(2*a)Label5.Caption=x1=&p&+&r&i&str&x2=&p&-&r&iEndIfEndSub返回5.3 ElseIf语句语句ElseIf子句的格式:If 条件1 then 语句块1ElseIf 条件2 then 语句块2Else 语句块n+1End If对ElseIf子句的格式说明:(1)可以放置任意多个ElseIf子句。(2)关键字ElseIf中间没有空格,不能写成ElseIf。ElseIf子句的功能:依次判断条件,如某一条件成立,则执行其下面的语句块;如果所有条件均不成立,则执行Else后
9、面的语句。在相应语句块执行完后,会跳过EndIf,执行其后面的语句。ElseIf结构执行过程功能说明:(1)不管有几个ElseIf子句,程序执行完一个语句块后,其余ElseIf子句不再执行。(2)当多个ElseIf子句中的条件都成立时,只执行第一个条件成立的子句中的语句块。因此,在使用ElseIf语句时,要特别注意各判断条件的前后次序。【例】输入一个学生的成绩score,根据其所在分数段给出他的考试等级。score60时,打印“不及格”;60=score=70时,打印“一般”;70score=80时,打印“中等”;80score=90时,打印“良好”;90score100时,打印“成绩有问题”
10、。该程序就是一个多分支选择的问题,可以使用ElseIf语句实现。程序代码如下:PrivateSubCommand1_Click()DimscoreAsSinglescore=Val(Text1.Text)Ifscore=60Andscore70Andscore80Andscore90Andscore=100ThenPrint优秀ElsePrint成绩有问题EndIfEndSub因为只有在前一个条件不成立的情况下,才有可能继续判断下一个条件是否成立,所以,上例中的条件部分也可以进一步简化,改成如下形式:Ifscore60ThenPrint不及格ElseIfscore=70ThenPrint一般E
11、lseIfscore=80ThenPrint中等ElseIfscore=90ThenPrint良好Elseifscore=100ThenPrint优秀ElsePrint成绩有问题EndIf【例】设计一个口令检测程序,当用户输入的口令正确时,显示“你已成功进入本系统”,否则,显示“口令错!请重新输入”。如果连续三次输入了口令仍不正确,则提示“你无权使用本系统”。分析:假设使用一个文本框Text1来接收口令,运行时用户输入完口令并按回车键后系统才对输入的口令进行检查,因此本例使用了Text1的KeyUp事件。当焦点位于文本框内,按下键盘上任一键后会产生KeyUp事件,同时返回按键代码KeyCode
12、。回车键的代码为13,所以程序首先判断用户是否在Text1中按下了回车键,若KeyCode13,表示口令输入完。说明:在程序中是使用了一个静态变量I,用于统计输入错误口令的次数。静态变量I只在第一次判断口令时被初始化为0,以后每次执行该过程时,如果口令错误,则I的值累加1,因此,当I的值为3时,表示用户已经连续三次输入了错误口令。程序代码如下:PrivateSubText1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)StaticIAsIntegerIfKeyCode=13ThenIfUCase(Text1.Text)=abcdThenLabel2.Captio
13、n=你已成功进入本系统ElseIfI3ThenI=I+1Label2.Caption=口令错!请重新输入ElseMsgBox你无权使用本系统EndIfEndIfEndSub返回5.4 Select Case语句语句Select Case的结构形式为:Select Case Case Case Case Case ElseEnd Select格式说明:(1)“测试表达式”可以是数值表达式或字符串表达式。(2)“表达式列表”与“测试表达式”的类型必需相同。(3)“表达式列表”由下表形式的表达式组成。(4)当使用多个表达式组成列表时,表达式与表达式之间要用英文逗号“,”隔开。形式示例说明(1)表达式
14、Case100+a数值或字符串表达式(2)一组用逗号分隔的枚举值Case2,4,6,8测试表达式的值等于2,4,6,8之一(3)表达式1To表达式2Case1To101测试表达式10(4)Is关系运算符表达式CaseIs20测试表达式20SelectCase语句功能:根据“测试表达式”的值,选择第一个符合条件的语句块执行。SelectCase语句的执行过程是:先求“测试表达式”的值,然后顺序测试该值符合哪一个Case子句中情况,如果找到了,则执行该Case子句下面的语句块,然后执行EndSelect后面的语句;如果没找到,则执行CaseElse后面的语句块,然后执行EndSelect后面的语句
15、。【例】用SelectCase语句代替ElseIf语句来实现成绩的鉴定。保持界面不变,双击“鉴定”按钮,修改代码如下:Private Sub Command1_Click()单击“鉴定”按钮Dim x!单击“鉴定”按钮 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 SelectEnd Sub【例】某交易中介公司按交易双方成
16、交额收取中介费用,收费标准如下:交易额=100005%5000=交易额100003%1000=交易额50002%500=交易额10001%交易额500免费假设交易额通过文本框Text1输入,则“计算费用”按钮Command1的事件代码如下:PrivateSubCommand1_Click()Trade=Val(Text1.Text)SelectCaseTradeCaseIs500Discount=0CaseIs1000CaseIs5000CaseIs10000CaseElseEndSelectFee=Trade*DiscountPrintFeeEndSub在解决多分支选择情况的程序时,采用Se
17、lectCase语句比较方便,并且程序结构清楚,便于阅读和修改。IIf 函数VB中还提供了一个选择函数IIf 函数,用来实现简单的选择结构。其功能是根据表达式的值,来返回两部分中的一个。其语法格式为:IIf(,)例如,求分段函数:y=函数值的语句可以简单地表示为:y=Iif(x0,2*x+3,4-3*x)返回5.5 应用举例应用举例【例】:猜数游戏。由计算机任意设置一个1100之间的整数,然后让用户猜出这个数是多少。说明:为了引导用户猜中由计算机设置的随机数,可以在猜数的过程中给以适当的提示。即在每次猜完之后,计算机显示相应的提示信息,用户可以根据这些信息继续猜,逐步接近要猜的数,直至猜中。当
18、用户猜的数与目标数之间相差不超过2时,提示“接近了”;相差不超过10时,提示“有些远”;相差超过10时,提示“太远了”。PrivateSubForm_Load()ClsRandomizenumber=Int(Rnd*100)+1MsgBox计算机设置了一个1100之间的整数,&vbCrLf&_请您猜出这个数是多少。&vbCrLf&_如果输入-1,则停止猜数,并输出要猜的数。EndSubPrivateSubText1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)Dimguess,diff,kAsIntegerIfKeyCode=13Thenguess=Val(Te
19、xt1.Text)Ifguess=-1ThenMsgBox要猜的数是&number:ExitSubdiff=Abs(number-guess)Ifdiff=0Thenk=0ElseIfdiff=2Thenk=1ElseIfdiff=10Thenk=2Elsek=3EndIfSelectCasekCase0MsgBox恭喜你,猜对了!Case1MsgBox接近了,再努力!Case2MsgBox有些远,再努力!Case3MsgBox太远了,继续努力!EndSelectEndIfEndSub【例】:编程计算某年某月某日是星期几。分析:该程序大致可分为三部分:(1)输入部分:输入年、月、日,可通过In
20、putBox函数来实现。(2)计算部分:用来完成对输入的日期是星期几的计算,因此它是本题的关键。在这一部分应解决以下几个问题:判断平年、闰年。凡是能被4整除但不能被100整除的年份为闰年,如1980年。凡是能被400整除的年份为闰年,如2000年。除以上两种情况以外的其余年份都是平年。计算总天数。总天数的计算公式为:总天数=平年累积值+闰年累积值+月累积值+日期计算星期几。查阅有关资料可知,1899年12月31日是星期日,因此可把week的值定为1;week的初值加上总天数并对7取模,所得的余数即为星期几。(3)输出部分:把计算结果以适当的格式输出。程序如下:PrivateSubForm_Cl
21、ick()输入部分DimY,M,D,Month2,day0,day1,daysum,weekAsIntegerY=InputBox(请输入当前日期&先输入年份(1901-2100)M=InputBox(请输入月份(112):)D=InputBox(请输入日(131):)计算部分If(YMod1000)And(YMod4=0)Or(YMod100=0)And(YMod400=0)ThenMonth2=29ElseMonth2=28EndIfSelectCaseMCase1day0=31day1=0 Case2day0=Month2day1=31Case3day0=31day1=Month2+31
22、Case4day0=30day1=Month2+62Case5day0=31day1=Month2+92Case6day0=30day1=Month2+123Case7day0=31day1=Month2+153Case8day0=31day1=Month2+184Case9day0=30day1=Month2+215Case10day0=31day1=Month2+245Case11day0=30day1=Month2+276Case12day0=31day1=Month2+306EndSelectIf(D1)Thendaysum=(Y-1901)+(Y-1901)/4+day1+Ddays
23、um=Int(daysum+0.5)ElseMsgBox数据输入错误!EndIfweek=(week+daysum)Mod7输出部分PrintY;“年”;M;“月”;D;“日是”;SelectCaseweekCase0Print-星期日-Case1Print-星期一-Case2Print-星期二-Case3Print-星期三-Case4Print-星期四-Case5Print-星期五-Case6Print-星期六-EndSelectEndSub本章小结本章中主要介绍了一种常用的程序控制结构选择结构以及VB中提供的用来实现选择结构流程控制的语句:块结构条件语句IfThenEndIf多分支选条件语句ElseIf多分支选择语句SelectCaseEndSelect在解决实际问题时,经常使用块结构的选择语句,因为这种语句既可以解决单分支也可以解决多分支的选择问题,并且结构相对较好,灵活性较强。最后,通过一些综合性的例子讲述了各种选择结构的程序的解决方法。需要重点掌握每种语句的语法结构以及使用情况,会适当的运用各种语句解决问题,尤其注意语句的嵌套使用情况,避免产生混乱。
限制150内