第5章
Download
1 / 46

第5章 - PowerPoint PPT Presentation


  • 190 Views
  • Uploaded on

第5章. 选择结构 程序设计. 本章要点: 条件语句 单行结构条件语句 If...Then...Else ... 块结构条件语句 If...Then…EndIf 多分支选择语句 Select Case...End Select 语句的嵌套. 特点: 根据条件是否成立,决定程序的执行分支. 引言. 顺序结构程序的执行次序是按语句的先后排列次序依次执行的,然而,计算机在处理实际问题时,往往需要根据条件是否成立,决定程序的执行方向,在不同的条件下,进行不同的处理。假如遇到这样一个问题:. |x| x≤0 lnx x>0. Y=.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 第5章' - bart


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

第5章

选择结构程序设计

  • 本章要点: 条件语句

  • 单行结构条件语句If...Then...Else ...

  • 块结构条件语句If...Then…EndIf

  • 多分支选择语句Select Case...End Select

  • 语句的嵌套

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


引言

  • 顺序结构程序的执行次序是按语句的先后排列次序依次执行的,然而,计算机在处理实际问题时,往往需要根据条件是否成立,决定程序的执行方向,在不同的条件下,进行不同的处理。假如遇到这样一个问题:

|x| x≤0

lnx x>0

Y=

在输入变量x的值之后,需根据x的不同取值范围做不同的处理,使用顺序结构的程序无法解决这一问题的。本章将介绍解决此类问题的语句结构。


条件

T

F

语句组1

语句组2

5.1 单行结构条件语句

  • 1. 格式

  • If<条件>Then [<语句组1>] [Else<语句组2>]

  • 2. 功能

  • 如果<条件>成立(True),则执行<语句组1>

  • 否则执行<语句组2>

例:If x <= 0 Then y = abs(x) Else y = log(x)


  • 3. 说明

  • (1) <条件> 可以是:

  • 关系表达式;布尔表达式

  • 例:If x > 0 Then y = 1 Else y = -1

  • 例:If x > 0 And x < 10 Then y = 1 Else y = -1

  • 数值表达式:0为False;非0为True

  • 例:x = 5

  • If x Then y = 1 Else y = -1

  • 字符串表达式:"0"为False;非"0"为True

  • (2) 可以没有Else部分,这时必须有<语句组1>

  • 例:If X<>"aaa" Then Print X


  • (3) <语句组1>、<语句组2>: 可以有多条语句,各语句之间用冒号隔开。

  • 例:

  • If N>0 Then A=A+B:B=B+A Else A=A-B:B=B-A

  • (4) 应作为一条语句书写。如果语句太长需要换行,必须在折行处使用续行符号。

  • 例:If N>0 Then A=A+B:B=B+A Else_

  • A=A-B:B=B-A


:

  • (5) 无论条件是否成立,都具有共同出口

X = 2

If X >= 0 Then X = 1 + X Else X = 5 - X

Y = 1 - X

Print "Y="; Y

共同出口

X = -2

If X >= 0 Then X = 1 + X Else X = 5 - X

Y = 1 - X

Print "Y="; Y

(6) 单行结构条件语句可以嵌套

IF ... THEN...IF ... THEN ...ELSE ...ELSE…


Text1

Label3

Command1

  • 【例5-1】设界面如下图所示,用文本框输入x的值,单击“计算Y”按钮时,根据以下公式计算y的值。

|x| x≤0

lnx x>0

y=


代码如下:

Private Sub Command1_Click()

X = Val(Text1.Text)

If X <= 0 Then Y = Abs(X) Else Y = Log(X)

Label3.Caption = Y

End Sub


Y

第一象限

X>0,Y>0

第二象限

X<0,Y>0

X

第三象限

X<0,Y<0

第四象限

X>0,Y<0

  • 【例5-2】平面直角坐标系中,不同的象限内,点的坐标的符号有以下4种情况:

任意输入一对坐标值,找出它所在的象限。如果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 Sub

IfX > 0 ThenIf Y > 0 Then Print "IN A" _

Else Print "IN D"ElseIf Y > 0 Then _

