页数:40页文件大小:391.5 KB来源: VB程序设计ppt课件
本课件讲解选择结构程序设计,依次介绍单行结构条件语句、块结构条件语句、多分支选择语句Select Case的语法与执行流程,说明条件语句的嵌套写法与IIf、Choose两个条件函数,并配有口令检测、一元二次方程求解等应用举例。
第5章 选择结构程序设计
第5章选择结构程序设计▲本章要点:条件语句单行结构条件语句If...Then...Else ...块结构条件语句If...Then...EndIf多分支选择语句Select Case...
End Select特点:根据条件是否成立,决定程序的执行分支5.1 单行结构条件语句
5.1单行结构条件语句1.格式If<条件>Then[<语句组1>] [Else<语句组2>]2.功能如果<条件>成立,则执行<语句组1>否则执行<语句组2>T语句组1条件?
语句组2F
单行条件语句的说明
语句组的写法
(3)<语句组1>、<语句组2>:可以有多条语句,各语句之间用冒号隔开。例:IfN>0
ThenA=A+B:B=B+A ElseA=A-B:B=B-A(4)应作为一条语句书写。如果语句太长需要换行,必须在折行处使用续行符号。(5)无论条件是否成立,都具有共同出口例: If X >= 0 Then X = 1 + X Else X = 5-XY = 1-X Print "Y="; Y若X=2则打印Y=-2若X=-2则打印Y=-6共同出口(6)单行结构条件语句可以嵌套IF ... THEN...IF ... THEN ...ELSE ...ELSE…【例5-1】计算分段函数Y
【例5-1】设界面如下图所示,用文本框输入x的值,单击“计算Y”按钮时,根据以下公式计算y的值。|x|x≤0lnxx>0y=
Private Sub Command1_Click()X = Val( Text1.Text) If X <= 0 Then Y = Abs(X) Else Y = Log(X) Label3.Caption = Y End SubCommand1Text1Label3两段程序的等价性比较
例:比较以下两段程序,是否都能够实现上例的功能。程序段1:X = Val(
Text1.Text)Y = Abs(X) If X > 0 Then Y = Log(X) Label3.Caption = Y程序段2:X = Val( Text1.Text)Y = Log(X) If X <= 0 ThenY = Abs(X) Label3.Caption = Y【例5-2】判断坐标所在象限
【例5-2】平面直角坐标系中,不同的象限内,点的坐标的符号有以下4种情况:第一象限X>0,Y>0第二象限X<0,Y>0第三象限X<0,Y<0第四象限X>0,Y<0任意输入一对坐标值,找出它所在的象限。
Private Sub Command1_Click()X = Val( Text1.Text): Y = Val( Text2.Text) If X = 0 Or Y = 0 Then _ Print "不在任何象限内": Exit SubIfX > 0Then If Y > 0 Then Print "IN A" Else _ Print "IN D" Else If Y > 0 Then Print "IN B" _ Else Print "IN C" End Sub5.2 块结构条件语句
5.2块结构条件语句1.格式If<条件1>Then[<语句组1>][ElseIf<条件2>Then[<语句组2>]]……[ElseIf<条件N>Then[<语句组N>]][Else[<其他语句组>]]
End IfIf<条件1>Then[语句组1] Else[语句组2] End If Else子句 ElseIf子句If语句 End If语句注意:格式书写、嵌套块结构条件语句的功能
:T……TTF条件1语句组1语句组2条件2F条件n语句组nF语句组n+1
【例5-3】华氏温度转换为摄氏温度
【例5-3】输入华氏温度F,利用公式C=5/9*(F-32)转换成摄氏温度C,根据转换结果C的不同值,按以下要求给出相应的提示。
C>40时,打印"HOT"30<C≤40时,打印"WARM"20<C≤30时,打印"ROOM TEMPERATURE"10<C≤20时,打印"COOL"0<C≤10时,打印"COLD"C≤0时,打印"FREEZING"Text2Text1
【例5-3】的代码实现
Private Sub Command1_Click()C = 5 / 9 * (Val( Text1.Text)-32) Text2.Text = Format(C, "0.00")IfC > 40Then Label2.Caption = "HOT" ElseIfC >30Then Label2.Caption = "WARM" ElseIfC >20Then Label2.Caption = "ROOM TEMPERATURE" ElseIfC >10Then Label2.Caption = "COOL" ElseIfC >0Then Label2.Caption = "COLD" Else Label2.Caption = "FREEZING" End If End SubElseIf与If的书写注意
End If语句左对齐,而各语句组向右缩进若干空格,以使程序结构更清楚。(3)严格按格式要求书写,不可随意换行或将两行合并成一行。例如,对于条件结构: If x >= 0 Theny = 1 Elsey = 2 End If以下两种写法都是错误的:写法一:Ifx>=0Theny=1 Elsey=2EndIf写法二:Ifx=1Theny=10 Elsey=20EndIf5.3多分支选择结构
语句思考:块If语句可以解决所有的分支选择问题,包括单条件和组合条件的情况,但是对于有些情况块If显得复杂,且效率不高,有没有更好的实现形式呢?
方案:多分支选择结构,从多个选择分支中,选择一个与条件匹配的分支作为程序的执行路线,用SelectCase语句。
Select Case语句的语法格式
SelectCase语句的语法格式为:SelectCase表达式Case值列表1语句组1……[Case值列表i语句组i]……[CaseElse语句组N]EndSelectSelectCasescoreCase90to100Text2.Text="优秀"Case80to89Text2.Text="良好"Case70to79Text2.Text="中等"Case60to69Text2.Text="及格"CaseElseText2.Text="不及格"EndSelect
Select Case语句的说明
End Select:为多分支结构语句的结束标志。Select Case语句的注意
多分支选择语句的功能
语句组n+1T……TTF匹配表达式表1语句组1语句组2F语句组nF匹配表达式表2匹配表达式表n多分支选择语句的功能流程图:
百分制成绩转五级制示例
例输入百分制成绩score,显示对应的五级制成绩哪些能实现,哪些不能实现?
分段函数与Select Case
Y=ex+e-xx<01.25 x=0lgx x>0X = Val(Text1.Text)Select Case XCase Is < 0Y = Exp(X) + Exp(-X)Case 0Y = 1.25Case Is > 0Y = Log(X) / Log(10)
End Select Print "Y="; YX = Val( Text1.Text) Select Case X Case X < 0Y = Exp(X) + Exp(-X) Case X =0Y = 1.25 Case X > 0Y = Log(X) / Log(10) End Select Print "Y="; Y【例5-4】按以下公式求分段函数y的值。条件语句的嵌套
如果在条件成立或不成立的情况下要继续判断其他条件,则可以使用嵌套的条件语句来实现,也就是在语句组中再使用另一个条件语句。
5.4条件语句的嵌套块结构条件语句的嵌套示例:IfA=1
ThenIfB=0ThenPrint"**0**" ElseIfB=1ThenPrint"**1**"EndIf ElseIfA=2ThenPrint"**2**"EndIf多分支选择语句的嵌套
示例:SelectCaseACase1SelectCaseBCase0Print"**0**"Case1Print"**1**"EndSelectCase2Print"**2**"EndSelect
多分支与块结构的互相嵌套
多分支选择语句与块结构条件语句的互相嵌套示例:SelectCaseACase1IfB=0ThenPrint"**0**"ElseIfB=1ThenPrint"**1**"EndIfCase2Print"**2**"EndSelect
1.IIf函数
格式:IIf(<表达式>, <表达式为True时的值>,<表达式为False时的值>)功能:当<表达式>的值为True时,返回第2个参数的值;当<表达式>的值为False时,返回第3个参数的值。
(类似于具有两个分支的If语句的功能)例:使用IIf函数求两个变量A和B的较大数。MaxAB = IIf(A > B, A, B)例:使用IIf函数求三个变量A、B和C的最大数。
MaxAB = IIf(A > B, A, B)MaxABC = IIf(MaxAB > C, MaxAB, C)5.5条件函数
2.Choose函数
格式:Choose(<数值表达式>,<选项1>,<选项2>,...,<选项n>)功能:当<数值表达式>的值为1时,返回<选项1>的值;当<数值表达式>的值为2时,返回<选项2>的值;……。
如果<数值表达式>的值不是整数,则会先四舍五入为整数。例:将成绩1分、2分、3分、4分和5分转换成相应的等级:不及格(1分,2分)、及格(3分),良(4分),优(5分)。
Grade = Choose(Score, "不及格", "不及格", "及格", "良", "优")
5.5应用举例
【例5-5】设计一个口令检测程序,界面如下图,当用户输入的口令正确时,显示“恭喜!您已成功进入本系统”,否则,显示,“口令错!
请重新输入”。如果连续两次输入了错误口令,在第三次输入完口令后则显示一个消息框,提示“对不起,您不能使用本系统”,然后结束程序的执行。
Text1Label2
【例5-5】口令检测程序代码
Private Sub Text1_KeyUp(KeyCodeAs Integer, _Shift As Integer) Static I As Integer'保存输入错误口令的次数 If KeyCode = 13 Then'如果按下的键为回车键IfUCase( Text1.Text) = "HELLO" Then Label2.Caption = "恭喜!,您已成功进入本系统" Else If I = 0 Or I = 1 ThenI = I + 1 Label2.Caption = "口令错!,请重新输入" Text1.SelStart = 0 Text1.SelLength = Len( Text1.Text) Else MsgBox "对不起,您不能使用本系统":End End If End If End Sub【例5-6】求一元二次方程的解
【例5-6】的代码实现
Private Sub Command1_Click()A = Val( Text1.Text): B = Val( Text2.Text)C = Val(Text3.Text): ClsCurrentX = 600: CurrentY = 1100 If A = 0 Then If B = 0 Then MsgBox "系数为零,请重新输入" Text1.SetFocus Text1.SelStart = 0 Text1.SelLength = Len( Text1.Text) ElseX =-C / B Print "X="; Format(X, "0.000") End If Exit Sub ' End If【例5-6】判别式分支代码
Delta = B ^ 2-4 * A * C
Select Case Delta Case 0 Print "X1=X2="; Format(-B / (2 * A), "0.000") Case Is > 0X1 = (-B + Sqr(Delta)) / (2 * A)X2 = (-B-Sqr(Delta)) / (2 * A) Print "X1="; Format(X1, "0.000")CurrentX = 600: CurrentY = 1300 Print "X2="; Format(X2, "0.000") Case Is < 0A1 =-B / (2 * A)A2 = Sqr(Abs(Delta)) / (2 * A)【例5-6】复数根输出代码
Print "X1="; Format(A1, "0.000"); "+"; _Format(A2, "0.000"); "i"CurrentX = 600CurrentY = 1300Print "X2="; Format(A1, "0.000"); "-"; _Format(A2, "0.000"); "i"
End Select End Sub【例5-7】四则运算自我练习程序
【例5-7】设计一个四则运算的自我练习应用程序,界面如下图所示。Text1Text4Text3Text2Label4Label2
【例5-7】的功能要求
(1)在Text1中输入
加、减、乘、除符号后,在Label2中立即出现相应的运算符号。
Private Sub Text1_Change() Label2.Caption = Trim( Text1.Text) End Sub(2)单击“出题”按钮Command1,生成两个[0,1000]之间的随机整数。 Private Sub Command1_Click()Randomize Text2.Text = Int(Rnd * 1001)Text3.Text = Int(Rnd * 1001)Text4.Text="" End Sub(3)单击“计算”按钮Command2得
出Text4的值。PrivateSubCommand2_Click()IfLabel2.Caption="+"
ThenText4.Text=Val( Text2.Text)+Val(Text3.Text) ElseIf Label2.Caption="-"ThenText4.Text=Val( Text2.Text)-Val(Text3.Text) ElseIf Label2.Caption="*"ThenText4.Text=Val( Text2.Text)*Val(Text3.Text) ElseIf Label2.Caption="/"ThenText4.Text=Val( Text2.Text)/Val(Text3.Text) Else MsgBox"运算类型错,请重输",,"警告" Text1.SetFocus: Text1.SelStart=0 Text1.SelLength=Len( Text1.Text)EndIfEndSub(4) Text4的内容也可以由用户输入
,通过单击“判断”按钮Command3判断输入结果是否正确。
Private Sub Command3_Click() Select Case Label2.Caption Case "+" If Text4.Text=Val(Text3.Text)+Val( Text2.Text) ThenLabel4.Caption = "正确" ElseLabel4.Caption = "错误" End If(4) 判断Text4输入结果
Case "-"If Text4.Text=Val(Text2.Text)-Val(Text3.Text) ThenLabel4.Caption = "正确"ElseLabel4.Caption = "错误"
End If Case "*" If Text4.Text=Val( Text2.Text)*Val(Text3.Text) ThenLabel4.Caption = "正确" ElseLabel4.Caption = "错误" End If(4) 判断Text4输入结果(续)
Case "/"If Text4.Text=Val(Text2.Text)/Val(Text3.Text) ThenLabel4.Caption = "正确"ElseLabel4.Caption = "错误"
End If Case Elsea= MsgBox("运算类型错,请重输", , "警告") Text1.SetFocus Text1.SelStart = 0 Text1.SelLength = Len( Text1.Text) End Select End Sub注:因实数的不精确表示,除法判断条件应写成:Abs(Val(Text4.Text)-Val( Text2.Text) / Val(Text3.Text)) < 0.000001用Choose函数改写运算判断
选择结构常见错误
1.在选择结构中缺少配对的结束语句对多行式的If块语句中,应有配对的
End If语句结束Select应有 End Select作为结束语句。2.多边选择 ElseIf关键字的书写和条件表达式的表示 ElseIf不要写成 Else If;3. Select Case语句的使用 Select Case后不能出现多个变量;Case子句后不能出现变量。本章小结
1.单行结构条件语句If <条件>Then [<语句组1>] [Else <语句组2>]2.块结构条件语句If ……Then……[ElseIf ……Then……]……[Else……]
End If3.多分支选择语句 Select Case …… Case …………[ Case …………]……[ Case Else……] End Select下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}