本章主要内容 第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 |
|