选择程序结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程本章主要内容条件表达式关系表达式 / 逻辑表达式条件语句
If...Then / If...Then...Else
单选按钮 / 复选框计时器控件程序举例第 4章 选择结构设计使用选择结构语句时,要用条件表达式来描述条件示例 If x = 5 Then y = x + 1
If a>1 And b<>0 Then x = 1
条件表达式可以分为两类:
关系表达式 和 逻辑表达式条件表达式的取值为逻辑值(也称布尔值):
真 (True) 和 假 (False)
4.1 条件表达式用一个比较运算符把两个表达式 (如算术表达式 )连接起来的式子。 值为 True(真 )和 False(假 )
常用比较运算符 (表 4.1)。举例
3*2 < 8 值为真
"32" <= "3" & "2" 值为真
6 > 8 值为假
7 >= 9 值为假
"ac" = "a" 值为假
3 <>6 值为真
4.1.1 关系表达式
(1)所有比较运算符的优先级都相同
(2)日期型数据看成,yyyymmdd‖的 8位整数,按数值大小比较
(3)字符型数据按其 ASCII码值进行比较
"A" 小于 "B"
"a" 大于 "A"
"ABC" 大于 "AB2"
"ABC" 大于 "AB"
(4)Like和 Is
Like称为字符串匹配,Is用来比较两个对象的引用变量说明用逻辑运算符把关系表达式或逻辑值连接起来的式子逻辑表达式的值是一个逻辑值例如:数学式 1≤x< 3 可以表示为 1 <=x And x<3
常用逻辑运算符有,And(与 ),Or(或 ),Not(非 )
示例:
Not (2<3) 2<3
3>=3 And 4<5+1
"3" <= "3" Or 5<3 ―3‖<=‖3‖为真,结果为真
4.1.2 逻辑表达式
(1)逻辑表达式的运算顺序是:
先算术运算或字符串运算,再比较运算,后逻辑运算。括号优先,同级运算从左到右执行
(2)按 Not,And,Or的优先次序进行示例,3<>2 And Not 4<6 Or "12" = "123"
先进行 Not运算,则有:真 And假 Or假,再进行
And运算后进行 Or运算,结果为假 (False)
说明判断条件:
年号 (y)能被 4整除,但不能被 100整除;或者能被
400整除,用逻辑表达式来表示这个条件,写成:
(y Mod 4=0 And y Mod 100<>0) Or (y Mod 400=0)
也可写成:
(Int(y/4)=y/4 And Int(y/100)<>y/100) Or Int(y/400)=y/400)
例 4.1 判断某一年是否闰年两种格式的条件语句:
If...Then
If...Then...Else
4.2.1 If...Then语句格式:
If 条件 Then 语句
If 条件 Then
End If
功能,若条件成立 (值为真 ),则执行 Then后面的语句或语句块,否则直接执行下一条语句或,End If‖的下一条语句
4.2 条件语句如果满足条件 CJ< 60时,打印出“成绩不
If CJ<60 Then Print "成绩不及格 "
多行代码:
If CJ<60 Then
Print "成绩不及格“
Print "请准备补考 "
End If
格式:
If 条件 Then
语句块 1 (A)
Else
语句块 2 (B)
End If
功能,首先测试条件 (E),如果条件成立 (即值为真 ),
则执行 Then后面的语句块 1,如果条件不成立 (即值为假 ),
则执行 Else后面的语句块 2。而在执行 Then或 Else之后的语句块后,会从 End If
真 假
A B
E
4.2.2 If...Then...Else语句
(1)创建应用程序的用户界面和设置对象属性
(2)编写程序代码功能要求,用户在,a=‖文本框 (Text1)、,b=‖文本框
(Text2)和,c=‖文本框 (Text3)中输入数据,单击“判断”
按钮后,则在“最大数=”文本框 (Text4)中输出结果例 4.2 输入三个数 a,b,c,求出其中最大数
Private Sub Command1_Click()
Dim a As Integer,b As Integer
Dim c As Integer,m As Integer
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
If a > b Then
m = a 'm用来存放较大值
Else
m = b
End If
If c > m Then m = c
Text4.Text = m
End Sub
程序代码
(1)建立应用程序的用户界面和设置对象属性
(2)编写程序代码功能要求:用户从上面三个文本框 (Text1,Text2,Text3)
中输入数据,单击“排序”按钮 (Command1),则在第 4个文本框 (Text4)中显示结果例 4.3 输入三个数,将它们从大到小排序
Private Sub Command1_Click()
a = Val(Text1.Text)
b = Val(Text2.Text)
c = Val(Text3.Text)
If a < b Then '本条件语句实现 a>=b
t = a,a = b,b = t
End If
If a < c Then '本条件语句实现 a>=c
t = a,a = c,c = t
End If
If b < c Then '本条件语句实现 b>=c
t = b,b = c,c = t
End If
Text4.Text = a & "," & b & "," & c
End Sub
程序代码实现一些简单的条件判断分支结构格式:
IIf(条件,条件为真时的值,条件为假时的值 )
功能:对条件进行测试,若条件成立 (为真值 ),则取第一个值 (即“条件为真时的值” ),否则取第二个值 (即“条件为假时的值” )
例如,将 a,b中的小数,放入 Min
Min=IIf(a< b,a,b)
4.2.3 IIf函数
Then和 Else后面的语句块包含另一个条件语句
1.一般格式
If 条件 1 Then
If 条件 2 Then

