三、三种执行结构

三种执行结构

在前面的代码中,我们的程序会一行一行的往下执行,但在实际工作中,可能会根据不同的条件执行不同的工作,这就要求我们在程序中也能实现这样的操作,于是,通过多年的开发、研究,现在无论哪种语言,都会有三种基本的执行结构,即我们常说的:

l         顺序结构

l         条件结构

l         循环结构

下面我将会使用顺序和循环这两种结构来完成同一种工作。就是计算从1到100累加的和。

 

1 顺序结构

当没有条件转移时,程序会按顺序一行一行执行代码,如果通过通过这个结构来计算1到100的累加,我们当然不能用1+2+3……这种方法,于是我们只有使用小高斯的计算方法了,代码如下(您可以新建一个按钮Command2来执行此项计算):

Private Sub Command2_Click()

    Dim iFrom As Long

    Dim iTo As Long

    Dim sum As Long

    iFrom = 1

    iTo = 100

    sum = (iFrom + iTo) * (iTo / 2)

    MsgBox CStr(sum)

End Sub

我们分别三个整型变量来指定开始数、结束数以及计算结果,计算完成后,使用MsgBox函数将结果显示出来,其中还使用了CStr函数来将结果转成字符串形式。

其实这种方法可以说是毫无意义,在这里,我们只是要显示一下代码的执行顺序,而此类问题最好的也是最明了的解决方案就是使用循环结构。

 

2 循环结构

下面的代码使用循环结构计算1到100的累加,先看一下代码:

Private Sub Command3_Click()

    Dim i As Long

    Dim sum As Long

    sum = 0

    For i = 1 To 100 Step 1

        sum = sum + i

    Next

    MsgBox CStr(sum)

End Sub

下面解释一下代码。

在代码中,我们看到了新的语句:

For 循环控制变量=初值 To 结束值 Step 步长

    循环体代码

Next

其中,For、To、Step和Next为VB6的关键字,这个循环结构的含义就是,使用“循环控制变量”来控制循环的次数(代码中是从1到100共100次),当这个控制变量的值超过结束值时则跳出这个循环而继续执行Next关键字后面的代码;其中“步长”决定每次循环控制变量的变化值,如在代码中我们使用的是1,在VB6中,1是步长的默认值,所以这里我们还可以省略步长,如For语句行我们可以简写成“For i = 1 To 100”。

“循环体代码”是在每次循环中都要执行一遍的一条或多条语句(如果没有语句也可以,但有什么意义呢),在本例中,它将会执行100次,即每次循环时都将已计算的值和当前循环到的i的值相加并保存在变量sum中。

循环完毕后,我们同样将结果转换成字符串并使用MsgBox函数显示出来。

 

VB6中,除了ForNext循环语句以外,还有一种比较常用的循环语句就DoLoop语句,下面我将显示使用这个语句是如何完成1到100的累加,你可以将代码放到一个新的按钮响应代码中:

Private Sub Command4_Click()

    Dim i As Long

    Dim sum As Long

    sum = 0

    i = 1

    Do Until i > 100

        sum = sum + i

        i = i + 1

    Loop

    MsgBox CStr(sum)

End Sub

代码中,Do、Until、Loop是VB6中的关键字。我们可以看到在Until后面就是控制循环的条件,在这里我们可以理解为“直到i大于100后,循环将不再执行”,在循环体代码中,我们同样使用sum变量来累积计算相加的结果,而在每次循环后i都要增加1,这样就确保了循环在计算到100后就会停止,而继续执行Loop语句后面的代码。

在控制循环的条件时,我们使用了关键字Until,而在DoLoop语句中还有一个关键字可以用来控制条件,那就是While,我们可以理解成是当这个条件满足时将执行循环体代码,如上例中的Do语句行可以写成“Do While i<=100”,即是当i小于或等100时将执行循环体内的代码。

 

另外,关于Until和While关键字,它们不但可以放到Do关键字的后面,而且还可以放在Loop关键字的后面,但这样会出现一点小小的不同,它的区别是:

当放在Do关键字后面时,程序会先进行条件的判断,如果满足则执行循环体代码,而如果在一开始条件就不满足,则循环体内的代码一次也不会执行;

当放在Loop关键字后面时,程序会在执行循环体代码后再进行条件的判断,也就是说循环体代码会最少执行一次。

对于Until和While关键字,在开发中可以根据实际需要灵活使用。

 

VB6中,还有一个循环语句,就是WhileWend,它的格式就是:

While 条件

    循环体代码

Wend

它的含义就是当条件满足时,则执行循环体代码,如计算1到100累加使用这个语句就可以写成:

Dim i As Long

Dim sum As Long

sum = 0

i = 1

While i <= 100

sum = sum + i

i = i + 1

Wend

MsgBox CStr(sum)

由于这个语句的功能完成可以使用DoLoop语句来完成,所以在后面我们将只使用ForNext和DoLoop两种循环结构的语句。

 

3 条件结构

