分享

三种基本结构语句

 行善者书 2013-06-17

VB的源程序是由语句组成的,同其它高级编程语言一样,VB的语句也可以分为可执行语句和非可执行语句。可执行语句是指在程序运行时执行了某种操作的浯句,它往往以某种方式控制程序的执行顺序。非可执行语句是指不执行某种具体操作具有说明性的语句,一般主要是定义常量、变量等说明性的语句。

    我们所要进行的程序设计属于过程化、结构化、程序设计。结构化的程序设计包含三种基本结构:顺序结构、选择结构和循环结构。

     顺序结构:
    顺序结构就是指程序按照语句的先后顺序一条一条地执行。使用这种结构只需要将合法语句按照合理的执行顺序排列好,即可—一执行。

     选择结构:
    选择结构是指程序运行到某处时要根据不同的情况做出不同的选择、执行不同的操作。此时就需要对某个条件做出判断,这个条件一般是布尔型的表达式,根据该表达式的值来决定该执行相应的何种操作。

    一、If语句
If语句是非常重要的选择结构语句,几乎在所有的高级编程语言中都存在着If语句,它的主要作用是:根据条件的成立与否来确定程序的流向(即执行哪一段程序代码)。
   
    If语句使用时有如下两种格式:
    (1)简单格式:这种格式在对条件进行判断后,根据所得的结果进行相应的操作。不管其条件是真是假,操作部分都必须是单个语句。具体格式如下:
    If条件Then语句1 Else语句2

    其中的条件一般为布尔型表达式,其值只有真或假两种情况。所谓条件成立,是指该表达式的值为真(True);而条件不成立,是指该表达式的值为假(False)。
