选择结构设计 第 4 章
选择结构程序设计 1.单行结构条件语句(单分支结构) If <表达式> Then <语句> 语句块 End If ①当条件表达式的值为真时,执行Then后的语句,否则,不执行任何操作。 ②表达式为逻辑表达式,数值表达式和关系表达式视为逻辑表达式的特例。 ③语句块可以是一条或多条语句。 ④可以使用单行或多行语法有条件地执行一个语句。
⑴ If anyDate<Now Then anyDate=Now End If ⑤If…Then的单行格式不用End If语句。 例3.5
2.双分支结构条件语句: ①If <条件> Then <语句块1> Else <语句块2> End If ②If <条件>Then<语句1>Else<语句2> 当表达式值为非零时,执行Then后的语句1(或语句1)否则执行Else后面的语句块2(或语句2)。 说明:块结构的条件语句可以嵌套,即把一个If…Then..Elsef块放在另一个If…Then..Elsef块内,嵌套必须完全嵌套,也就是内层条件语句必须完全包含在外层条件语句之中。 例3.6 --3.7
3.If…Then…ElseIf(多分支结构) <语句块1> ElseIf<表达式2>Then <语句块2> …… [Else <语句块n+1 > ] End If 执行过程为:如果表达式1为真,执行语句块1,否则,如果表达式2为真,则执行语句块2,如果条件都不是真,则执行Else后的语句块。
说明: ①不管有几个分支,程序执行了一个分支后,其余分支不再进行。 ②ElseIf子句的数量没有限制,可以根据需要使用任意多个ElseIf子句。 ③语句中的ElseIf子句和Else子句者是可选项,如果省略这些子句,则成为单分支结构。 ④ If…Then…ElseIf只是 If…Then…Else的一个特例。可以使用任意数量的ElseIf子句,或者一个也不用。可以有一个Else子句,而不管有没有ElseIf子句。 例3.8—3.9
Private Sub Form_Click() Dim a As Single, b As Single, c As Single Dim p As Single, s As Single Text1.Text = "" : Text2.Text = "" : Text3.Text = "" a = val(Text1) : b = val(Text2) t :c = val(Text3) t If a+b>c and b+c>a and a+c>b then p = (a + b + c) / 2 s = Sqr(p * (p - a) * (p - b) * (p - c)) Else print “它不能构成一个三角形” End If End Sub
如果满足条件CJ<60时,打印出“成绩不及格”,采用的条件语句是: If CJ<60 Then Print "成绩不及格" 编写一个统计学生考试成绩的程序: 如果满足条件CJ<60时,打印出“成绩不及格”,采用的条件语句是: If CJ<60 Then Print "成绩不及格" 多行代码: If CJ<60 Then Print "成绩不及格“ Print "请准备补考" End If
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 End If End Sub
4. Select Case选择结构(多分支结构) [语句块1]] [Case 表达式表2 [语句块2]] …… [Case 表达式表n [语句块n]] [Case 表达式表n+1 [语句块n+1]] End Select
① Select Case在结构的上方处理一个测试变量或表达式,并且只计算一次,然后根据测试变量或表达式的值,从多个语句块中选择符合条件(值相等)的一个语句块执行,之后自动转到End Select 后的语句执行;如果没有找到与Case 子句中的表达式相匹配的值,则执行Case Else子句后面的语句块,然后转到End Select 后的语句执行。 ②测试变量或表达式只能是数值表达式或字符串表达式,不能是逻辑表达式。 ③语句块由一行或多行语句组成。 ④表达式表与测试变量或表达式的类型必须相同,每一个表达式是一个或几个值的列表。如果在一个列表中有多个值,用逗号分隔。
一个表达式: Case 6 一组枚举表达式: Case 1,3,5,7 Case “I”,“YOU”,“Then” 表达式1To表达式2。该形式指定某个数值范围,较小的数值在前面,较大的数值在后面:字符串常量则按字母的ASCII码顺序从低到高排列。 Case 1 To 10 Case “a” To “e”
Is<关系运算符><表达式>。 Case Is>=80 Case Is<>”Y” ⑤当有多个Case 子句的取值范围和测试表达式的值相符时,只执行符合要求的第一个Case子句后面的语句块。 ⑥ Select Case语句只对单个表达式求值,并根据求值结果执行不同的语句块;而If…Then…Else语句可以对不同的表达式求值,然而招待不同的操作。
(1)一组值(用逗号隔开)。示例: 表达式表通常是一个具体值(如Case 1),每一个值确定一个分支。还有三种方法可以确定设定值: (2)表达式1 TO 表达式2。示例: Case 60 To 80 ′表示条件取值范围为60~80 (3)Is关系式。示例: Case Is<5 ′表示条件在小于5范围取值
当用户单击“答题”按钮时,程序提供输入对话框,由用户输入答案,再通过输出框显示评判意见。采用的程序代码如下: Private Sub Form_Load() Show Print 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
1. Timer控件 2. 常用属性 3. 事件 Enabled属性:确定计时器是否可用 Interval属性:设置两个Timer事件之间的时间间隔,其值以毫秒(1ms=1/1000 s)为单位 例如,如果希望每半秒钟产生一个Timer事件,那么Interval属性值应设置为500,这样每隔500 ms就会触发一次Timer事件,从而执行相应的Timer事件过程 3. 事件 计时器控件只响应一个Timer事件。也就是说,计时器控件对象在间隔了一个Interval设定时间后,便触发一次Timer事件
(2)编写程序代码 (1)编写一个程序,要在文本框中显示时间 Private Sub Timer1_Timer() 'timer事件过程 Text1.Text = Time 'Time是时间函数 End Sub
例4.13 输入两个运算数和运算符(+、-、*或/),组 成算式并计算结果,然后显示出来 例4.13 输入两个运算数和运算符(+、-、*或/),组 成算式并计算结果,然后显示出来 (1)创建应用程序的用户界面和设置对象属性 单选按钮组Option1、Option2、Option3及Option4分别代表+、-、*(乘)和/(除)运算 (2)编写程序代码
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 Form_Load() Option1.Value = True + 运算 End Sub Private Sub Command2_Click() Text1.Text = "" Text2.Text = "" Text3.Text = "" End Sub Private Sub Command3_Click() Unload Me
程序框图 假 真 开始 输入a, b, c a = 0 输出“不是二次方程” D=b*b – 4*a*c R=-b / (2*a) 输出两实根 -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) 结束 程序框图
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 Sub