第五章选择结构本章内容及要求:1.掌握If条件语句2.SelectCase选择语句3.选择嵌套结构本章重点:学习掌握If条件语句和SelectCase语句的格式及其使用。本章难点:选择嵌套结构5.1if结构条件语句选择结构:当设定条件成立时执行某些语句,条件不成立时则跳过这些语句或执行其它的语句。选择结构中要使用选择语句,在VB中提供了两种语句:If语句和SelectCase语句5.1.1If。。。then语句(单分之结构)格式1:If表达式Then语句块Endif其中,表达式是一个条件表达式或逻辑表达式格式2:If表达式Then语句说明:①表达式都是逻辑表达式,数值表达式和关系表达式被视为逻辑表达式的特例。当表达式为数值表达式时,VB将这个值解释为True或False:一个为零的数值为False,而任何非零数值都被看作True。②语句块可以是一条或多条语句。如果使用格式1的简单形式表示,则只能是一条语句;或用冒号隔开的多条语句,但这些语句必须书写在一行上。③可以使用单行或多行语法有条件地执行一个语句。下面两个例子是等价的:IfanyDateNowThenanyDate=Now和IfanyDateNowThenanyDate=NowEndIf④If...Then的单行格式不用EndIf语句。例如,IfData=90ThenPrint“优秀”例5-1输入一个数,如果是3的倍数则通过消息框TF语句(块)表达式单分支结构输出。PrivateSubForm_Click()DimDataAsIntegerData=InputBox(请输入一个值:)IfDataMod3=0ThenMsgBoxDataEndSub5.1.2if……then……else语句结构(双分支结构)语法格式1:If表达式Then语句块1Else语句块2EndIf语法格式2:If表达式Then语句1Else语句2功能:当表达式的值为非0(True)时,执行Then后面的语句块1,否则执行Else后面的语句块2。例如:DimDataAsIntegerData=InputBox(“请输入成绩:)IfData=90ThenPrint“优秀”ElsePrint“合格”Print计算完毕上例的If语句可以改写为:IfData=90ThenPrint“优秀”ElsePrint“合格”EndIf例5-2输入x,计算y02101xxxxyPrivateSubCommand1_Click()x=Val(Text1.Text)Ifx=0Theny=1+xElsey=1-xText2.Text=yEndSub例5-3设计一个接受口令的窗体。PrivateSubCommand1_Click()IfText1.Text=1234567ThenForm2.ShowElseText1.Text=你不是合法用户,再见!EndIfEndSubPrivateSubForm_Click()Form3.ShowEndSubPrivateSubImage1_Click()EndEndSub条件函数:IIf函数形式是:IIf(表达式,当表达式为True时的值,当表达式为False时的值)iif函数等价于双分支结构语句。例如,求x,y中大的数,放入Tmax变量中,语句如下:Tmax=IIf(xy,x,y)等价于:IfxyThenTmax=xelseTmax=y例5-4算术练习程序Dima,b,cAsIntegerPrivateSubCommand1_Click()c=Val(Text1.Text)Ifc=a+bThenMsgBox正确,请做下一题,vbOKCancel+vbInformation,提示信息a=Int(10*Rnd):b=Int(10*Rnd)Label1.Caption=Str(a)+++Str(b)+=ElseMsgBox不正确,请再做一次,vbOKCancel+vbInformation,提示信息Text1.Text=Text1.SetFocusEndIfEndSubPrivateSubCommand2_Click()EndEndSubPrivateSubForm_Load()Randomizea=Int(10*Rnd):b=Int(10*Rnd)Label1.Caption=Str(a)+++Str(b)+=Text1.Text='Text1.SetFocusEndSub5.1.3If…then…elseif多分之结构语法格式:If表达式1Then语句块1ElseIf表达式2Then语句块2…[Else语句块n+1]EndIf说明:不管有几个分支,依次判断,当某条件满足,执行相应的语句块,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。ElseIf不能写成ElseIf。说明:①不管有几个分支,程序执行了一个分支后,其余分支不再执行。②ElseIf子句的数量没有限制,可以根据需要使用任意多个ElseIf子句。③语句中的ElseIf子句和Else子句都是可选项,如果省略这些子句,则成为单分支结构。④If...Then...ElseIf只是If...Then...Else的一个特例。注意,可以使用任意数量的ElseIf子句,或者一个也不用。可以有一个Else子句,而不管有没有ElseIf子句。例5-4输入学生成绩,给出评定等级。PrivateSubCommand1_Click()DimmarkAsIntegermark=Val(Text1.Text)Ifmark=90ThenText2.Text=优ElseIfmark=80ThenText2.Text=良ElseIfmark=70ThenText2.Text=中ElseIfmark=60ThenText2.Text=及格ElseText2.Text=不及格EndIfEndSub例5-6输入字符,输出其为大写、小写或其它字符等。PrivateSubForm_Click()DimcharAsStringchar=InputBox(请输入一个字符,字符判定)Ifchar=0Andchar=9ThenMsgBox这是一个数字ElseIfchar=AAndchar=ZThenMsgBox这是一个大写字母ElseIfchar=aAndchar=aThenMsgBox这是一个小写字母ElseMsgBox这是一个其它字符EndIfEndSub5.2多分支结构程序设计SelectCase选择语句语法格式:SelectCase测试表达式Case表达式1语句1Case表达式2语句2………[CaseElse语句n+1]EndSelect功能:根据测试表达式的值,决定程序的流向。说明:(1)测试表达式值的类型是数值型、字符串型、日期型等,一旦与某个Case后的表达式值相等,则执行这个Case中的语句,完成后执行EndSelect后的语句。方法一Ifmark=90ThenPrint优ElseIfmark=80ThenPrint良ElseIfmark=70ThenPrint中ElseIfmark=60ThenPrint及格ElsePrint不及格EndIf方法二Ifmark60ThenPrint不及格ElseIfmark70ThenPrint及格ElseIfmark80ThenPrint中ElseIfmark90ThenPrint良ElsePrint优EndIf方法三Ifmark=60ThenPrint及格ElseIfmark=70ThenPrint中ElseIfmark=80ThenPrint良ElseIfmark=90ThenPrint优ElsePrint不及格EndIf(2)如果所有的Case后的表达式都不与测试表达式项匹配,则执行CaseElse后的语句。(3)表达式表与测试变量或表达式的类型必须相同,每一个表达式表是一个或几个值的列表。如果在一个列表中有多个值,就用逗号把值隔开。表达式表有四种形式:•一个表达式。如:Case6•一组用逗号隔开的枚举值。如:Case1,3,5,7•表达式1TO表达式2。如:Case1To10•Is关系运算符表达式。如:CaseIs=80•另外,在一个情况语句中,上述四种形式可以混合使用(4)SelectCase语句在执行时,先求测试表达式的值,然后寻找该值与哪一个Case子句的表达式值相匹配,找到后则执行与该Case语句有关的语句块,之后自动转到EndSelect后的语句执行;如果没有找到与Case子句中的表达式相匹配的值,则执行CaseElse子句有关的语句块,然后转到EndSelect后面的语句执行。(5)当有多个Case子句的取值范围和测试表达式的值域相符时,只执行符合要求的第一个Case子句后的语句块。(6)SelectCase语句只对单个表达式求值,并根据求值结果执行不同的语句块;而If…Then…Else语句可以对不同的表达式求值,然后执行不同的操作。这是两者的主要区别。例5-7促销打折。xxxxxxxxxxy10010030095.03005009.0500100085.010008.0PrivateSubCommand1_Click()Dimx,yAsSinglex=Val(Text1.Text)SelectCasexCaseIs=1000y=0.8*xCaseIs=500y=0.85*xCaseIs=300y=0.9*xCaseIs=100y=0.95*xCaseElsey=xEndSelectText2.Text=yEndSub例题:测试输入的字符Char=InputBox(请输入一个字符,测试)SelectCaseCharCase0To9MsgBox字符是数字,,测试CaseaTozMsgBox字符是小写字母,,测试CaseAToZMsgBox字符是大写字母,,测试CaseElseMsgBox字符是其它符号,,测试EndSelect5.3选择结构的嵌套上面学习了选择结构语句的基本形式,可以通过这些基本形式加以复合,获得更为复杂的选择结构,称为选择结构语句的嵌套。可根据实际情况选择采用何种结构。例如:例5-8输入一个年份,判断是否是润年。PrivateSubCommand1_Click()Dimyear,xAsIntegeryear=Val(Text1.Text)IfyearMod400=0ThenText2.Text=Str(year)&年&是润年ElseIfyearMod4=0AndyearMod1000ThenText2.Text=Str(year)&年&是润年ElseText2.Text=Str(year)&年&不是润年EndIfEndIfEndSub例题:求一元二次方程ax2+bx+c=0的解。分析:3个文本框、2个标签、1个按钮。一些辅助标签。(1)如果a=0,则不是二次方程,此时如果b=0,则提示重新输入系数;如果b0,则:x=-c/b(2)如果a0,且b2-4ac=0,则有两个相等的实根(3)如果a0,且b2-4ac0,则有两个不等的实根(4)如果a0,且b2-4ac0,则有两个共轭复根思考题:设计一个口令检测程序,界面如下图,当用户输入的口令正确时,显示“恭喜!,您已成功进入本系统”,否则,显示,“口令错!,请重新输入”。如果连续两次输入了错误口令,在第三次输入完口令后则显示一个消息框,提示“对不起,您不能使用本系统”,然后退出整个应用程序。习题五一、选择题1.计算分数函数:xxxxxf2321210100)(下列程序段中正确的是_____________.A)ifx0theny=0ifx1theny=1ifx2then