End If
Else

End If
使用条件语句嵌套时,一定要注意 If与 Else,If
与 End If的配对关系。
4.2.4 条件语句的嵌套例如,0时至 12时,显示“早上好”
利用窗体装载 (Load)事件,采用 Print直接在窗体上输出结果
Private Sub Form_Load()
Dim h As Integer
Show '使 print输出在窗体上的内容可见
h = Hour(Time) '取系统的时间
FontSize = 30,ForeColor = RGB(255,0,0)
BackColor = RGB(255,255,0)
If h < 12 Then
Print "早上好! "
Else
If h < 18 Then
Print "下午好! "
Else
Print "晚上好! "
End If
End If
End Sub
例 4.4 根据不同的时间段发出问候语
If 条件 1 Then
语句块 1
ElseIf 条件 2 Then
语句块 2
ElseIf 条件 3 Then
语句块 3
……
[ Else
语句块 n]
End If
先测试条件 1,如果为假,就依次测试条件 2,依此类推,
直到找到为真的条件。
一旦找到一个为真的条件时,VB会执行相应的语句块,
然后执行 End If语句后面的代码。
如果所有条件都是假,那么执行 Else后面的语句块 n,然后执行 End If
If h < 12 Then
Print "早上好! "
ElseIf h < 18 Then
Print "下午好! "
Else
Print "晚上好! "
End If
2,ElseIf格式输入学生成绩 (百分制 ),判断该成绩的等级 (优、良、中、
及格、不及格 )
(1)创建应用程序的用户界面和设置对象属性
(2)编写程序代码功能要求,用户从“成绩”文本框 (Text1)中输入学生成绩,单击“执行”按钮 (command1)后,经判断得到等级并显示在标签 Label2上。
例 4.5 判断成绩的等级
Private Sub Command1_Click()
Dim score As Integer,temp As String
score = Val(Text1.Text)
temp = "成绩等级为,"
If score < 0 Then
Label2.Caption = "成绩出错 "
ElseIf score < 60 Then
Label2.Caption = temp + "不及格 "
ElseIf score <= 79 Then
Label2.Caption = temp + "及格 "
ElseIf score <= 100 Then
Label2.Caption = temp + "优良 "
Else
Label2.Caption = "成绩出错 "
End If
End Sub
使用多分支语句 Select Case也可以实现多分支选择。更有效、更易读,并且易于跟踪调试。
Select Case 表达式
Case 表达式表 1
语句块 1
[ Case 表达式表 2
语句块 2]
.,,
[ Case Else
语句块 n
End Select
先计算表达式的值,然后将该值依次与结构中的每个
Case的值进行比较,如果该值符合某个 Case指定的值条件时,就执行该 Case的语句块,然后跳到 End Select,从 End
Select出口。如果没有相符合的 Case值,则执行 Case Else中的语句块
4.3 多分支语句表达式表通常是一个具体值 (如 Case 1),每一个值确定一个分支。还有三种方法可以确定设定值:
(1)一组值 (用逗号隔开 )。
Case 1,3,5 ′表示条件在 1,3,5范围内取值
(2)表达式 1 TO 表达式 2。
Case 60 To 80 ′表示条件取值范围为 60~ 80
(3)Is关系式。
Case Is<5 ′表示条件在小于 5范围取值实现例 4.5所完成的功能,程序代码如下:
Private Sub command1_click()
Dim score As Integer,temp As String
score = Val(Text1.Text)
temp = "成绩等级为,"
Select Case score
Case 0 To 59
Label2.Caption = temp + "不及格 "
Case 60 To 69
Label2.Caption = temp + "及格 "
Case 70 To 79
Label2.Caption = temp + "中 "
Case 80 To 89
Label2.Caption = temp + "良 "
Case 90 To 100
Label2.Caption = temp + "优 "
Case Else
Label2.Caption = "成绩出错 "
End Select
End Sub
例 4.6 用 Select Case语句来实现多分支选择功能鸡兔同笼,已知鸡和兔总头数为 h=23,总脚数为 f=56,求鸡兔各有多少只?
再提供输入框由学生回答问题,然后采用输出框显示对设计步骤如下:
(1)在窗体上设置一个命令按钮 Command1
(2)采用窗体的装载事件 Form_Load,使考题内容直接显示在窗体上。
例 4.7 求鸡数和兔数当用户单击“答题”按钮时,程序提供输入对话框,
由用户输入答案,再通过输出框显示评判意见。采用的程序代码如下:
Private Sub Form_Load()
Show
Print
FontSize = 18
Print Spc(9); "考一考你 "
FontSize = 13
Print
Print Spc(5); "鸡兔同笼,已知鸡和兔总头数为 23,"
Print Spc(3); "总脚数为 56,求鸡兔各有多少? "
End Sub
Private Sub Command1_Click()
h = 23,f = 56 '总头数及总脚数
j1 = (4 * h - f) / 2 '求出的鸡数
t1 = (f - 2 * h) / 2 '求出的兔数
j2 = Val(InputBox("鸡的只数是多少? ","请回答 "))
t2 = Val(InputBox("兔的只数是多少? ","请回答 "))
Select Case True '选择真值
Case j1 = j2 And t1 = t2
MsgBox ("回答完全正确 !")
Case j1 = j2
MsgBox ("鸡数回答正确,但兔数不对 !")
Case t1 = t2
MsgBox ("兔数回答正确,但鸡数不对 !")
Case Else
MsgBox ("回答错误 !")
End Select
End Sub
提供选项让用户选择,如选择,是,或,否,,
从列表中选择某一项等选择的控件有:
单选按钮、复选框、列表框和组合框
4.4 选择性控件
1,单选按钮的用途单选按钮 (OptionButton)控件由一个圆圈“○”及紧挨它的文字组成,能提供“选中”和“未选中”两种可选项成组形式出现
2,常用属性
Caption属性
Value属性,表示单选按钮是否被选中,选中时 Value值为 True,否则为 False
使用单选按钮组时,选中其中一个,其余就会自动关闭
Alignment属性,设置单选按钮标题的对齐方式
3,事件
Click事件在应用程序中可以创建一个事件过程,检测控件对象
Value属性值,再根据检测结果执行相应的处理
4.4.1 单选按钮
(1) 创建应用程序的用户界面和设置对象属性单选按钮组;
初始状态:设置 Option1的 Value属性值设置为 True,
或通过代码,Option1.Value=True‖ 来实现
(2)编写程序代码功能要求例 4.8 用单选按钮组控制显示不同的字体程序代码如下:
Private Sub Option1_Click()
Text1.FontName = "宋体 "
End Sub
Private Sub Option2_Click()
Text1.FontName = "幼圆 "
End Sub
Private Sub Option3_Click()
Text1.FontName = "楷体 _GB2312"
End Sub
说明:程序代码中所用的字体号 (如“宋体”、“幼圆”
等 )必须与系统提供的字体相一致
1,
复选框 (CheckBox) 控件由一个四方形小框和紧挨它的文字组成。提供“选中”和“未选中”两种可选项复选框控件与单选按钮控件在使用方面的区别
2,
Caption属性
Value属性,表示复选框的状态有三种取值,0——未选中 (缺省值 )
1——选中
2——不可用 (灰色显示 )
Alignment属性; Style属性
3,
复选框可响应的事件与单选按钮基本相同
4.4.2 复选框
(1)创建应用程序的用户界面和设置对象属性多行文本框 (带垂直滚动条 )和四个复选框
(2)编写程序代码功能要求,程序开始运行后,用户在文本框中输入一段文字 (如“复选框应用示例” ),然后按需要单击各复选框,
则文字的字体、字型、字号及颜色随之改变例 4.9 用复选框来控制文字的字体、字型、字号及颜色
Private Sub Check1_Click()
If Check1.Value = 1 Then '判复选框 1是否选中
Text1.FontName = "楷体 _GB2312"
Else
Text1.FontName = "宋体 "
End If
End Sub
Private Sub Check2_Click()
If Check2.Value = 1 Then '判复选框 2是否选中
Text1.FontItalic = -1
Else
Text1.FontItalic = 0
End If
End Sub
Private Sub Check3_Click()
If Check3.Value = 1 Then '判复选框 3是否选中
Text1.FontSize = 25
Else
Text1.FontSize = 9
End If
End Sub
Private Sub Check4_Click()
If Check4.Value = 1 Then '判复选框 4是否选中
Text1.ForeColor = RGB(255,0,0)
Else
Text1.ForeColor = RGB(0,0,0)
End If
End Sub
在运行中,可以任意设定这四个复选框的状态,可以四
1,计时器的用途计时器 (Timer)每隔一定的时间间隔产生一次 Timer事件
(或称报时 )。可以根据这个特性来定时控制某些操作,或进行计时计时器控件在设计时显示为一个小时钟图标,而在运行时并 不显示
4.5 计时器控件
2,常用属性
Enabled属性,确定计时器是否可用
Interval属性,设置两个 Timer事件之间的时间间隔,其值以毫秒 (1ms=1/1000 s)为单位例如,如果希望每半秒钟产生一个 Timer事件,那么
Interval属性值应设置为 500,这样每隔 500 ms就会触发一次
Timer事件,从而执行相应的 Timer事件过程
3,事件计时器控件只响应一个 Timer事件。也就是说,计时器控件对象在间隔了一个 Interval设定时间后,便触发一次
Timer事件
(1)创建应用程序的用户界面和设置对象属性一个计时器控件和一个文本框。计时器控件 Timer1的
Interval属性值设定为 1000(1秒 )
例 4.10 建立一个电子时钟
(2)编写程序代码
Private Sub Timer1_Timer() 'timer事件过程
Text1.Text = Time 'Time是时间函数
End Sub
利用计时器可以按指定间隔时间对字体进行放大
(1)创建应用程序的用户界面和设置对象属性一个计时器控件和 )和一个标签 。计时器控件 Timer1的计时器采用默认的属性值
Enabled属性值为 True(真 ),Interval属性值为 0
例 4.11 实现字体的放大
(2)编写程序代码
Private Sub Form_Load()
Label1.Caption = "放大 "
Label1.Width = Form1.Width?把标签的高度和宽度
‘设置为窗体相同尺寸
Label1.Height = Form1.Height
Timer1.Interval = 800
End Sub
Private Sub Timer1_Timer()
If Label1.FontSize < 140 Then
Label1.FontSize = Label1.FontSize * 1.2
Else
Label1.FontSize = 8
End If
End Sub
例 4.12 电子倒计时器。先由用户给定倒计时的初始分秒数,然后开始倒计时,当计到 0分 0秒时,
通过消息对话框显示“倒计时结束”
(1)在窗体上建立一个计时器 (Timer1)、两个标签、两个文本框 (Text1和 Text2)和一个命令按钮 (Command1)
计时器的 Enabled属性值为 True,Interval属性值为 0
4.6 程序举例
(2)编写程序代码
Dim m As Integer,s As Integer '声明模块级变量
Private Sub Form_Load()
Timer1.Interval = 1000 '设置每隔 1秒触发 1次 Timer事件
Timer1.Enabled = False '关闭计时器
End Sub
Private Sub Command1_Click() '―倒计时”
m = Val(Text1.Text)
s = Val(Text2.Text)
Timer1.Enabled = True '打开计时器
End Sub
Private Sub Timer1_Timer()
If s > 0 Then
s = s - 1
Else
If m > 0 Then
m = m - 1
s = 59
End If
End If
Text1.Text = Format(m,"00")
Text2.Text = Format(s,"00")
If s = 0 And m = 0 Then
Beep '响铃,即让喇叭发一声响
MsgBox "计时结束 "
Unload Me
End If
End Sub
(1)创建应用程序的用户界面和设置对象属性单选按钮组 Option1,Option2,Option3及 Option4分别代表 +,-,*(乘 )和 /(除 )运算
(2)编写程序代码例 4.13 输入两个运算数和运算符 (+,-,*或 /),组成算式并计算结果,然后显示出来
Private Sub Command1_Click() '―计算”按钮
Dim a As Single,b As Single,t As Single,s As String
a = Val(Text1.Text)
b = Val(Text2.Text)
Select Case True
Case Option1.Value ' + 运算
s = "+"
t = a + b
Case Option2.Value ' - 运算
s = "-"
t = a - b
Case Option3.Value ' * 运算
s = "*"
t = a * b
Case Option4.Value ' / 运算
s = "/"
t = a / b
End Select
Text3.Text = a & s & b & "=" & t
End Sub
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
Option1.Value = True + 运算
End Sub
(1)分析,方程的解有以下几种可能:
若 a=0
若 b2 - 4ac=0
若 b2 - 4ac>0
若 b2 - 4ac<0,有两个共轭复根
(2)程序框图程序框图程序框图也称程序流程图,它能直观地表示程序的处
(3)建立应用程序的用户界面和设置对象属性
(4)编写程序代码例 4.14 求一元二次方程 ax2+bx+c= 0的解程序框图假假假真真真开始输入 a,b,c
a = 0
输出“不是二次方程”D=b*b – 4*a*c
R=- b / (2*a)
D = 0
输出两实根
- b / (2*a)
输出两个实根
X1,X2
输出两个复根
R + Pi
R- Pi
D > 0
计算复根的虚部
P = sqr(- D) / (2*a)
X1 = (- b + sqr(D)) / (2*a)
X2 = (- b- sqr(D)) / (2*a)
结束当用户在,a=‖文本框 (Text1)、,b=‖文本框
(Text2)和,c=‖文本框 (Text3)输入 a,b,c的值后,单击
“计算”按钮,则从,x1=‖文本框 (Text4)和,x2=‖
文本框 (Text5)
当输入的 a,b,c为 1,2,-8时,运行结果如下图功能要求
Private Sub Command1_Click()
Dim a As Single,b As Single,c As Single
Dim D As Single,X1 As Single,X2 As Single
Dim R As Single,P As Single
a = Val(Text1.Text) '取数据 a
b = Val(Text2.Text) '取数据 b
c = Val(Text3.Text) '取数据 c
If a = 0 Then '当 a=0
Text4.Text = "不是二次方程 "
Text5.Text = "不是二次方程 "
Else 'a<>0
D = b * b - 4 * a * c
R = -b / (2 * a)
If D = 0 Then 'D=0
Text4.Text = R
Text5.Text = R
ElseIf D > 0 Then 'D>0
X1 = (-b + Sqr(D)) / (2 * a)
X2 = (-b - Sqr(D)) / (2 * a)
Text4.Text = X1
Text5.Text = X2
Else 'D<0
P = Sqr(-D) / (2 * a)
Text4.Text = R & "+" & P & "i"
Text5.Text = R & "-" & P & "i"
End If
End If
End Sub