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