【实例4.5】 求分段函数
程序运行结果如图4-15所示,打开代码编辑窗口,在其中输入如下代码:

图4-15 程序运行界面
Private Sub command1_Click() '“计算”按钮的事件过程
Dim x As Double, y As Double
x = Val(Text1.Text)
If x > 10 Then 'x>10
y = 3 * Cos(x) - x ^ 2 + 9
ElseIf x > 3 Then '3< x≤10
y = Sin(x) - 2 * x
Else 'x≤3
y = 9
End If
Text2.Text = y
End Sub
从本例可以看出,使用ElseIf可以在上面表达式为False进行再次判断。
【实例4.6】 某商场为了促销,采用购物打折的优惠方法,每位顾客一次购物:
(1)在1000元以上,按95折优惠。
(2)在2000元以上,按90折优惠。
(3)在3000元以上,按85折优惠。
(4)在5000元以上,按80折优惠。
编写程序,输入购物金额,计算并输出优惠价。程序界面如图4-16所示。
打开代码编辑窗口,在其中输入如下代码:
Private Sub Command1_Click()
Dim x As Single, y As Single
x = Val(Text1.Text)
If x < 1000 Then
y = x
ElseIf x < 2000 Then
y = 0.95 * x
ElseIf x < 3000 Then
y = 0.9 * x
ElseIf x < 5000 Then
y = 0.85 * x
Else
y = 0.8 * x
End If
Label3.Caption = y
End Sub
程序运行后,输入购物总金额,单击【计算】按钮,则显示打折后的价格,如图4-17所示。
2.Select…Case语句
If语句一般用于单分支或双分支的情况中,程序在很多情况下会遇到多分支,一种解决方法是采用复合If语句完成,但代码可读性不强;另一种解决方法是采用VB提供的Select Case语句,该语句的功能是:根据【测试表达式】的值,从多个语句块中选择一个符合条件的执行。下面介绍该语句的使用方法。
格式:
Select Case <测试条件表达式>
Case 表达式列表1
<语句组1>
Case 表达式列表2
<语句组2>
……
[Case Else
<语句组n+1>]
End Select
说明:
(1)测试表达式可以是数值或字符串表达式。
(2)表达式列表,一般可以是以下几种形式之一:
l 一个常量或常量表达式。
l 多个常量或常量表达式,用逗号隔开,逗号相当于【或】,只要测试表达式等于其中的某个值就是匹配,如:Case 3,5,7,9。
l 表达式1 to 表达式2,表示从表达式1到表达式2中所有的值,其中表达式1的值必须小于表达式2的值。如:Case 4 to 7。
l Is关系运算表达式,可以使用的关系运算符为:>、>=、<、<=、<>、=,如:Case Is<10。不可以使用逻辑运算符表示多个范围,如:Case Is>0 And Is<10 是错误的。
l 前面四种情况的组合,如:Case Is>10,2,4,6,Is <0。
(3)执行时,先求测试表达式的值,然后逐个判断与哪个Case子句的【表达式列表】匹配,找到则执行该Case后的语句块,找不到则执行Case Else后的语句块,然后结束Select Case语句,程序转到End Select语句的后一条继续执行。若有多个匹配的表达式,则只执行第一个与之匹配的。
【实例4.7】 简单运算器。
本题中运算符是由下拉列表框提供给用户选择,共有+、-、×、÷四个选项。参考界面如图4-18所示,各控件的属性设置如表4-1所示。

图4-18 程序设计界面
表4-1 控件属性设置
|
对象 |
属性 |
属性值 |
|
文本框1 |
(名称) |
txtX |
|
文本框2 |
(名称) |
txtY |
|
文本框3 |
(名称) |
txtresult |
|
组合框 |
(名称) |
Cmbop |
|
List |
+、-、×、÷ | |
|
命令按钮 |
(名称) |
cmdresult |
|
Caption |
= |
打开代码编辑器,输入命令按钮cmdresult的Click事件过程:
Private Sub cmdresult_Click()
Select Case Cmbop.Text
Case "+"
txtresult = Val(txtX) + Val(txtY)
Case "-"
txtresult = Val(txtX) - Val(txtY)
Case "×"
txtresult = Val(txtX) * Val(txtY)
Case "÷"
If Val(txtY) <> 0 Then
txtresult = Val(txtX) / Val(txtY)
Else '排除除数为0的情况
MsgBox "被0除"
txtY = ""
txtY.SetFocus
End If
End Select
End Sub
【实例4.8】 判定学生的成绩或等级。
本题实现的功能有已知成绩求等级和已知等级求成绩,成绩和等级的对应关系如表4-2所示。
表4-2 成绩等级对应表
|
成绩 |
等级 |
|
>=90分 |
A |
|
80~89分 |
B |
|
70~79分 |
C |
|
60~69分 |
D |
|
<60分 |
E |
打开代码编辑窗口,在其中输入如下代码:
Private Sub score2grade_Click() '“成绩—>等级”按钮的事件过程
Dim score As Integer
score = Val(txtscore)
Select Case score \ 10
Case 9
txtgrade = "A"
Case 8
txtgrade = "B"
Case 7
txtgrade = "C"
Case 6
txtgrade = "D"
Case 5, 4, 3, 2, 1, 0
txtgrade = "E"
Case Else
txtgrade = "Score Error!"
End Select
End Sub
Private Sub grade2score_Click() '“等级—>成绩”按钮的事件过程
Dim grade As String
grade = Left(Trim(txtgrade), 1)
Select Case grade
Case "A"
txtscore = ">=90"
Case "B"
txtscore = "80~89"
Case "C"
txtscore = "70~79"
Case "D"
txtscore = "60~69"
Case "E"
txtscore = "<60"
Case Else
txtscore = "Grade Error!"
End Select
End Sub
在VB中,还提供了一个IIf函数来执行简单的条件判断,格式如下:
IIf(条件表达式,条件为True时的值,条件为False 时的值)
说明:
(1)条件表达式可以是关系表达式、逻辑表达式或数值表达式。如果用数值表达式做条件,则非0为真,0为假。
(2)三个表达式都不能省略。
【实例4.9】 使用IIf函数判断输入数字的奇偶性。
代码如下:
Private Sub Command1_Click()
Dim m As Integer, n As Integer
m = Val(Text1.Text)
n= IIf(m Mod 2 =0 , "偶数" , "奇数")
Label1.Caption=n
End Sub
在解决实际问题时,经常要重复进行某些相同的操作,这时就要用到循环结构。程序中的循环结构是指:在程序的某处开始,有规律地反复执行某一语句组(或程序段)。被重复执行的语句组称为循环体,循环体的执行次数由循环条件而定。VB中常用的循环语句主要有For…Next、While…Wend和Do…Loop三种,本节将做详细介绍。
如果事先已知循环次数,则可使用For…Next循环结构语句,又称这种循环为计数循环。它的格式是: