《第4章 选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章 选择结构程序设计.ppt(58页珍藏版)》请在优知文库上搜索。
1、1第四章 选择结构程序设计在日常生活和工作中,经常要根据不同的情况,选择不同的处理方法。同样,在程序设计过程中,也常常要根据不同的条件,采用不同的操作。例如:要判断一元二次方程ax2+bx+c=0有无实根,应根据一元二次方程满足实根的条件,如果a0 且a2-4ac0,则方程有实根,否则没有实根。选择结构的特点是:根据给定的条件,如果条件为真,则执行某条语句,否则执行另外的语句或不做任何操作。Visual Basic 提供了多种不同形式的条件语句和相应的选择性控件。2本章主要内容:1.条件表达式:关系表达式和逻辑表达式 2.条件语句:If Then 语句;If Then Else 语 句;Iif
2、 函数 3.多分支语句 If Then Else 语句和Select Case 语句 4.选择结构的嵌套 5.选择性控件:单选按钮和复选框 6.计时器控件 3在选择结构程序设计语句中,作为选择判断依据的表达式称为“条件表达式”。条件表达式的结果只能是“TRUE”或“FALSE”。它可以分为两类:关系表达式和逻辑表达式。4.1 条件表达式44.1.1 关系运算符与关系表达式(1)关系运算符 关系运算符也称为比较运算符,用来比较两个操作数的大小。其运算结果是一个逻辑值,即真(True)或假(False)。Visual Basic提供的关系运算符见表4-15说明:1、关系运算的两个操作数一般是相同或
3、相容类型的,常对两个数值、两个字符串、两个日期型数据进行比较。、如果两个操作数是数值型,则按其大小比较。例如:8=9 结果为False 87 结果为False8=8 结果为True13、如果两个操作数是字符型,则按字符的ASCII码值从左到右逐一比较、即首先比较两个字符串的第1个字符,其ASCII码值大的字符串大,如第1个字符相同,则比较第2个字符,以此类推,最先出现不一样的字符的关系决定字符串的关系,如所有字符相同,则两个字符串相等。例如:“ABCD”ABDC”结果为False abcd abc 结果为True汉字字符的ASCII码值大于西文字符。例如:”“”0”结果为False”a”我们”
4、结果为False6 4、如果两个操作数是日期型,则将日期型数据视为形如“yyyymmdd”的8位整数,按数值大小比较。例如:#2006-12-2#2006-12-1#结果为True(2)关系表达式:由操作数和关系运算符组成的表达式称为关系表达式。关系表达式的运算结果是一个逻辑值,即真(True)或假(False)。格式为:在关系表达式中,如果出现函数和算术运算表达式,先计算函数和算术运算表达式,然后再计算关系运算。例如:16 Mod 65 先计算16 Mod 6,结果是4,再计算 45,结果为False Mid(“Visual Basic 程序设计”,8,5)”basic”先计算Mid(“Vi
5、sual Basic 程序设计”,8,5),结果为”Basic”,再计算”Basic”basic”结果为True 5=5=5 先计算5=5,结果为True,再计算True=5,结果是False7 4.1.2 逻辑运算符与逻辑表达式(1)逻辑运算符逻辑运算符一般用于对两个逻辑型数据进行运算,其结果仍为逻辑型数据(True或False)。逻辑运算符除Not是单目运算符外,其余都是双目运算符。Visual Basic提供的逻辑运算符见表4-25。(按运算优先级从高到低排列)8表43列出了6种逻辑运算的全部可能值,称为“真值表”。表 43 逻辑运算真值表ABNot A非And与Or或Xor异或Eqv相
6、等Imp蕴含TTFTTFTTTFFFTTFFFTTFTTFTFFTFFFTT9 逻辑表达式用逻辑运算符连接起来的表达式称为逻辑表达式,逻辑表达式也称为布尔表达式。例如:一元二次方程有实根的条件:a0 且a2-4ac0 写成逻辑表达式为:a0 and a2-4*a*c=0 数学上判断x是否在区间a,b时,习惯上写成axb,但在VB中不能写成:a =x =b应写成VB逻辑表达式:a =x And x 2 Or Not 8 0 And(9-8)/2 0的值首先进行函数运算:sqr(4)值,结果为2其次算术运算:(9-8)/2=0.5第三进行关系运算:22 结果为False80 结果为True0.50
7、结果为False最后进行逻辑运算:False or not True and False按照逻辑运算符的优先级,先计算Not 运算,再计算and运算,最后计算or运算,结果为 False 114.2 条件语句条件语句是形成选择结构最基本的语句之一,其形式有三种:IfThen 语句 IfThenElse 语句 IIF函数124.2.1 IfThen 语句、格式:IfThen 语句属于单分支结构语句,书写格式有两种:单行结构和块结构。“单行结构”格式:If 条件表达式 Then 语句组 “块结构”格式:If 条件表达式 Then 语句组 End If其中:条件表达式:一般为关系表达式和逻辑表达式。
8、也可为算术表达式,表达式值为非0时,按True进行判断,表达式值为0时,按False进行判断语句组:在行结构中,一般为一条语句,如果是多条语句,必须用“:”分开,且在一行上书写。注意:注意:在“块结构”格式中,If和End If必须成对出现。13、语句功能:当条件表达式的值为True时,执行Then后面的语句,否则执行该语句的下一条语句。其流程图为4.1:语句组 A B 条件 不成立 成立 14例如:If x0 Then x=x+1或:If x0 Then X=x+1End If 表示如果x0,则将x的值增加1,否则执行该语句的下一条语句。例如:已知两个数x和y,比较它们的大小,使得x大于y。
9、语句为:If xy Then t=x:x=y:y=t (注意:多条语句必须用“:”分开,且必须书写在一行上)或:If x Y Then Max=X Else Max=Y或:If X Y Then Max=X Else Max=Y 194.2.3 IIF函数 IIF函数是一种条件函数,可以代替IF语句。格式:IIf(条件,True-部分,False-部分)功能:根据条件判断,选择True-部分或False-部分的值:当条件为True时,计算并返回True-部分的值;当条件为False时,计算并返回False-部分的值。说明:条件一般为关系表达式和逻辑表达式。也可为算术表达式,表达式值为非0时,按
10、True进行判断,表达式值为0时,按False进行判断 IIf 函数的引用将产生一个返回值,其值与True-部分和False-部分的类型一致。True-部分和False-部分为表达式、变量或函数。20例如,求x,y中大的数,赋值给Max变量,语句如下:Max=Iif(xy,x,y)判断一个整数是奇数还是偶数,语句如下:Print Iif(x mod 2=0,”偶数”,”奇数”)214.3 多分支语句双分支结构只能根据条件的True和False决定处理两个分支中的其中一个。当实际处理的问题有多种条件(超过两种)时,就要用到多分支语句。多分支语句有两种:IfThenElseIf 语句 和 Sele
11、ct Case语句224.3.1 IfThenElseIf 语句(1)格式 IF 条件1 Then 语句块1 ElseIf 条件2 Then 语句块2 ElseIf 条件n Then 语句块n Else 语句块n+1 End If23(2)说明 语句块1到语句块n+1中只有一个被执行,无论哪个被执行后,流程都会到End If后下一条语句去。ElseIF不能写成Else If。当多分支中有多个条件同时满足,则只执行第一个与之匹配的语句块。因此,要注意对多分支的条件的书写次序,防止某些值被过滤。If 和 End If 必须成对出现。(3)功能依次测试条件1到条件n,当条件i成立时(i为1到n之间的
12、整数),执行语句块i,然后执行End If后面的下一条语句;如果所有的条件都不成立,并且 Else 语句块n+1 存在,则执行语句块n+124其流程见图:25【例4.4】输入某位学生的百分制成绩,要求输出成绩的等级:假设90分以上为A等,80-89分为B等,70-79分为C等,60-69为D等,60分以下为E等。Private Sub Form_Click()Dim Score As IntegerScore=InputBox(请输入学生的百分制分数)If Score=90 Then MsgBox 学生的成绩为A等 ElseIf Score=80 Then MsgBox 学生的成绩为B等 El
13、seIf Score=70 Then MsgBox 学生的成绩为C等 ElseIf Score=60 Then MsgBox 学生的成绩为D等 Else MsgBox 学生的成绩为E等End IfEnd Sub264.3.2 Select Case语句Select Case语句(又称为情况语句)。Select Case语句是根据一个表达式的值,判断它的所属范围,选择执行不同的语句块,是多分支选择的另一种语句实现方法。可以取代IfThenElseIf 语句。(1)格式 Select Case 测试表达式 Case 表达式列表1 语句块1 Case 表达式列表2 语句块2 Case 表达式列表n
14、语句块n Case Else 语句块n+1 End Select27 (2)功能 根据测试表达式的值,依次与表达式列表1到表达式列表n所描述的“域值”范围进行比较,如果与表达式列表i的“域值”范围相匹配,则选择执行语句块i(i为1到n之间的整数),然后到End Case后下一条语句去。如果与所有表达式列表的“域值”范围都不匹配,并且 Else 语句块n+1 存在,则执行语句块n+1,然后到End Case后下一条语句去。28其流程见图:29(3)说明 表达式列表i是由逗号分隔开的下列3种成分组成:表达式;表达式1 To 表达式2;Is关系表达式 表达式列表1到表达式列表n的值与测试表达式的值的
15、类型必须相同。如果测试表达式的值与多个表达式列表i中的“域值”范围相匹配,则选择执行相匹配的 第一个Case表达式列表i后面的语句块 语句块1到语句块n+1中只有一个被执行,无论哪个被执行后,流程都会到End Case后下一条语句去。Select Case和End Case必须成对出现。30【例】某商店进行购物打折优惠活动促销,根据每位顾客一次性购物的消费额给予不同的折扣,具体方法如下:(1)购物1500元以上的九五折优惠,(2)购物2000元以上的九折优惠,(3)购物2500元以上的八五折优惠,(4)购物4000元以上的八折优惠。程序代码如下:Private Sub Command1_Cli
16、ck()Dim x As Single,y As Single x=InputBox(请输入购物金额:)Select Case x Case Is 1000 Print 不优惠 31 y=x Case Is 2000 Print 九五折优惠 y=0.95*x Case Is 3000 Print 九折优惠 y=0.9*x Case Is=5000 Print 八折优惠 y=0.8*xEnd Select Print 优惠后应收款额为:;y End Sub32也可以用IfThenElseIf 语句实现:Private Sub Form_Click()Dim x As Single,y As Single x=InputBox(请输入购物金额:)If x 0 Then Print 输入的的金额有误 ElseIf x 1500 Then Print 不优惠 y=x ElseIf x 2000 Then Print 九五折优惠 y=0.95*x ElseIf x 2500 Then Print 九折优惠 y=0.9*x ElseIf x 0 Then y=1 Else If x0 Then y