首页计算机计算机软件VB程序设计 05 第5章 选择结构程序设计.pptx

05 第5章 选择结构程序设计.pptx

页数:40页文件大小:391.5 KB来源: VB程序设计ppt课件

本课件讲解选择结构程序设计,依次介绍单行结构条件语句、块结构条件语句、多分支选择语句Select Case的语法与执行流程,说明条件语句的嵌套写法与IIf、Choose两个条件函数,并配有口令检测、一元二次方程求解等应用举例。

第5章 选择结构程序设计章节封面,标示本章主题与所讲授的主要内容
5.1 单行结构条件语句讲解页,说明其书写格式与使用要点
单行条件语句的说明讲解页,说明其书写格式与IfX、aaa、ThenPrint的使用要点
查看本课件的文字版(共 40 页,供检索与复制)

第1页:第5章 选择结构程序设计

第5章 选择结构程序设计

第5章选择结构程序设计▲本章要点:条件语句单行结构条件语句If...Then...Else ...块结构条件语句If...Then...EndIf多分支选择语句Select Case...

End Select特点:根据条件是否成立,决定程序的执行分支

第2页:5.1 单行结构条件语句

5.1 单行结构条件语句

5.1单行结构条件语句1.格式If<条件>Then[<语句组1>] [Else<语句组2>]2.功能如果<条件>成立,则执行<语句组1>否则执行<语句组2>T语句组1条件?

语句组2F

第3页:单行条件语句的说明

单行条件语句的说明

  • (1)<条件>可以是:
  • 关系表达式
  • 布尔表达式
  • 数值表达式:0为False;非0为True
  • 字符串表达式:"0"为False;非"0"为True
  • (2)可以没有Else部分,这时必须有<语句组1>。T语句组1条件?F例:IfX<>"aaa"ThenPrint X

第4页:语句组的写法

语句组的写法

(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页:【例5-1】计算分段函数Y

【例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

第6页:两段程序的等价性比较

两段程序的等价性比较

例:比较以下两段程序,是否都能够实现上例的功能。程序段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

第7页:【例5-2】判断坐标所在象限

【例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 Sub

第8页:5.2 块结构条件语句

5.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语句注意:格式书写、嵌套

第9页:块结构条件语句的功能

块结构条件语句的功能

:T……TTF条件1语句组1语句组2条件2F条件n语句组nF语句组n+1

第10页:【例5-3】华氏温度转换为摄氏温度

【例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

第11页:【例5-3】的代码实现

【例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 Sub

第12页:ElseIf与If的书写注意

ElseIf与If的书写注意

  • (1)ElseIf不能写成Else If,即中间不能有空格。
  • (2)在书写时,可以将If语句、ElseIf子句、Else子句、和
End If语句左对齐,而各语句组向右缩进若干空格,以使程序结构更清楚。(3)严格按格式要求书写,不可随意换行或将两行合并成一行。例如,对于条件结构: If x >= 0 Theny = 1 Elsey = 2 End If以下两种写法都是错误的:写法一:Ifx>=0Theny=1 Elsey=2EndIf写法二:Ifx=1Theny=10 Elsey=20EndIf

第13页:5.3多分支选择结构

5.3多分支选择结构

语句思考:块If语句可以解决所有的分支选择问题,包括单条件和组合条件的情况,但是对于有些情况块If显得复杂,且效率不高,有没有更好的实现形式呢?

方案:多分支选择结构,从多个选择分支中,选择一个与条件匹配的分支作为程序的执行路线,用SelectCase语句。

第14页:Select Case语句的语法格式

Select Case语句的语法格式

SelectCase语句的语法格式为:SelectCase表达式Case值列表1语句组1……[Case值列表i语句组i]……[CaseElse语句组N]EndSelectSelectCasescoreCase90to100Text2.Text="优秀"Case80to89Text2.Text="良好"Case70to79Text2.Text="中等"Case60to69Text2.Text="及格"CaseElseText2.Text="不及格"EndSelect

第15页:Select Case语句的说明

Select Case语句的说明

  • 1)表达式:可以是一个数值表达式或字符串表达式,通常使用一个数值类型或字符串类型的变量。
  • 2)Case值列表i:是Case子句,如果表达式与某个Case子句的值列表i相匹配,则执行该Case子句中的语句组iCase子句中的“值列表i”可以有三种表示形式:
  • ①一个或多个常量,多个常量之间用“,”分开。
  • ②使用To关键字,用以指定一个数值范围,要求小的数在To之前,如1To10。
  • ③Is关键字与比较运算符配合使用,用以指定一个数值范围,如Is>20。在每个Case子句的<值列表>中,以上三种形式可以任意组合使用。如:Case3,5,7To9,Is<2。
  • 3)CaseElse:当表达式的值与前面所有的Case子句的值列表都不匹配时的情况下执行语句组N
  • 4)
End Select:为多分支结构语句的结束标志。

第16页:Select Case语句的注意

Select Case语句的注意

  • (1)如果某个值列表i与表达式的值相匹配,就执行该Case子句中的语句组i,之后该SelectCase语句结束。程序继续执行EndSelect子句后面的其它语句。
  • (2)如果有多个值列表与表达式的值相匹配时,只有第一个匹配的Case子句被执行,然后该SelectCase语句结束。
  • (3)如果没有一个值列表与表达式的值相匹配,就执行CaseElse子句中的语句组N,之后该SelectCase语句结束。
  • (4)如果实际编写的程序中既没有一个值列表与表达式的值相匹配,又没有Case Else子句,则该SelectCase语句不执行任何语句就结束。

