流程控制

540 阅读5分钟

一、If/Else语句

条件语句分为单行结构和块结构两种方式。

(1)单行结构

    If condition Then statement [Else elsestatement]

(2)块结构

    If condition Then
        [statement]
    ElseIf condition-n Then
        [statement]
    Else
        [statement]
    End If

单行结构适合用于简单的测试,块结构不仅具有更强的结构性,而且也易于维护调试。两者区别: 块结构的Then后面没有语句,而单行结构的肯定有语句。 单行结构没有End If结束语句,而块机构必须有该结束语句。

    sngCj = InputBox("请输入学生的成绩:","输入成绩")
    If sngCj >= 85 Then
        MsgBox("成绩优秀")
    ElseIf sngCj >= 60 And sngCj < 85 Then
        MsgBox("成绩合格")
    Else
        MsgBox("成绩较差")
    End If

小练习

一个按钮,点击后输入成绩,判断大于等于85分提示“成绩优秀”,大于等于60小于85提示“成绩合格”,其他小于60分提示“成绩较差”

二、IIf语句

    IIF(condition, truepart, falsepart)

condition为条件。如果条件为真(True),则返回truepart表达式的值;反之返回falsepart表达式的值。以下表达式表示什么意思?

   z = IIf(x < y, y , x)

三、Select语句

有时需要判定的条件较多,如果再用以上的条件结构,则代码显得十分繁琐且容易出错。为此,VB提供了专门用于多重判断的选着结构(也称为情况语句)

    Select Case testExpression
        Case expressionList-1
            statementBlock-1
        Case expressionList-2
            statementBlock-2
        ...
        Case Else
            statementBlocak-n
    End Select

testexpression为测试表达式,每个Case后的expressionList-1为表达式列表。VB再执行时首先计算表达式testexpression的值,然后将该值与每个Case后的值进行比较,若值相同就执行该Case后的语句块。如果有多个Case值与之相匹配,只执行第一个;如果没有一个匹配,则执行Case Else后的语句块。

测试表达式种类

  • 具体取值,可以式一个或多个,如100,85,-1等。
  • 连续的数据范围,如1 To 100、60 To 84等
  • 利用Is关键字来判断,如对于成绩而言不可能大于100,因此85 To 100就可以写称Is >= 85,可以是其他的关系运算符。
  • 以上几种表示方法的组合,如100,60 To 80,Is >= 85
    sngCj = InputBox("请输入学生的成绩:","输入成绩")
    Select Case sngCj
        Case 85 To 100
            MsgBox("成绩优秀")
        Case 60 To 84
            MsgBox("成绩合格")
        Case Else
            MsgBox("成绩较差")
    End Select

小练习

请根据以下描述,编写财务部门征收劳务酬金所得税程序,规定如下:
(1)收入小于1000元,扣税3%。
(2)收入在1000 ~ 3000元(不含3000元),1000元以上部分扣税15%。
(3)收入在3000 ~ 5000元(不含5000元),3000元以内按(2)的方法扣税,3000元以上部分扣税20%。
(4)收入达到5000元以上(含5000元),扣税25%。

注意:扣税额输入框只能复制不能修改

image.png

运行结果:

输入输出
80024
1500105
3500430
50001250

四、For/Next语句

Array函数

Dim 数组名称
数组名称 = Array(常量表达式列表)

利用Array函数对数组各值进行赋值,其类型只能是Variant

Lbound函数和UBound函数

  1. Lbound函数:获取数组下界函数,默认情况下是0。
  2. Ubound函数:获取数组上界函数,和长度进行比较区分。

Option Base 1

在模块的最上面加上一句Option Base 1 下界变成了1。

For语句的结构

For counter = start To end [Step step]
    statements
    [Exit For]
    statements
Next counter

该语句执行时,先将counter设为start(初值)。测试counter的值是否超过end(如step为正数是大于,否则是小于),若已经超过,则循环结束,否则执行循环体中的语句。step是每次循环时counter变化的值,它可以为负数,默认值为1.本次循环结束后,counter将加上步长step的值返回到循环开始再进行测试,知道counter的值超过终值,循环结束。再循环体内增加Exit For可以提前退出循环。

    Dim i, j, intRs As Integer
    Dim strMsg As String
    Dim sngCj(), sngAver As Single                    '定义动态数组
    intRs = InputBox("请输入学生数目:", "学生数")      '输入学生的数目以决定数组的大小
    ReDim sngCj(intRs + 1)                            '重新定义数组
    sngAver = 0 
    For i = 1 To intRs
        strMsg = "请输入第" & Str(i) & "个学生的成绩:"
        sngCj(i) = InputBox(j, "成绩")                 '利用字符变量动态改变提示的内容
        sngAver = sngAver + sngCj(i)
    Next
    sngAver = sngAver / intRs
    Print "该门课平均成绩为:"; sngAver

小练习

定义一个班级数组,数组长度为10,点击按钮后用for语句随机产生大于等于100且小于等于200的数,用逗号分开输出在Label中。

image.png

五、While/Wend语句

While condition
    statements
Wend

功能:按照条件是否成立执行循环。操作如下:
(1)测试条件
(2)当条件成立,执行语句序列,执行完语句序列,遇到Wend转向While语句,重新到(1)测试条件,当成立,进行下一次循环,如果不成立,转到Wend语句的下一句执行,结束循环。

小练习

设计一个程序,让计算机产生50~100的随机整数,请猜这个随机整数,并输出一共猜了几次。
要求:

  1. 循环弹框,如图所示;
  2. 判断输入的数字,判断并提示“数据太大”或者“数据太小”;
  3. 直到猜对为止,提示一共猜了多少次。

image.png

六、Do/Loop语句

1.当型循环

Do [While | Until 条件]
    [语句组]
    [Exit Do]
Loop

2.直到型循环

Do 
    [语句组]
    [Exit Do]
Loop [While | Until 条件]

当型循环时先判断,后执行,循环体中的语句可能一次也不执行。而直到型循环时先执行后判断,循环体中的语句至少执行一次。两种语法均是通过关键字While和Until来控制循环执行的条件的,关键字While表示条件为真时循环执行,而Until则相反。 Exit Do语句执行时强制退出循环,这一句时可选的,它一般与判断结构的语句联合使用,以免造成死循环。

Do While True
    sngCj = InputBox("请输入学生的成绩:", "输入成绩")
    If sngCj = "" Then
        Exit Do
    Else
        Select Case sngCj
            Case 85 To 100
                MsgBox ("成绩优秀")
            Case 60 To 84
                MsgBox ("成绩合格")
            Case Else
                MsgBox ("成绩较差")
        End Select
    End If
Loop

小练习

做一个和上一个练习一样的程序“猜数字”,要求使用Do/Loop语句。

思考

1.If/Else语句结构式怎么样

2.IIf语句结构式怎么样

3.For语句结构式怎么样

4.While语句结构式怎么样

5.Do/Loop语句结构式怎么样

练习

随机产生10个0~50的随机数,显示在Label上,然后分别用不同的循环语句找出最大值,最小值和总和。

  1. 用For语句找出最大值
  2. 用While语句找出最小值
  3. 用Do语句算出总和

image.png