选择程序结构用于判断给定的条件,根据判断的结果判
断某些条件,根据判断的结果来控制程序的流程
本章主要内容
条件表达式
关系表达式 / 逻辑表达式
条件语句
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 条件表达式
4.1.1 关系表达式
用一个比较运算符把两个表达式 (如算术表达
式 )连接起来的式子。 值为 True(真 )和 False(假 )
常用比较运算符 (表 4.1)。举例
3*2 < 8 值为真
"32" <= "3" & "2" 值为真
6 > 8 值为假
7 >= 9 值为假
"ac" = "a" 值为假
3 <>6 值为真
(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
4.2.2 If...Then...Else语句
真 假
A B
E
(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
2,ElseIf格式
If h < 12 Then
Print "早上好! "
ElseIf h < 18 Then
Print "下午好! "
Else
Print "晚上好! "
End If
输入学生成绩 (百分制 ),判断该成绩的等级 (优、良、中、
及格、不及格 )
(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
FontSize = 18
Print Spc(9); "考一考你 "
FontSize = 13
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