第4章选择结构在程序设计中经常遇到这类问题,它需要根据不同的情况采用不同的处理方法。例如,一元二次方程的求根问题,要根据判别式小于零或大于等于零的情况,采用不同的数学表达式进行计算。对于这类问题,如果用顺序结构编程,显然力不从心。必须借助选择结构。本章主要介绍实现选择结构的语句。包括:行If语句、块If语句、ElseIf语句、SelectCase语句,以及选择结构在程序设计中的应用。退出4.1块If4.2ElseIf语句4.3行If语句4.4SelectCase语句4.1块If4.1.1块If的格式、功能格式:If条件then语句块1[Else语句块2]EndIf说明:(1)“条件”一般为关系表达式或逻辑表达式。通常把关系表达式或逻辑表达式的值为真时,称为条件满足;值为假时,称为条件不满足。反之亦然。(2)语句块1、语句块2分别是“条件”满足或不满足时,处理方法的描述,可以是若干个语句。(3)If…Then、Else、EndIf是VB的保留字。功能:(1)块If首先判断“条件”,其值为真时,执行语句块1;为假时执行语句块2。当缺省[Else…]中的内容时,该选择结构只对条件满足的情况进行处理。执行过程如图4-1所示。【例4.1】火车站行李费的收费标准是50kg以内(包括50kg)0.20/kg,超过部分0.50/kg。编写程序,要求根据输入的任意重量,计算出应付的行李费。根据题意计算公式如下:Pay=weight×0.2weight≤50(weight-50)×0.5+50×0.2weight>50程序代码如下:'计算按钮代码PrivateSubCommand1_Click()Dimweightassingle,payassingleweight=Text1.TextIfweight50Thenpay=(weight-50)*0.5+50*0.2Elsepay=weight*0.2EndIfText2.Text=payEndSubPrivateSubCommand2_Click()Text1.Text=Text2.Text=EndSubPrivateSubCommand3_Click()EndEndSub4.1.2块If的嵌套所谓块If语句的嵌套,就是在语句块1或语句块2中又包含块If语句。【例4.2】任意输入3个数,按照从大到小的顺序输出。算法分析:排序的基本方法,就是比较大小,然后根据比较的结果分别加以处理。本例把3个数分别放在A,B,C中,处理过程为:若AB为真,交换A,B的值;否则不做处理。这样就保证了A≥B;然后再用C去比较。具体流程如图4-3所示。按如图4-4所示设置界面。程序代码如下:'排序按钮代码PrivateSubCommand1_Click()DimaAsSingle,cAsSingle,bAsSinglea=Text1.Textb=Text2.Textc=Text3.Text'三个文本框的数据赋值给变量IfabThent=aa=bb=t'ab时交换a、b的值EndIf'保证ABIfcaThen'用C去比较Text4.Text=c'CA成立,C最大Text5.Text=aText6.Text=bElseIfcbThenText4.Text=a'CB成立,C最小Text5.Text=bText6.Text=cElseText4.Text=a'C处于中间Text5.Text=cText6.Text=bEndIfEndIfEndSub'退出按钮代码PrivateSubCommand2_Click()EndEndSub4.2ElseIf语句格式:If条件1then语句块1ElseIf条件2then语句块2……[Else语句块n+1]EndIf功能:(1)依次判断条件,如果找到一个满足的条件,则执行其下面的语句块,然后跳过EndIf,执行后面的程序。(2)如果所列出的条件都不满足,则执行Else语句后面的语句块;如果所列出的条件都不满足,又没有Else子句,则直接跳过EndIf,不执行任何语句块。ElseIf结构的执行过程如图4-6所示。【例4.4】输入一个学生的一门课分数x(百分制),当x≥90时,输出“优秀”;当80≤x<90时,输出“良好”;当70≤x<80时,输出“中”;当60≤x<70时,输出“及格”,当x<60时,输出“不及格”。算法分析:本例适合用多路分支结构来解决。运行界面如图4-7所示。程序代码如下:'鉴定按钮代码PrivateSubCommand1_Click()Dimscore!score=Text1.TextIfscore=90ThenText2.Text=优秀ElseIfscore=80ThenText2.Text=良好ElseIfscore=70ThenText2.Text=中ElseIfscore=60ThenText2.Text=及格ElseText2.Text=不及格EndIfEndSub'“退出”按钮代码PrivateSubCommand2_Click()EndEndSubElseIf语句,实际完成的是块If的嵌套,它和块If嵌套的格式上有很大区别,ElseIf结构只有一对If和EndIf语句。另外应注意:【ElseIf】和【ElseIf】的区别。4.3行If语句格式:If条件then语句1[Else语句2]功能:当条件满足时,执行语句1;条件不满足时,执行语句2。从行If的格式和功能不难看出,行If语句是一种简单的分支结构,只是把一个简单的块If结构写在一行中,减少了语句行,省略了“EndIf”的书写。行If完全可以用块If代替。【例4.6】任意输入3个数,找出其中的最大值。程序代码如下:PrivateSubCommand1_Click()DimaAsSingle,bAsSingle,cAsSingle,maxAsSinglea=Text1.Textb=Text2.Textc=Text3.Textmax=aIfbmaxThenmax=bIfcmaxThenmax=cText4.Text=maxEndSub4.4SelectCase语句当对一个表达式的不同取值情况作不同处理时,用ElseIf语句程序结构显得较为杂乱,而用SelectCase语句将使程序的结构更清晰,SelectCase语句又称为情况语句。格式:SelectCase测试表达式Case表达式列表1语句块1Case表达式列表2语句块2…Case表达式列表n语句块n[CaseElse语句块n+1]EndSelect功能:根据“测试表达式”的值,选择第一个符合条件的语句块执行。SelectCase语句的执行过程是:先求“测试表达式”的值,然后顺序测试该值符合哪一个Case子句中情况,如果找到了,则执行该Case子句下面的语句块,然后执行EndSelect下面的语句;如果没找到,则执行CaseElse下面的语句块,然后执行EndSelect下面的语句。说明:“测试表达式”可以是数值型或字符串型表达式;“表达式列表”形式有以下3种:(1)一个表达式或用逗号隔开的若干表达式(2)表达式1To表达式2(3)Is关系运算符表达式【例4.7】把例4.3中“鉴定”按钮的代码用SelectCase语句改写。PrivateSubCommand1_Click()Dimscore!score=Text1.TextSelectCasescoreCaseIs=90Text2.Text=优秀CaseIs=80Text2.Text=良好CaseIs=70Text2.Text=中CaseIs=60Text2.Text=及格CaseElseText2.Text=不及格EndSelectEndSub