配色: 字号:
《Visual Basic程序设计教程(第3版)》第4章 选择结构程序设计
2023-05-25 | 阅:  转:  |  分享 
  
本章主要内容 第4章 选择结构程序设计退出 选择
程序结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程 4.1 条件表达式 示
例 If x = 5 Then y = x + 1 If a>1 An
d b<>0 Then x = 1 4.2 If语句(也称条件语句) 两种格式的If语句:
If ... Then If ... Then ... Else选择结构程序设计关系表达
式逻辑表达式 格式: If 条件 Then 语句组 或 If 条件 Then
语句组 End If 功能:若条件成立(值为真),则执行Then后面的语
句组,否则直接执行下一条语句或“End If”的下一条语句 4.2.1 单分支If语句 (If...Then)多行(块)结构单行
结构正例: If a < 12 Then y=2正例: If a < 12 Then
y=2 End If错例:If a < 12 Then y=2
End If 格式: If 条件 Then
语句组1 Else 语句组2
End If 功能:首先测试条件(E),如果条件成立(即值为真),
则执行Then后面的语句组1,如果条件不成立(即值为假),则执行Else后面的语句组2。而在执行Then或Else之后的语句组后,
会从End If之后的语句继续执行。 4.2.2 双分支If语句(If...Then...Else) 实现一些简单
的条件判断分支结构 格式: IIf(条件,条件为真时的值,条件为假时的值)
功能:对条件进行测试,若条件成立(为真值),则取第一个值(即“条件为真时的值”),否则取第二个值(即“条件为假时的值”)。
例如,将a、b中的小数,放入Min变量中: Min=IIf(a<
b,a,b)4.2.3 IIf函数 1. 下列字符中,____字符最大,____字符最小。 A. 1
B. Z C. D. a 2. 假设a=1,b=
2,下列逻辑表达式中其值为真的有 A. a<=0
B. a>=0 And b>2 C. a<=0
Or "b"> "ab" D. a>=0 And Not b<2 E. 2a=-
b Or a>0 And b>0 请你给出答案思考题最大字符:D最小字符:CFF
TTTPrivate Sub Form_Load() Show a = 1: b = 3
c = 2 a - b a = IIf(c < a, a - 1, b) + 1 If a
2 - 1 <= 10 Then b = 2 b + c If 3 b > a Then
a = a + 1 c = c - 1 Else a = a
- 1 End If Print a, b, cEnd Sub 下列程
序的运行结果是?思考题2 5 -2例4.1a (1)创建应用程序的用户界面和设置对象属性 (2
)编写程序代码 功能要求:用户在“a=”文本框(Text1)、“b=”文本框(Text2)和“c=”文本框(T
ext3)中输入数据,单击“判断”按钮后,则在“最大数=”文本框(Text4)中输出结果 例4.2 输入
三个数a、b、c,求出其中最大数例4.2 Private Sub Command1_Click()
''m用来存放较大值 Dim a As Integer, b As I
nteger Dim c As Integer, m As Integer
a = Val(Text1.Text) b = Val(Text2.
Text) c = Val(Text3.Text) I
f a > b Then m = a
Else m = b En
d If If c > m Then m = c Text
4.Text = m End Sub 程序代码
程序流程图 Then和Else后面的语句组包含另一个条件语句 1.一般格式 If
条件1 Then If 条件2 Then
… End If Else
… End If 使用条件语句嵌套时,一定要注意If与Else,If与End If的
配对关系。 4.2.4 If语句的嵌套 例如:0时至12时,显示“早上好” 利用窗体装载
(Load)事件,采用Print直接在窗体上输出结果 Private Sub Form_Load()
Dim h As Integer Show
''使print输出在窗体上的内容可见 h = Ho
ur(Time()) ''取系统的时间 Font
Size = 30 : ForeColor = RGB(255, 0, 0) BackColor
= RGB(255, 255, 0) If h < 12 Then
Print "早上好!" Else
If h < 18 Then Print "下午好!
" Else Pri
nt "晚上好!" End If End If
End Sub例4.3 根据不同的时间段发出问候语例4.3 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 Th
en Print "早上好!" ElseIf h < 18 Then Prin
t "下午好!" Else Print "晚上好!" End If
2. ElseIf格式Private Sub Form_Load() Show a = 1: b
= 3 If a 4 - 1 >= b Then If b > 5 Then b = b +
1 ElseIf b > 2 Then b = b - 1 Else
b = b + 2 End If b = IIf(a = b, b + 1, b - 1) Pr
int bEnd Sub 下列程序的运行结果是?思考题 2例4.3a 使
用多分支语句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 多分支语句 示例Select Case
x Case -1 y=10 Case 1 y=20
Case Else y=30End Select用Select Case语句来实现多分支选
择功能, 程序代码如下: Private Sub Command1_Click() Dim
score As Integer, temp As String score = Val(Text1.Tex
t) temp = "成绩等级为:" Select Case score
Case 0 To 59 Label2.Caption = temp +
"不及格" Case 60 To 79 Label2.
Caption = temp + "及格"      Case 80 To 100
Label2.Caption = temp + “优良" Case Else
Label2.Caption = "成绩出错" End Select
End Sub例4.4 判断成绩的等级(优良、及格、不及格)例4.4 提供选项让用户选择,如选择“是”或“否
”,从列表中选择某一项等 选择的控件有: 单选按钮、复选框、列表框和组合框 4.4
选择性控件 1. 单选按钮的用途 单选按钮(OptionButton)控件由一个圆圈“○
”及紧挨它的文字组成,能提供“选中”和“未选中”两种可选项 成组形式出现 2. 常用属性
Caption属性 Value属性:表示单选按钮是否被选中,选中时Value值为Tru
e,否则为False。 使用单选按钮组时,选中其中一个,其余就会自动关闭 Alignment属
性:设置单选按钮标题的对齐方式 3. 事件 Click事件 在应用程序中可以
创建一个事件过程,检测控件对象Value属性值,再根据检测结果执行相应的处理 4.4.1 单选按钮 (1) 创建应用程
序的用户界面和设置对象属性 单选按钮组; 初始状态:设置Option1的Val
ue属性值设置为True,或通过代码“Option1.Value=True” 来实现 (2) 编写程序代码
功能要求 例4.5 用单选按钮组控制显示不同的字体例4.5 程序代码如下:
Private Sub Option1_Click()
Text1.FontName = "宋体" End Sub Priva
te 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.6 用复选框来控制文字的字体、字型、字号及颜色例4.6Private Sub Check
1_Click() If Check1.Value = 1 Then
''判复选框1是否选中 Text1.FontName = "楷体_GB2312" Els
e Text1.FontName = "宋体" End IfEnd SubPrivate
Sub Check2_Click() If Check2.Value = 1 Then
''判复选框2是否选中 Text1.FontItalic = True
Else Text1.FontItalic = False End IfEnd
SubPrivate Sub Check3_Click() If Check3.Value = 1 The
n ''判复选框3是否选中 Text1.FontSize = 2
5 Else Text1.FontSize = 9 End IfEnd S
ub Private Sub Check4_Click() If Check4.Val
ue = 1 Then ''判复选框4是否选中 T
ext1.ForeColor = RGB(255, 0, 0) Else
Text1.ForeColor = RGB(0, 0, 0) End If
End Sub 在运行中,可以任意设定这四个复选框的状态,可以四项都不选
,也可以选择其中一项至四项 计时器(Timer)每隔一定的时间间隔自动产生一次Timer事件(或称报时),可以根据这个
特性来定时控制某些操作,或计时 运行时计时器不显示 Enabled属性:确定计时器是否可
用 Interval属性:设置两个Timer事件之间的时间间隔,其值以毫秒(1ms=1/10
00 s)为单位 计时器控件只响应一个Timer事件。也就是说,计时器控件对象在间隔了一个Interval设定时间
后,便触发一次Timer事件 4.5 计时器控件例4.7 建立一个电子时钟 (1) 创建应用程序的用户界面和设置
对象属性 一个计时器控件和一个文本框。计时器控件Timer1的Interval属性值设定为1000(1秒)
(2) 编写程序代码 Private Sub Timer1_Timer() ''timer事件过
程 Text1.Text = Time() ''Time是时间函数
End Sub例4.7运行界面设计界面 计时器(Timer)每隔一定的时间间隔自动产生一次Timer事件和执行Timer事件
过程 这个时间间隔由Interval属性设定 利用这个特性来定时控制某些操作 例4.8 实现字体的放大 利
用计时器可以按指定间隔时间对字体进行放大 (1)创建应用程序的用户界面和设置对象属性
一个计时器控件和一个标签 。 标签内显示文字“放大” 计时器控件Timer1的计时器采用默认的属性值
Enabled属性值为True(真),Interval属性值为0例4.8 (2)编写程序代码
Private Sub Form_Load() Label1.Caption = "放大"
Label1.Width = Form1.Width ''把标签的高度和宽度