此格式所代表的含义是:当条件成立时,执行Then后面的语句1,之后再执行整个If语习后的语句;当条件不成立时,若存在Else部分,则执行Else后的语句2,否则就直接执行整个If语句后的浯句。

    当只需要判断一种情况时,其中的Else部分是可以省略的。这种格式适用于只需判断一种或两种情况,且执行相应的操作都比较简单。

    (2)复杂格式:这种格式的1f语句,不管条件成立与否,所执行的操作均可以是一条语句或多条语句。具体格式如下:
    If 条件Then
       语句体1
    [Else
       语句体2]
    Endif

    其中的语句体1和语句体2均为一个整体,既可以是单个语句也可以是多个语句。若为多语句,则这多个语句分别写在多行内。

    这种格式代表的含义是:若条件成立时,执行Then后面的语句体l中的全部语句,执行后跳出整个If语句体,执行其后的语句;若条件不成立,如果Else部分存在,则执行Else的语句体2中的全部语句,再执行整个If语句体后的语句,否则就直接执行整个If语{的语句。与简单格式一样,复杂格式中的Else部分也是可以省略的。

    另外,复杂格式也可以判断出现多种情况的可能。只需在将“Else替换成“Else件Then'’就可以多进行一层判断,它的含义是:当前一个条件不成立时,再判断这里的根据条件的成立与否来执行相应的操作。在If语句中可以多次出现“Elself",且“Else”是和与它最接近的“Elself”相对应。

    现在举几个例子,以帮助大家理解。
① If a>b Then MsgBox a Else MsgBox b

② If a<b Then
a =b
b=c
End lf

③ If x<60 Then
MsgBox “不及格”
Elself x<90 Then
MsgBox “及格”
Else
MsgBox “优秀”
End lf

    例①是简单格式,它的含义是:比较a、b的大小,然后输出比较大的一个

    例②复杂格式,它的含义是:对a、b两个数进行排序,如果a小于b,则交换它们的值,否则改变,执行这个IF语句后,a一定大于或等于b。

    例③中出现了三种情况,首先判断成否小于60,如果小于60,则这个人的成绩是不及格的,于是输出“不及格”;否则,再对个条件进行判断,如果成绩小于90,则这个人的成绩是及格,否则的话就是优秀。在这里注意,这两个条件的顺序不是随意的,只有前一个条件不成立的情况下才会判断第二个条件一个条件成立,执行过相应的语句体后就会直接执行If语句后面的语句。

    二、 Select Case语句
    如果分支多的话还可能出现错误,用了过多的Else后你会感到很不方便,而且程序结构也不清晰。因此,需要一种能处理多分支的语,而SelectCase就是这样的语句。在SelectCase语句中,有一个用于判断的表达式,根据此表达式的不同结果,执行不同 SelectCase表达式的结果进行判断,然后再执行不同的操作。

VB的Select语句的格式是:
Select Case <表达式>
Case <表达式结果表列1>
<语句组1>
Case <表达式结果表列2>
<语句组2>
……
Case <表达式结果表列n>
<语句值n>
Case Else
<语句组n+1>
End Select

    只要使用时结构合理,其中的“Case表达式结果表列”可以为任意多个。

    上述格式中,表达式可以是数值表达式或字符串表达式,然后根据表达式的值与下面的第一个“表达式结果表列”去进行比较,若与其中某个值相同,则执行该表列后的相应语句体部分,执行后退出整个 Select Case结构,执行其后的语句;若第一个“表达式结果表列”中的值没有与表达式的值相等的情况,则再与第二个“表达式结果表列”进行比较,如果表达式的值与所有的“表达式结果表列”中的值都不相等,则要看Select Case结构中是否有Case Else子句,如果有此子句,则执行其后相应的语句体部分,然后退出Select Case结构,执行其后的语句,否则不执行该结构内的任何语句,整个SelectCase结构结束,再执行其后的语句。

    SelectCase语句一般格式中的“表达式结果表列”可以有如下四种格式:

    (1)Case表达式结果:
    这种格式中,“表达式结果表列’’中只有一个数值或字符串与表达式的值进行比较。例如Case 1、Case “char”

    (2)case表达式结果1[表达式结果2]…?[,表达式结果n];
     这种格式在“表达式结果表列”中有多个数值或字符串供与表达式的值进行比较,这多、数值或字符串之间用逗号分隔。如果表达式的值与这多个数值或字符串中的一个相等,即可行此“表达式结果表列”后相应的语句体部分;否则,若表达式的值与这多个值均不相等,则需再与其它Case后的“表达式结果表列”进行比较。例如:Case 1,3,5,7,9。

    (3)Case表达式结果1 TO表达式结果2
    这种格式在“表达式结果表列”中提供了一个数值或字符串的取值范围,可以将此范围的所有取值与表达式的值进行比较。要求表达式结果l的值必须小于表达式结果2的值,这才能提供一个合法的范围。如果表达式的值与此范围内的某个值相等,则可执行此“表达式果表列”后的相应语句体部分;否则,若表达式的值与这个取值范围内的值均不相等,则需要与其后的“表达式结果表列”进行比较。例如:Case 10 TO 30。

    (4)case ls关系运算符 数值或字符串:
    这种格式使用了关键字“Is”,这里的“Is”表示的是表达式的值。“Is”后面只能使用种关系运算符:“=”、“<”、“>”、“<=”、“>=,’和“<>”等。可以将表达式的值与关系运算符后的数值或字符串进行关系比较,检验是否满足该关系运算符。若满足,则执行此“表达式结果表列”表后的相应语句体部分;否则,则需再与其后的“表达式结果表列”进行比较。

下面的例子说明Select Case语句
Select Case x
Case 100
Msgbox “满分”
Case 99,98,97,96,95,94,93,92,91
Msgbox “优秀”
Case 60 tO 90
Msgbox “及格”
Case ls<60
Msgbox “不及格”
End Select

    在这个例子中,根据变量、的值来判断输出结果。当输入的成绩是100时,就会与第一个表达式结果表列”表中的100相等,这时就会输出“满分”:如果是99至91之间的数,就会喻出“优秀”;如果是在60至90之间,则会输出“及格”;如果小于60,则会输出“不及格”。

    在使用Select Case语句时,要注意各个Case子句的“表达式结果表列”表中的值不要出现交叉或相容的的情况。

     循环结构:
    循环结构是指在执行程序时,根据条件的真假,来判断是否重复执行其中某段代码。要满足某个条件,就一直重复执行这段代码,直到不满足条件为止。 Selectcase属于选择结构的语句;For……Next、For Each……Next、Do……loop、while…… Wend则是循环结构的语句。

    三、For……Next语句有时我们需要在程序中重复执行某段代码,这就需要用到循环浯句。其中,For…Next语可是最常用的一种循环语句。

    For…Next循环属于计数型循环,程序按照该结构中指定的循环次数来执行循环体部分。 Or……Next语句的格式如下:

    For循环变量=初始值 TO终值[Step步长]
       [循环体]
    Next循环变量

    在此格式中,使用了这样几个概念:

    (1)循环变量:用于统计循环次数的变量,循环的过程就是该变量是从某个值变化到另一个值的过程。该变量一般为整型变量。

    (2)初始值:用于设置循环变量的初始取值。

    (3)终值:用于设置循环变量的最后取值。

    (4)步长:用于决定循环变量每次循环时变化的数值,即循环变量在变化时的增值。如果省步长的话,其默认值为1。步长的取值可以为正,也可以为负。若初始值小于终值,则必将步长设为正值才有可能执行循环体;若初始值大于终值,则必须将步长设为负值才有可能行循环体。

    (5)循环体:需要重复执行的代码部分,可以是一个或多个语句。

    (6)Next循环变量:用于结束一次For循环,根据终值和现在循环变量的值的大小关系决定是否执行下一次循环。其中的循环变量的名称必须与循环开始时的循环变量名称相同。

    For…Next语句循环的执行过程是:先将循环变量取为初始值,然后检验循环变量的取值是否超出终值(若步长为正值,则检验循环变量是否大于终值;若步长为负值,则检验循环变量的取值是否小于终值)。若循环变量没有超出终值,则执行一次循环体,然后将循环变量加—上步长再赋给循环变量本身,再与终值进行比较,直到循环变量超出终值时,退出循环,执循环后的语句。

    在For…Next循环中,只要步长不为0,就永远不会出现死循环。所谓死循环,就是由于编程者的失误,导致程序进入循环后再也无法跳出循环,程序将无法正常结束。因为只要步长不为0,无论始值和终值之间相差多么大,总可以经过有限次的循环,使始值超出终值,从而跳出循环。由此可见,For…Next适用于预先知道循环次数的情况。在某些情况下,可能需要在循环变量没有超出终值之前就跳出循环,这时就要用到Exit

    For语句。该语句一般是作为if语句的子句出现在循环体中的,当满足某种特殊的条件时,就提前跳出循环。

    从For…Next浯句的格式中可以看到:其中的循环体是可选的。若省略了循环体,即For循环的循环体内没有任何具体的语句,则其只是起到延时的作用。因为当循环了一定次数后虽不执行任何操作,但却花费了一定时间,故可作为延时工具使用。但要注意的是由于现存计算机的速度都比较快了,如果循环次数比较少的话将不会达到预期的效果,因此要适当选择循环次数。

下面举一个循环的例子来说明For…Next语句:
S=1
for i=1 to 10
s=s*i
next i
这个例子的作用是用来计算10的阶乘。在上例中,循环变量的初值为1,终值为l0,循环变量是i,步长缺省为1。因为10的阶乘比较大,这里的s要定义为长整型的。

    四、For Each…Next语句 FOR……Next语句与For…Next语句有些类似,但它们有很大的区别:前者是由指定或集合中的元素来控制循环,而后者是由循环变量来控制循环过程。由此可见,For Each…语句是不需要预先知道循环次数的,指定数组或集合中的元素个数就是循环次数。该语句的使用格式为:

    For Each循环变量In数组或集合
        循环体
    Next循环变量
    这里的循环变量必须是变体型或对象型的。对于数组,循环变量必须是变体型的;对于集合,如果集合中包含对象,则循环变量应该是对象型,当然也可以是变体型。
    当某一数组或集合里的所有元素进行同一操作时,就需要使用该语句了。

    五、Do…Loop语句
    Do…Loop循环是根据某个条件是否成立来决定是否循环。它并不限制循环的次数,只要满足条件就继续循环,直到不满足条件时跳出循环。注意要在循环中改变条件,否则的话可能会陷入死循环。

    Do…Loop语句有四种形式:
形式1:
DO
循环体
Loop While条件
这种形式的执行过程是:先执行一遍循环体,然后再判断条件是否成立,若条件成立, 继续下一次循环;否则,就退出循环。

形式2:
DoWhile条件
循环体
Loop
这种形式是把“While条件”放在循环体的前面,也就是说它的执行过程是先判断条件是立,再决定是否继续循环。

形式3:
DO
循环体
Loop Until条件
这种形式和第一种形式有些类似,也是先执行循环体,然后再判断条件。与第一种形式不同,这种形式只有当条件不成立才会继续循环,否则就退出循环。

形式4:
DO Until条件
循环体
Loop
这种形式和第二种形式有些类似,先判断条件,再决定是否继续循环。与之不同的是,这种形式也是当条件不成立才会继续循环。

    由上面四种形式的格式可以看出:

    第一种和第三种形式是先执行循环体,然后再判断条件,条件成立与否,至少执行一次循环体;第二种和第四种形式,则是先判断条件,如果条件当,循环体可能一次也没有执行。且“While”和“Until”正好相反,前者是条件成立时入循环,而后者则是条件不成立时才进入循环。使用时可根据需要选择最适当的形式。

    在前面For…Next语句中介绍的Exit语句也适用于DO…Loop语句,只是把“Exit For”改成“Exit Do”即可,它们的作用是一样的,都是用来提前跳出循环的。

    六、GOT0语句和注释语句
    使用GoTo语句可以改变程序的执行顺序,从当前位置转到指定的位置。其格式如下:
GoTo行标号
该语句使程序转到行标号指定的那一行执行相应的代码。其中行标号是由字母或数字组成,在语句的最前面,且后面要加一个冒号。

    使用GoTo语句要注意以下两点:
    (1)GoTo语句和与其相对应的行标号必须在同一过程内,不能用该语句从一个过程跳到另一个过程中去。

    (2)由于GoTo浯句破坏了程序的结构化,可能会导致程序的混乱的,因此最好少用甚至不用该语句。

    注释语句是对于程序的注解和说明,以便于自己和他人阅读程序代码。它只起到帮助阅读的作用,而不执行其它任何操作。使用格式为:
Rem注释内容

‘注释内容
注释语句只出现在源程序中,不会被编译成二进制代码。我们在编程时要注意适当的添加注释,以便于以后的阅读和修改。为程序代码添加合理的注释,是一种良好的编程习惯。

    七、求素数实例
    下面我们来看一个求100至200之间所有素数的例子。具体步骤如下:
步骤1:
新建一个工程。

步骤2:
为窗体添加一个命令按钮控件,并将其“Caption”属性改为“求素数”。

步骤3:
为程序编写如下代码:

Private Sub Command1_Click()
Dim i As Integer, Jd As Integer '定义循环变量
Dim x As Integer
Dim s As Integer '用来保存素数的个数
s = 0
For i = 100 To 200
x = Sqr(i)
For j = 2 To x
'若某数能被2至它的平方根之间的数整除,则提前退出循环
If i Mod j = 0 Then Exit For
Next j
If j > x Then '判断是否提前退出了内层循环
If s Mod 10 = 0 Then Print '输出10个数后,就换行
Print i;
s = s + 1
End If
Next i
Print
Print "100到200之内共有" & s & "个素数"
End Sub

    至此,程序设计完毕,保存工程及窗体。

    在这个程序中,主要使用循环嵌套来求素数。所谓循环嵌套是指一个循环当中包含着另一个循环。外层循环是从100到200,内层循环则是相外层循环变量i能否被2至它的平方根之间的数整除来判断i是否是素数,若i能被这个范围的某数整除,则i一定不是素数,且提前退出内层循环;若内层循环没有提前退出,就说明当的i是素数。内层循环之后的判断语句就是用来判断是否提前退出了内层循环,如果没有(即满条件d>X),则在窗体上输出这个数,并累计素数的个数。

    最后,再输出素数的总个数。程序中的Print是个输出语句,它是把其后的内容输出到窗体上。其使用格式如下:
Print[输出内容][;]
其中,输出内容是可选的,如果省略的话,表示换行。分号(;)表示下次使用Print输出—内容时接在本次输出之后,若省略的话,下次输出时则另起一行。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多