Print "IN B" Else Print "IN C"

End Sub


5.2 块结构条件语句

  • If x > 10 Then

  • y = x - 10

  • ElseIf x > 5 Then

  • y = x - 5

  • ElseIf x > 0 Then

  • y = x

  • Else

  • Print "error"

  • End If

  • 1.格式

  • If <条件1>Then

  • [<语句组1>]

  • [ElseIf <条件2>Then

  • [<语句组2>]]

  • ……

  • [ElseIf <条件N> Then

  • [<语句组N>]]

  • [Else

  • [<其他语句组>]]

  • End If


T

F

条件1

T

F

条件2

语句组1

……

语句组2

T

F

条件n

语句组n

语句组n+1

2. 功能


  • 3. 说明

  • 整个块结构必须以If语句开头,End If语句结束

  • 除了第一行的If语句和最后一行的End If语句是必须的以外,ElseIf子句和Else子句都是可选的。

  • 两种常见的简化形式:

形式一:

If <条件> Then

<语句组1>

Else

<语句组2>

End If

形式二:

If <条件> Then

<语句组>

End If


【例5-3】将例5-2改成用块结构条件语句实现。

Private Sub Command1_Click()

X = Val(Text1.Text) : Y = Val(Text2.Text)

If X = 0 Or Y = 0 Then

Print "该点不在任何象限内"

ElseIf X > 0 And Y > 0 Then

Print "在第一象限"

ElseIf X < 0 And Y > 0 Then

Print "在第二象限"

ElseIf X < 0 And Y < 0 Then

Print "在第三象限"

Else

Print "在第四象限"

End If

End Sub


  • 【例5-4】输入华氏温度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"


Text1

Text2

  • 设计界面:


  • Private Sub Command1_Click()

  • C = 5 / 9 * (Val(Text1.Text) - 32)

  • Text2.Text = Format(C, "0.00")

  • If C > 40 Then

  • Label2.Caption = "HOT"

  • ElseIf C >30 Then

  • Label2.Caption = "WARM"

  • ElseIf C >20 Then

  • Label2.Caption = "ROOM TEMPERATURE"

  • ElseIf C >10 Then

  • Label2.Caption = "COOL"

  • ElseIf C >0 Then

  • Label2.Caption = "COLD"

  • Else

  • Label2.Caption = "FREEZING"

  • End If

  • End Sub


  • 4. 注意

  • 1) ElseIf不能写成Else If,即中间不能有空格。

  • 2) 可以将If语句、ElseIf子句、Else子句、和End If语句左对齐,而各语句组向右缩进若干空格,以使程序结构更清楚。

  • 3) 严格按格式要求书写,不可随意换行或将两行合并成一行。例如,对于条件结构:

  • If x >= 0 Then

  • y = 1

  • Else

  • y = 2

  • End If 以下两种写法都是错误的:

写法一:

If x>=0 Then y=1

Else y = 2

End If

写法二:

If x=1 Then y=10 Else y = 20

End If


5.3 多分支选择语句

2. 功能

根据测试表达式的值,按顺序匹配Case后的表达式,如果匹配成功,则执行该Case下的语句块,然后转到End Select语句之后继续执行。

  • 1. 格式

  • Select Case <测试表达式>

  • Case <表达式表1>

  • [<语句组1>]

  • [Case <表达式表2>

  • [<语句组2>]]

  • [Case Else

  • [<语句组n>]]

  • End Select


匹配

表达式表1

F

T

语句组1

匹配表达式表2

F

T

……

语句组2

匹配表达式表n

F

T

语句组n

语句组n+1

多分支选择语句的功能流程图:


  • 3. 说明

  • 1) <测试表达式> : 数值或字符表达式

  • 2) Case 后的<表达式表>可以为如下形式:

  • ① 表达式1[,表达式2]...

  • 如: Case 1 , 3 , 5

  • ② 表达式1 TO 表达式2

  • 如: Case 10 TO 30

  • Case "A" TO "Z"

  • ③ Is <关系运算符><表达式>

  • 如: Case Is >= 10

  • Case Is = 0 与 Case 0 相同

  • 且三种形式可以混用,如:

  • Case Is < -5 , 0 , 5 To 100