''设置为窗体相同尺寸 La
bel1.Height = Form1.Height Timer1.Interval = 800
End Sub Private Sub Timer1_Timer() If
Label1.FontSize < 140 Then Label1.FontSize
= Label1.FontSize 1.2 Else La
bel1.FontSize = 8 End If End Sub 例4.9
电子倒计时器。先由用户给定倒计时的初始分秒数,然后开始倒计时,每隔1秒,时间值(总秒数)减1,直到时间值为0,停止倒计时。
计时器的Enabled属性值为True, Interval属性值为0 4.6 程序举例例4.
9 (2)编写程序代码 Dim t As Integer ''
在窗体模块的声明段中声明模块级变量 Private Sub Form_Load() Timer1.Int
erval = 1000 ''设置每隔1秒触发1次Timer事件 Timer1.Enabled
= False ''关闭计时器 End Sub Private Sub Command1_
Click() ''“倒计时” t = Val(Text1.Text) 60 + Val(Text
2.Text) If t = 0 Then MsgBox "请输入倒计时的初始时间"
Exit Sub ‘退出过
程 End If Timer1.Enabled = True ''打开计时器
End SubPrivate Sub Timer1_Timer() ''每隔1秒自动执行一次
Dim m As Integer, s As Integer t = t - 1 m = t \
60 ''分钟数 s = t Mod 60
''秒数 Text1.Text = Format(m, "00") Text2.Text =
Format(s, "00") If t = 0 Then Timer1.Enable
d = False ''关闭计时器 MsgBox "倒计时时间到!!" End If
End Sub 先在窗体上显示以下考题: 鸡兔同笼,已知鸡和兔总头数为h=23,总脚数为f=56
,求鸡兔各有多少只? 再提供输入框由学生回答问题,然后采用输出框显示对答案的评判意见。
分析:设鸡数为j1,兔鸡数为t1,则有 j1 + t1
= h j1 = (4 h - f) /
2 2j1 + 4t1 = f
t1 = (f - 2 h) / 2 例4.10 求鸡数和兔数例
4.10 当用户单击“答题”按钮时,程序提供输入对话框,由用户输入答案,再通过输出框显示评判意见。采用的程序代码如
下: 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 MsgBo
x "兔数回答正确,但鸡数不对!" Case Else
MsgBox "回答错误!" End Selec
t End Sub (1)分析:不管哪一年,1、3、5、7、8、10、12月份都有31天;4、6、9、11
月份都有30天;而对2月份则要看是否是闰年,若是闰年有29天,平年有28天。 判断某一年是否闰年的逻辑表达式请见例4.
1。 例4.11 输入一个月份,输出该月份有多少天例4.11Private Sub Command1_Click()
‘“输出”按钮 Dim y As Integer, m As Int
eger, d As Integer y = Val(Text1.Text) m = Val(Text2.Text)
Select Case m Case 1, 3, 5, 7, 8, 10, 12 d = 3
1 Case 4, 6, 9, 11 d = 30 Case 2
If (y Mod 4 = 0 And y Mod 100 <> 0) Or (y Mod 400 = 0) Then
d = 29 ''闰年的2月有29天
Else d = 28 ''
平年的2月有28天 End If Case Else Text3.Text =
"非法月份!!" Exit Sub ''
退出过程 End Select Text3.Text = dEnd Sub (1)分析:方程的解有以下几种可能
: 若a=0,不是二次方程 若b2 - 4ac=0,有两个相等实根
若b2 - 4ac>0,有两个不等实根 若b2 - 4ac<0,有
两个共轭复根 (2)程序框图程序框图 程序框图也称程序流程图,它能直观地表示程序的处理步骤,是一种描述
算法的常用方法。 (3)建立应用程序的用户界面和设置对象属性 (4)编写程序代码附加题 求一元二次方程ax2+bx+c
=0的解 程序框图 当用户在“a=”文本框(Text1)、“b=”文本框(Text2)和“c=”文本框
(Text3)输入a,b,c的值后,单击“计算”按钮,则从“x1=”文本框(Text4)和“x2=”文本框(Text5)输出计算结
果。 当输入的a,b,c为1,2,-8时,运行结果如下图 解题要求 Private Sub Command
1_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 例4.12
献花(0)
+1
(本文系大高老师原创)