程序设计与实践(VB.NET)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

二、分支结构

分支结构又称选择结构,用来解决有选择、有转移的诸多问题。分支结构的特点是:在程序执行时,根据不同的条件选择执行不同的程序语句。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 逻辑操作符