Text1

Text2

Command1

【例5-5】按以下公式求分段函数y的值。

ex+e-x x<0

1.25 x=0

lgx x>0

Y=

设运行时从文本框Text1输入x的值,单击命令按钮Command1计算Y的值,结果显示于文本框Text2中,界面如下:


命令按钮Command1的Click事件过程:

Private Sub Command1_Click()

X = Val(Text1.Text) ' 输入X的值

Select Case X ' <测试表达式>为X

Case Is < 0

Y = Exp(X) + Exp(-X)

Case 0' 或 Case Is=0

Y = 1.25

Case Is > 0

Y = Log(X) / Log(10)

End Select

Text2.Text = Format(Y, "0.000000")

End Sub


4. 注意

1) <测试表达式>的类型应与各Case后的表达式类型一致。

2) 不能在Case后的表达式中使用<测试表达式>中的变量。例如:

Select Case X

Case X < 0 ' 在这里使用了变量X,是错误的

Y = Exp(X) + Exp(-X)

Case X=0 ' 在这里使用了变量X,是错误的

Y = 1.25

Case X > 0 ' 在这里使用了变量X,是错误的

Y = Log(X) / Log(10)

End Select


3) <测试表达式>只能是一个变量或一个表达式,而不能是变量表或表达式表。例如,检查变量X1、X2、X3之和是否小于零,不能写成:

Select Case X1,X2,X3 ' 错误写法

Case X1+X2+X3 < 0

End Select

而应该写成:

Select Case X1+X2+X3' 正确写法

Case Is < 0

End Select


4) 不要在 <测试表达式>只能是一个变量或一个表达式,而不能是变量表或表达式表。例如,检查变量Case后使用布尔运算符表示条件

例如,要表示条件0<X<100,不能写成:

Select Case X

Case Is>0 And Is<100 ' 使用了And, 是错误的

End Select

对于较复杂的条件,可以用块结构条件语句来实现,而有些条件完全可以转换成Case语句允许的几种形式之一。


【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

距离<250km 没有折扣

250km≤距离<500km 2%折扣

500km≤距离<1000km 5%折扣

1000km≤距离<2000km 8%折扣

2000km≤距离<3000km 10%折扣

3000km≤距离 15%折扣


分析:【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

设每公里每吨货物的基本运费为Price,

货物重为Weight,

运输距离为Distance,

折扣为Discount,

则总运费Freight的计算公式为:

Freight= Price * Weight * Distance *

(1 - Discount)


Text1【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

Text2

Text3

Text4

Command1

设计界面如下图:


Command1【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:的Click事件过程如下:

Private Sub Command1_Click()

Price = Val(Text1.Text)

Weight = Val(Text2.Text)

Distance = Val(Text3.Text)

Select Case Distance

Case Is < 250

Discount = 0

Case Is < 500

Discount = 0.02

Case Is < 1000

Discount = 0.05


Case 【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:Is < 2000

Discount = 0.08

Case Is < 3000

Discount = 0.1

Case Else

Discount = 0.15

End Select

Freight = Price * Weight * Distance * _

(1 - Discount)

Text4.Text = Freight

End Sub


5.5 条件语句的嵌套【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

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


例:输入年份和月份,求该月的天数。【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

已知:

(1)当月份为1、3、5、7、8、10、12时,天数为31天;当月份为4、6、9、11时,天数为30天;当月份为2时,如果为闰年则天数为29天,否则为28天。

(2)某年为闰年的条件是:年份能被4整除,但不能被100整除;或年份能被400整除。


设计界面:【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

Text1

Text2

Text3


代码:【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

Private Sub Command1_Click()

Dim Ynum As Integer, Mnum As Integer

Ynum = Val(Text1.Text)

Mnum = Val(Text2.Text)

Select Case Mnum

Case 1, 3, 5, 7, 8, 10, 12

Text3.Text = 31

Case 4, 6, 9, 11

Text3.Text = 30


Case 【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:2