为了演示条件结构的使用方法,我们将在Form1窗体上添加四个单选控件(OptionButton),分别为Option1、Option2、Option3和Option4,然后分别将它的Caption属性依次设为“加”、“减”、“乘”和“除”。

界面设计完成后,我们将Command1的原响应代码变为注释,然后编写如下代码(这里我只列出新的代码,在后面示例中所列出的代码也都采取此原则):

Private Sub Command1_Click()

    Dim n1 As Currency

    Dim n2 As Currency

    Dim result As Currency

    n1 = CCur(Text1.Text)

    n2 = CCur(Text2.Text)

    If Option1.Value = True Then

        result = n1 + n2

    ElseIf Option2.Value = True Then

        result = n1 - n2

    ElseIf Option3.Value = True Then

        result = n1 * n2

    ElseIf Option4.Value = True Then

        result = n1 / n2

    Else

        MsgBox "没有选择计算方法!"

        Exit Sub

    End If

    Text3.Text = CStr(result)

End Sub

运行程序,在Text1和Text2中分别输入数值,然后单击Command1看看有什么结果?

如果你没有选择运行方法,会出现一个提示;如果你选择了任一一个运行方法,在Text3中则会显示计算结果,在这里暂时请大家输入正确的数值,并且不在在Text2中输入“0”,因为当选择除法时,除数是不能为0的。

下面我们来看看代码中都有哪些新的知识。

首先,在代码中我们又看到了几个新的关键字,它们是If、Then、ElseIf和End If,这几个关键字就是这里的主角——条件结构语句的关键字。它的基本格式是:

If 条件1 Then

    代码块1

[ElseIf 条件2 Then]

    [代码块2]

……

[Else]

    [代码块n]

  End If

其中,使用中括号的部分为可选项,也就是在实际使用时可能没有的部分。If语句的含义就是,当条件1满足时将执行代码块1,完成后继续执行End If后面的代码;否则判断条件2(如果没当然就不同判断了),满足时执行代码块2,完成后执行End If后面的代码;依此类推,当判断完所有的ElseIf语句并且没有满足的条件时,程序会执行代码块n(没有则不执行),然后会继续执行End If语句后面的代码。

在上例的代码中,当没有选择运算符时,程序会给出提示后终止事件代码的执行并退出事件响应,这里使用了“Exit Sub”语句来退出所在的响应事件的子程序。关于这个子程序和事件之间的联系在这里就不详细说明了,在后面的学习中我们会慢慢了解这种机制。

这里使用的MsgBox函数,没有带一个变量或函数返回值做为参数,而是直接跟了一个字符串,我们可以看到,在VB6中字符串是要使用双引号包含起来的。

 

一个最简单的If语句会是以下形式:

If 条件 Then

    [代码块]

End If

即,当条件满足时执行代码块。

 

VB6中,还有一种条件语句,有时我们称其选择语句,它就是SelectCase语句,为了测试它,请在Form1窗口中添加一新的文本框Text4,然后在Command1的响应事件中编写如下代码:

Private Sub Command1_Click()

    Dim n1 As Currency

    Dim n2 As Currency

    Dim result As Currency

    n1 = CCur(Text1.Text)

    n2 = CCur(Text2.Text)

    Select Case Text4.Text

        Case "+"

            result = n1 + n2

        Case "-"

            result = n1 - n2

        Case "*"

            result = n1 * n2

        Case "/"

            result = n1 / n2

        Case Else

            MsgBox "没有输入正确的运行符!"

            Text4.SetFocus

            Exit Sub

    End Select

    Text3.Text = CStr(result)

End Sub

运行程序,然后不要忘了在Text1和Text2中分别输入一个数值,这时你可以在Text4中输入“+”、“-”、“*”、“/”或是其它字符,当然也可以空着,这时可以单击Command1按钮,看看运行的结果如何,和If语句相似,如果您输入的不是四则运算中的一个,则给出相应的提示,并使用Text4的SetFocus方法将输入的焦点设置到自己上面,然后退出所在的事件响应子程序。

从代码中,我们可以看到SelectCase语句的基本格式就是:

Select 变量

    Case 值1

        代码块1

    [Case 值2]

        [代码块2]

    ……

    [Case Else]

        [代码块n]

End Select

在这里,中括号中的内容也是可以省略的,其中Select、Case、Case Else、End Select为关键字,用于表示这种语句的结构。“变量”则为要判断值的变量标识符或一个表达式,然后每一个Case语句后面都是一个可能的值(这里是字符串,所以使用双引号包含起来,如果是数值则不需要双引号),当“变量”的值与Case后面的值相同时,则执行相应的代码块,然后继续执行End Select语句后面的代码;如果没有匹配的值,则执行Case Else后面的代码块n,如果没有则不执行,然后继续执行End Select后面的代码。

 

在实际应用中,SelectCase和IfThenEnd If语句还是有区别的:

判断一个变量的多个值时,一般使用SelectCase语句;

要判断多个变量的值时,一般采用IfThenEnd If语句。

 

下一章,我们将学习如何创建自己方法(自定义子程序和函数)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值