二、分支结构
分支结构又称选择结构,用来解决有选择、有转移的诸多问题。分支结构的特点是:在程序执行时,根据不同的条件选择执行不同的程序语句。Visual Basic.NET中提供了多种形式的条件语句来实现分支结构。
1.If条件语句
If条件语句有多种形式:单分支、双分支和多分支等。
单分支If…Then条件语句的作用是:当表达式的值为True或非零时,执行Then后面的语句块,否则执行End If语句后面的语句。
If…Then语句的一般形式为:
(1)If <条件表达式> Then <语句>
(2)If <条件表达式> Then
<语句块>
End If
其中:条件表达式是一个关系表达式或逻辑表达式。语句块可以是一条或多条语句。
单分支结构流程图如图3-4所示。
图3-4 单分支结构流程图
提示:若用形式(2)单行简单的形式表示,则Then后面只能是一条语句。若要写几条语句,应使用冒号分隔,并且几条语句必须写在同一行上。
双分支If…Then…Else语句的作用是:当条件表达式的值为True或非零时,执行Then后面的语句块1(或语句1),否则执行Else后面的语句块2(或语句2)。
If…Then…Else语句的一般形式有如下两种。
(1)If <条件表达式> Then
<语句块1> Else <语句块2> End If
(2)If <条件表达式> Then <语句1> Else <语句2>
双分支结构流程图如图3-5所示。
图3-5 双分支结构流程图
例如,输入一个年份,判断它是否为闰年,并显示有关信息。界面如图3-6所示。
图3-6 判断闰年程序界面
编程如下。
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load Dim yAs Integer y = Val(InputBox("请输入年份")) Label1.Text = "输入的年份是:" & y & "年" If y Mod 400 = 0 Or(y Mod 4 = 0 And y Mod 100 <> 0)Then Label2.Text = "经判断:" & y & "年是闰年" Else Label2.Text = "经判断:" & y & "年不是闰年" End If End Sub End Class
多分支If…Then…ElseIf语句的作用是:根据不同的条件表达式值确定执行哪个语句块。Visual Basic测试条件的顺序为表达式1、表达式2、……一旦遇到表达式值为True,则执行该条件下的语句块。
If…Then…ElseIf语句的一般形式为:
If <条件表达式1> Then <语句块1> ElseIf <条件表达式2> Then <语句块2> …… [Else <语句块n+1>] End If
多分支结构流程图如图3-7所示。
图3-7 多分支流程图
提示
① 不管有几个分支,依次判断当某条件满足,执行相应的语句块,其余分支不再执行。
② ElseIf不能写成Else If。
③ 当多分支中有多个表达式同时满足时,则只执行第一个与之匹配的语句块。因此
要注意对多分支表达式的书写次序,防止某些值被过滤掉。例如,以下程序段:
If mark >= 60 Then Label1.Text = "及格" ElseIf mark >= 70 Then Label1.Text = "中" ElseIf mark >= 80 Then Label1.Text = "良" ElseIf mark >= 90 Then Label1.Text = "优" Else Label1.Text = "不及格" End If
执行后只有两种结果:“及格”和“不及格”。
If语句的嵌套是指If或Else后面的语句块中又包含If语句。语句形式如下:
If <条件表达式1> Then If <条件表达式11> Then …… End If …… End If
如下代码:
If sum = 0 Then Label2.Text = "输入错误,请重新输入!" Else Label2.Text = "输入数的各位和是:" & sum If sum Mod 3 = 0 Then MsgBox(x & "是的倍数!") Else MsgBox(x & "不是的倍数!") End If End If
这就是if嵌套的情形:sum为零时要求重新输入,否则判断sum是否为3的倍数,从而判断输入的数是否为3的倍数。
IIf函数可用来控制简单的分支操作,它是If…Then…Else语句结构的另一种形式。
IIf函数一般形式为:
IIf(<表达式1>,<表达式2>,<表达式3>)
IIf函数的作用是:先计算<表达式1>的值,当<表达式1>的值为True时,返回执行<表达式2>的结果;否则,返回执行<表达式3>的结果。
提示
① <表达式1>必须是关系表达式或逻辑表达式。
② <表达式2>和<表达式3>可以是任意表达式。
例如:将x,y中较大的数存入Max变量中的语句为:
Max = IIf(x > y,x,y)
2.Select Case语句
在实际应用中,对于多分支结构可使用Select Case语句。Select Case语句又称情况语句,是多分支结构的另一种表示形式。
Select Case语句的作用是:先对<表达式>求值,然后测试该值与哪个Case子句中的表达式列表相匹配。如果找到了匹配,则执行与该Case子句下面的语句块,并把控制转移到End Select后面的语句;如果没有找到,则执行与Case Else子句有关的语句块,然后把控制转移到End Select后面的语句。
这种语句条件能够直观地表示,但书写时必须符合其规定的语法规则。
Select Case语句一般形式为:
Select Case <表达式> Case <表达式列表1> <语句块1> Case <表达式列表2> <语句块2> …… [Case Else <语句块n+1>] End Select
其中:<表达式>可以是数值型或字符串表达式。后面的<表达式列表>与<表达式>的类型必须相同,可以是下面四种形式之一:
(1)<表达式>,例:"A"
(2)一组用逗号分隔的枚举值,例:2,4,6,8
(3)<表达式1> To <表达式2>,例: 60 To 100
(4)Is<关系运算符><表达式>,例: Is < 60
提示
① Select Case后面的表达式中不能出现多个表达式。
② 表达式列表中不能出现变量及运算符。
例如,编程实现简易四则运算计算器:输入两个操作数,选取相应的操作,得到运算结果。程序实现界面如图3-8所示。
图3-8 简易计算器程序界面
程序代码如下。
Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button2.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Button1.Click Dim s As Double Select Case ComboBox1.Text Case "+" s = Val(TextBox1.Text)+ Val(TextBox2.Text) Case "-" s = Val(TextBox1.Text)- Val(TextBox2.Text) Case "*" s = Val(TextBox1.Text)* Val(TextBox1.Text) Case "/" s = Val(TextBox1.Text)/ Val(TextBox2.Text) Case "mod" s = Val(TextBox1.Text)Mod Val(TextBox2.Text) End Select Label2.Text = Str(s) End Sub End Class
3.条件
分支结构的判定是基于条件的,语句中的条件是使用比较操作符得到的。比较操作符见表3-3,比较的结果为True或False。
表3-3 比较操作符
在实际运算中还会用到逻辑操作符。使用逻辑操作符可以判定一个以上的条件。逻辑操作符有Or、And、Not、AndAlso、OrElse和Xor。如表3-4所示。
表3-4 逻辑操作符