第7章选择结构程序设计学习重点If语句、IIf函数、Switch函数、SelectCase语句的格式与使用。If语句的嵌套使用。掌握常用的选择结构算法。本章内容7.1If语句7.2SelectCase语句7.3基本算法及应用7.4其他应用举例本章小结引言分支结构TrueFalsePAB7.1If语句7.1.1If…Then…结构7.1.2If…Then…Else…结构7.1.3If…Then…ElseIf…结构7.1.4If语句的嵌套7.1.5与If语句有关的函数注1:条件表达式的值为True或False,一般是逻辑或关系表达式,也可以是算术表达式(转换为逻辑值)7.1.1If…Then…结构两种格式:格式1:块形式If条件表达式Then语句体EndIf格式2:单行形式If条件表达式Then语句体条件表达式语句体TrueFalse注2:当条件为True时执行语句体,否则执行If语句的下一条语句注3:语句体中可以是多条语句,当采用格式2时,所有的语句必须写在一行,用冒号隔开语句体中的语句7.1.1If…Then…结构例:已知有两数x、y,编程使x中存放较大的数分析:如果x=y,则不需要做处理如果xy,则做交换处理实现:IfxyThentemp=xx=yy=tempEndIf用格式2描述:IfxyThentemp=x:x=y:y=temp特别注意:块结构时If和EndIf成对出现7.1.1If…Then…结构例7-1电子闹钟设计,主要利用文本框、按钮、计时器控件实现闹钟功能。例7-1程序代码如下:PrivateSubCommand1_Click()Timer1.Enabled=NotTimer1.Enabled'用Not运算进行开关控制EndSubPrivateSubTimer1_Timer()DimdAsDated=Text1.TextIfHour(Time)=Hour(d)AndMinute(Time)=Minute(d)ThenBeep'到达时间后发声EndSub功能:连续1分钟响铃,60次等价于:IfHour(Time)=Hour(d)AndMinute(Time)=Minute(d)ThenBeepEndIf7.1.2If…Then…Else…结构两种格式:格式1:If条件表达式Then语句体1Else语句体2EndIf格式2:If条件表达式Then语句体1Else语句体2注:当条件为True时执行语句体1,否则执行语句体2T条件表达式语句体1F语句体2例7-2已知x,求程序代码如下:PrivateSubCmdCul_Click()DimxAsSingle,yAsSinglex=Val(txtX.Text)'第1个文本框的名称是txtXIfx0ThenMsgBoxx不能小于0Elsey=Sqr(x)txtY.Text=Str(y)'第2个文本框的名称是txtYEndIfEndSubxy等价于:Ifx0ThenMsgBoxx不能小于0Elsey=Sqr(x):txtY.Text=Str(y)7.1.3If…Then…ElseIf…结构If表达式1Then语句体1ElseIf表达式2Then语句体2……[Else语句体n+1]EndIf表达式1=True执行语句体1False表达式2=True执行语句体2False表达式3=……Else和If间无空格格式:7.1.3If…Then…ElseIf…结构FT表达式1语句体1表达式2语句体2TF……表达式n语句体n……F语句体n+1……T•判断的顺序为表达式1、表达式2……•只有当表达式1为False时才判断表达式2,当表达式1和表达式2都为False时,才判断表达式3,•程序执行语句体n+1的条件为前n个表达式均为False。7.1.3If…Then…ElseIf…结构例:已知变量ch中存放了一个字符,判断该字符是字母字符、数字字符、空格还是其它字符。分析:字母字符:ch=“a”Andch=“z”Orch=“A”Andch=“Z”数字字符:ch=“0”Andch=“9”空格字符:ch=“”实现:Ifch=“a”Andch=“z”Orch=“A”Andch=“Z”ThenPrint“字母字符”ElseIfch=“0”Andch=“9”ThenPrint“数字字符”ElseIfch=“”ThenPrint“空格”ElsePrint“其他字符”EndIf7.1.3If…Then…ElseIf…结构例7-3旅客乘车旅行,可免费携带30公斤行李,超过30公斤的部分每公斤需支付托运费10元,超过50公斤部分则每公斤需支付20元托运费。请编程根据每位旅客行李的重量计算其应付的行李托运费。例7-3此分段函数用程序代码表示如下:PrivateSubCommand1_Click()DimxAsSingle,yAsSinglex=Val(Text1.Text)Ifx30Then'x30y=0ElseIfx=50Then'30=x=50y=(x-30)*10Else'x50y=(x-50)*20+20*10EndIfText2.Text=yEndSub5050303010*2020*)50(10*)30(0xxxxxyx=30Andx=50能否写成?可以,但Else已经包含了x=30的信息7.1.4If语句的嵌套If语句中又包含If语句在Then子句或Else子句的语句体中包含完整的一条If语句如:IfxyThenPrintx&“”&yElseIfxyThenPrintx&“”&yElsePrintx&“=”&yEndIfEndIf一条If语句一条If语句7.1.4If语句的嵌套注1:If语句的完整性,即内层If语句必须完整地出现在外层If语句的Then子句或Else子句中。外层If内层If内层If内外层不能有交叉!7.1.4If语句的嵌套注2:Else-If的匹配原则Else始终与上面距离其最近的未被匹配过的If匹配注3:If-EndIf的匹配If块必须以一个EndIf语句结束If…ThenIf…Then……Else……EndIfElseIf…Then……If……Then……Else……EndIfEndIf7.1.4If语句的嵌套为使程序结构更为清晰,要养成良好的书写习惯。If…ThenIf…Then……Else……EndIfElseIf…Then……If……Then……Else……EndIfEndIf为体现层次,可以使用Tab健排放不同层次的语句①④②③7.1.4If语句的嵌套例7-4根据用户输入年龄和性别,输出不同的欢迎信息。其中小于14岁的男性为boy,大于14岁的男性为guy,其中小于14岁的女性为girl,大于14岁的女性为miss。例7-4程序代码如下:PrivateSubCommand1_Click()IfOp_male.Value=TrueThenIfVal(Txt_age.Text)14Then'小于14岁的男性MsgBoxHello,boy!Else'大于或等于14岁的男性MsgBoxHello,guy!EndIfElseIfVal(Txt_age.Text)14Then'小于14岁的女性MsgBoxHello,girl!Else'大于或等于14岁的女性MsgBoxHello,miss!EndIfEndIfEndSub①②③7.1.5与If语句有关的函数1.IIf函数*2.Switch函数1.IIf函数格式:IIf(条件表达式,条件为True时的表达式,条件为False时的表达式)功能:根据条件表达式的值,确定函数返回后面两个表达式的其中一个的值。IfabThenmax=aElsemax=bEndIfmax=IIf(ab,a,b)1.IIf函数IIf函数实际上是If…Then…Else结构的一个简写IIf函数中后两个表达式可以是各种类型的表达式,也可以是一个IIf函数的调用①Printx&IIf(x0,“大于0”,“小于或小于0”)②s=IIf(x0,1,IIf(x=0,0,-1))’判断x的符号1.IIf函数将If语句改写成使用IIf函数:Ifx30Theny=0ElseIfx=50Theny=(x-30)*10Elsey=(x-50)*20+20*10EndIf等价于:y=IIf(x30,0,IIf(x=50,(x-30)*10,(x-50)*20+20*10))2.Switch函数格式Switch(表达式1,值1[,表达式2,值2…[,表达式n,值n]])功能计算一组条件表达式列表的值,然后返回与条件表达式列表中最先为True的表达式所对应的Variant型数值或表达式。如:lblstatus.Caption=_Switch(grade=90,A,grade=80,B,grade80,C)用于多分支情况条件表达式和值必须成对出现!2.Switch函数将If语句改写成使用Switch函数:Ifx30Theny=0ElseIfx=50Theny=(x-30)*10Elsey=(x-50)*20+20*10EndIf等价于:y=Switch(x30,0,x=50,(x-30)*10,x50,(x-50)*20+20*10)条件条件条件值值值7.2SelectCase语句(多分支语句)格式:SelectCase测试表达式Case表达式列表1语句块1Case表达式列表2语句块2……[CaseElse语句块n+1]EndSelect7.2SelectCase语句T表达式1语句体1表达式2语句体2T……表达式n语句体n……语句体n+1……T执行过程:•①计算测试表达式的值;•②依次比较各个表达式,符合条件则进入相应的语句体执行;•③执行SelectCase语句的下一条语句。计算测试表达式的值7.2SelectCase语句注1:测试表达式可以是数值或字符串表达式;注2:各表达式列表合法的格式:①一个常量或常量表达式②多个常量或常量表达式,用逗号隔开,逗号相当于“或”,如:Case1,3,5,7③表达式1to表达式2,表示从表达式1到表达式2中所有的值,其中表达式1的值必须小于表达式2的值。如:Case1to5④Is关系运算表达式,可以使用的关系运算符为:、=、、=、、=,不可以使用逻辑运算符表示多个范围。⑤前面四种情况的组合,如CaseIs10,2,4,6,Is0注3:若有多个Case表达式符合条件,则只执行第一个符合的Case下的语句体。7.2SelectCase语句例:已知变量ch中存放了一个字符,判断该字符是字母字符、数字字符、空格还是其它字符。(用SelectCase语句改写)分析:将各种字符的判断条件改写成符合要求的Case条件字母字符:ch=“a”Andch=“z”Orch=“A”Andch=“Z”“a”To“z”,“A”to“Z”数字字符:ch=“0”Andch=“9”“0”To“9”空格字符:ch=“”“”Is=“”实现:SelectCasechCase“a”To“z”,“A”to“Z”Print“字母字符”Case“0”To“9”Print“数字字符”Case“”Print“空格”CaseElsePrint“其他字符”EndSelect7.2SelectCase语句例7-5简单运算器分析:运算符的判断:共四种取值,事先已在ComboBox中SelectCaseCmbop.TextCase+txtresult=Val(txtX)+Val(txtY)Case-txtresult=Val(txtX)-Val(txtY)Case×txtresult=Val(txtX)*Val(txtY)Case÷txtresult=Val(txtX)/Val(txtY)EndSelect除数为0?IfVal(txtY)0Thentxtresult=