第17页:多分支选择语句的功能

多分支选择语句的功能

语句组n+1T……TTF匹配表达式表1语句组1语句组2F语句组nF匹配表达式表2匹配表达式表n多分支选择语句的功能流程图:

第18页:百分制成绩转五级制示例

百分制成绩转五级制示例

例输入百分制成绩score,显示对应的五级制成绩哪些能实现,哪些不能实现?

第19页:分段函数与Select Case

分段函数与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的值。

第20页:条件语句的嵌套

条件语句的嵌套

如果在条件成立或不成立的情况下要继续判断其他条件,则可以使用嵌套的条件语句来实现,也就是在语句组中再使用另一个条件语句。

5.4条件语句的嵌套块结构条件语句的嵌套示例:IfA=1

ThenIfB=0ThenPrint"**0**" ElseIfB=1ThenPrint"**1**"EndIf ElseIfA=2ThenPrint"**2**"EndIf

第21页:多分支选择语句的嵌套

多分支选择语句的嵌套

示例:SelectCaseACase1SelectCaseBCase0Print"**0**"Case1Print"**1**"EndSelectCase2Print"**2**"EndSelect

第22页:多分支与块结构的互相嵌套

多分支与块结构的互相嵌套

多分支选择语句与块结构条件语句的互相嵌套示例:SelectCaseACase1IfB=0ThenPrint"**0**"ElseIfB=1ThenPrint"**1**"EndIfCase2Print"**2**"EndSelect

第23页:1.IIf函数

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条件函数

第24页:2.Choose函数

2.Choose函数

格式:Choose(<数值表达式>,<选项1>,<选项2>,...,<选项n>)功能:当<数值表达式>的值为1时,返回<选项1>的值;当<数值表达式>的值为2时,返回<选项2>的值;……。

如果<数值表达式>的值不是整数,则会先四舍五入为整数。例:将成绩1分、2分、3分、4分和5分转换成相应的等级:不及格(1分,2分)、及格(3分),良(4分),优(5分)。

Grade = Choose(Score, "不及格", "不及格", "及格", "良", "优")

第25页:5.5应用举例

5.5应用举例

【例5-5】设计一个口令检测程序,界面如下图,当用户输入的口令正确时,显示“恭喜!您已成功进入本系统”,否则,显示,“口令错!

请重新输入”。如果连续两次输入了错误口令,在第三次输入完口令后则显示一个消息框,提示“对不起,您不能使用本系统”,然后结束程序的执行。

Text1Label2

第26页:【例5-5】口令检测程序代码

【例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

第27页:【例5-6】求一元二次方程的解

【例5-6】求一元二次方程的解

  • (1)如果a=0,则不是二次方程,此时如果b=0,则提示重新输入系数;如果b0,则:x=-c/b
  • (2)如果a0,且b2-4ac=0,则有两个相等的实根
  • (3)如果a0,且b2-4ac>0,则有两个不等的实根
  • (4)如果a0,且b2-4ac<0,则有两个共轭复根Text1Text2Text3Command1

第28页:【例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

第29页:【例5-6】判别式分支代码

【例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)

第30页:【例5-6】复数根输出代码

【例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

第31页:【例5-7】四则运算自我练习程序

【例5-7】四则运算自我练习程序

【例5-7】设计一个四则运算的自我练习应用程序,界面如下图所示。Text1Text4Text3Text2Label4Label2

第32页:【例5-7】的功能要求

【例5-7】的功能要求

  • (1)执行时,当在Text1中输入一种运算符后,在标签Label2中立即出现该运算符号。
  • (2)单击“出题”按钮可以产生两个[0,1000]之间的随机整数,这时由Text2、Label2和Text3组成一个表达式。
  • (3)可以通过单击“计算”按钮计算所生成的表达式的值。
  • (4)也可以由用户在文本框Text4中输入运算结果通过单击“判断”按钮可以判断输入的运算结果是否正确,然后在Label4上显示“正确”或“错误”。
  • (5)单击“退出”按钮结束运行。

第33页:(1)在Text1中输入

(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

第34页:(3)单击“计算”按钮Command2得

(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

第35页:(4) Text4的内容也可以由用户输入

(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

第36页:(4) 判断Text4输入结果

(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

第37页:(4) 判断Text4输入结果(续)

(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

第38页:用Choose函数改写运算判断

用Choose函数改写运算判断

  • (1)“计算按钮”用到choose函数,将“+”、“-”、“*“、“/”,转换成数值1、2、3、4,赋给变量op。然后根据op的值,返回相应计算结果,然后赋给Text4.
  • (2)对于判断部分,在上述第
  • (1)部的基础上用If...Then Else…ENDIF语句简化p88第
  • 4)程序。

第39页:选择结构常见错误

选择结构常见错误

1.在选择结构中缺少配对的结束语句对多行式的If块语句中,应有配对的

End If语句结束Select应有 End Select作为结束语句。2.多边选择 ElseIf关键字的书写和条件表达式的表示 ElseIf不要写成 Else If;3. Select Case语句的使用 Select Case后不能出现多个变量;Case子句后不能出现变量。

第40页:本章小结

本章小结

1.单行结构条件语句If <条件>Then [<语句组1>] [Else <语句组2>]2.块结构条件语句If ……Then……[ElseIf ……Then……]……[Else……]

End If3.多分支选择语句 Select Case …… Case …………[ Case …………]……[ Case Else……] End Select
顶部目录