If (Ynum Mod 4 = 0 And_

Ynum Mod 100 <> 0) Or _

(Ynum Mod 400 = 0) Then

Text3.Text = 29

Else

Text3.Text = 28

End If

End Select

End Sub


5.6 应用举例【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

  • 【例5-8】求一元二次方程ax2+bx+c=0的解

  • 分析:

  • 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,则有两个共轭复根


Text1【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

Text2

Command1

Text3

  • 设计界面:

运行界面:


  • Private Sub Command1_Click()【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

  • A = Val(Text1.Text): B = Val(Text2.Text)

  • C = Val(Text3.Text): Cls

  • CurrentX = 600: CurrentY = 1100

  • If A = 0 Then

  • If B = 0 Then

  • MsgBox "系数为零,请重新输入"

  • Text1.SetFocus

  • Text1.SelStart = 0

  • Text1.SelLength = Len(Text1.Text)

  • Else

  • X = -C / B

  • Print "X="; Format(X, "0.000")

  • End If

  • Exit Sub '

  • End If


  • Delta = B ^ 2 - 4 * A * C【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

  • Select Case Delta

  • Case 0

  • Print "X1=X2="; Format(-B / (2 * A), "0.000")

  • Case Is > 0

  • X1 = (-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 < 0

  • A1 = -B / (2 * A)

  • A2 = Sqr(Abs(Delta)) / (2 * A)


  • Print "X1="; Format(A1, "0.000"); "+"; _【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

  • Format(A2, "0.000"); "i"

  • CurrentX = 600

  • CurrentY = 1300

  • Print "X2="; Format(A1, "0.000"); "-"; _

  • Format(A2, "0.000"); "i"

  • End Select

  • End Sub


Text1【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

Label2

  • 【例5-9】设计一个口令检测程序,界面如下图,当用户输入的口令正确时,显示“恭喜!您已成功进入本系统”,否则,显示,“口令错!请重新输入”。如果连续两次输入了错误口令,在第三次输入完口令后则显示一个消息框,提示“对不起,您不能使用本系统”,然后结束程序的执行。


  • 分析:【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:界面中用一个文本框Text1接受口令,Text1的属性设置如下:

  • PasswordChar:*

  • MaxLength:6

  • 要求运行时在用户输入完口令并按回车键时对口令进行判断,因此本例使用了文本框Text1的KeyUp事件过程,当焦点在文本框时,松开键盘任一键后产生KeyUp事件,同时返回按键代码KeyCode。回车键的KeyCode为13,所以程序首先判断如果用户在Text1中按下了回车键,表示口令输入完,再判断口令是否正确。

  • Text1的KeyUp事件过程如下:


  • Private Sub Text1_【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:KeyUp(KeyCode As Integer, _ Shift As Integer)

  • Static I As Integer' 保存输入错误口令的次数

  • If KeyCode = 13 Then' 如果按下的键为回车键

  • IfUCase(Text1.Text) = "HELLO" Then

  • Label2.Caption = "恭喜!,您已成功进入本系统"

  • ElseIf I = 0 Or I = 1 Then

  • I = I + 1

  • Label2.Caption = "口令错!,请重新输入"

  • Text1.SelStart = 0

  • Text1.SelLength = Len(Text1.Text)

  • Else

  • MsgBox "对不起,您不能使用本系统": End

  • End If

  • End If

  • End Sub


本章小结【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

1.单行结构条件语句

If <条件> Then [<语句组1>] [Else <语句组2>]

2. 块结构条件语句

If <条件1> Then

[<语句组1>]

[ElseIf <条件2> Then

[<语句组2>]]

[ElseIf <条件n> Then

[<语句组n>]]

[Else

[<语句组n+1>]]

End If


3. 多分支选择语句【例5-6】某运输公司对用户计算运费,距离越远,每公里运费越低,计算标准如下:

  • Select Case <测试表达式>

  • Case <表达式表1>

  • [<语句组1>]

  • [Case <表达式表2>

  • [<语句组2>]]

  • [Case <表达式表n>

  • [<语句组n>]]

  • [Case Else

  • [<语句组n+1>]]

  • End Select