第4章VB控制结构4.1顺序结构VB具有结构化程序设计的三种结构,即顺序结构、选择结构、循环结构,是程序设计的基础。顺序结构就是各语句按出现的先后次序执行。一般的程序设计语言中,顺序结构的语句主要是赋值语句、输入/输出语句等。在VB中也有赋值语句:而输入/输出可以通过文本框控件、标签控件、InputBox函数、MsgBox函数和过程等来实现。4.1.1赋值语句形式:变量名表达式计算右边表达式的值,然后赋给左边的变量。给变量赋值和设定属性是VB编程中常见的两个任务。例如:n=n+l计数累加Textl.Text =""清除文本框的内容,文本框显示字符串Text1.Text="欢迎使用VB"赋值语句注意点赋值语句不允许写成表达式一变量,虽然赋值号与关系运算符等于号都用=表示,VB系统会根据所处的位置自动判断符号的意义。赋值号左边的变量只能是变量,不能是常量、常数符号、表达式。下面均为错误的赋值语句:Now O=x+y左边是表达式(函数)5=sqr(s)+x+y,左边是常量4.1.2数据输出和输入InputBox函数打开一个对话框,等待用户输入,返回字符串类型的输入值。形式:InputBox(提示L标题I[默认值,x坐标位置[y坐标位置])提示项不能省略。若要多行提示,可在每行行未加回车换行vbCrLf。例4.1利用InputBox输入基本工资和营业额,按营业额的5%提成,计算实发工资并显示。MsgBox函数和MsgBox过程打开一个信息框,等待用户选择一个按按钮。MsgBox函数返回所选按钮的值,MsgBox过程不返回值MsgBox函数形式:变量[%]=MsgBox(提示[,按钮][,标题])MsgBox过程形式:MsgBox提示[,按钮]】[,标题]按钮项是一整型表达式,决定信息框按钮的数目和类型及出现在信息框上的图标形式。MsgBox按钮设置
第 4 章 VB 控制结构 4.1 顺序结构 VB 具有结构化程序设计的三种结构,即顺序结构、选择结构、循环结构,是程序设计 的基础。 顺序结构就是各语句按出现的先后次序执行。一般的程序设计语言中,顺序结构的语句 主要是赋值语句、输入/输出语句等。在 VB 中也有赋值语句;而输入/输出可以通过文本框 控件、标签控件、InputBox 函数、MsgBox 函数和过程等来实现。 4.1.1 赋值语句 形式: 变量名=表达式 计算右边表达式的值,然后赋给左边的变量。 给变量赋值和设定属性是 VB 编程中常见的两个任务。例如: n = n + 1 '计数累加 Text1.Text = "" ' 清除文本框的内容 Text1.Text = "欢迎使用 VB " ' 文本框显示字符串 赋值语句注意点 赋值语句不允许写成 表达式=变量,虽然赋值号与关系运算符等于号都用=表示, VB 系统会根据所处的位置自动判断符号的意义。 赋值号左边的变量只能是变量,不能是常量、常数符号、表达式。下面均为错误的 赋值语句: Now()=x+y '左边是表达式(函数) 5=sqr(s)+x+y '左边是常量 4.1.2 数据输出和输入 InputBox 函数 打开一个对话框,等待用户输入,返回字符串类型的输入值。 形式:InputBox(提示[,标题][,默认值][,x 坐标位置][,y 坐标位置]) 提示项不能省略。若要多行提示,可在每行行末加回车换行 vbCrLf。 例 4.1 利用 InputBox 输入基本工资和营业额,按营业额的 5%提成,计算实发工资并显 示。 MsgBox 函数和 MsgBox 过程 打开一个信息框,等待用户选择一个按按钮。 MsgBox 函数返回所选按钮的值,MsgBox 过程不返回值 MsgBox 函数形式: 变量[%] = MsgBox(提示[,按钮][,标题]) MsgBox 过程形式: MsgBox 提示[,按钮][,标题] 按钮项是一整型表达式,决定信息框按钮的数目和类型及出现在信息框上的图标形式。 MsgBox 按钮设置
值述分组描内部常数0确定按钮VBOkOnly1VBOkCancel确定、取消按钮按钮2VBAboutRetrylgnore终止、重试、忽略按钮数目3是、否、取消按钮VBYesNoCancel4是、否按钮VBYesNo5VBRetryCancel重试、取消按钮16VBCritical关键信息图标图标32询问信息图标VBQuestion类型48警告信息图标VBExclamation64信息图标VBInformation0默认VBDefaultButton1第1个按钮为默认按钮56VBDefaultButton2第2个按钮为默认512第3个按钮为默认VBDefaultButton3MsgBox所选按钮返回值内部常数返回值被单击的按钮1确定vbOk2取消vbCancel3终止vbAbort4重试vbRetry5忽略vblgnore6是vbYes7香vbNoPrint方法作用:在对象上输出信息。对象.Print[Spc(n)|Tab(n)][输出列表J[:l]对象:窗体、图形框或打印机。缺省为窗体。Spc(n)函数:从当前位置起空n个空格Tab(n)函数:从最左端开始计算的第n列分号:定位在上一个被显示的字符之后逗号:定位在下一个打印区开始处(每区14列)Print语句尾无分号或逗号,输出后换行例4.3Print方法输出图形Format格式输出函数形式:Format(表达式[,"格式字符串"])常用数值格式化符及举例
MsgBox 所选按钮返回值 内部常数 返回值 被单击的按钮 vbOk 1 确定 vbCancel 2 取消 vbAbort 3 终止 vbRetry 4 重试 vbIgnore 5 忽略 vbYes 6 是 vbNo 7 否 Print 方法 作用:在对象上输出信息。 对象.Print[Spc(n)|Tab(n)][输出列表 ][;|,] 对象:窗体、图形框或打印机。缺省为窗体。 Spc(n)函数:从当前位置起空 n 个空格 Tab(n)函数:从最左端开始计算的第 n 列 分号:定位在上一个被显示的字符之后 逗号:定位在下一个打印区开始处(每区 14 列) Print 语句尾无分号或逗号,输出后换行 例 4.3 Print 方法输出图形 Format 格式输出函数 形式: Format (表达式[, "格式字符串"]) 常用数值格式化符及举例 VBDefaultButton3 512 第3个按钮为默认 VBDefaultButton2 56 第2个按钮为默认 默认 VBDefaultButton1 0 第1个按钮为默认 按钮 VBInformation 64 信息图标 VBExclamation 48 警告信息图标 VBQuestion 32 询问信息图标 VBCritical 16 关键信息图标 图标 类型 VBRetryCancel 5 重试、取消按钮 VBYesNo 4 是、否按钮 VBYesNoCancel 3 是、否、取消按钮 VBAboutRetryIgnore 2 终止、重试、忽略按钮 VBOkCancel 1 确定、取消按钮 VBOkOnly 0 确定按钮 按钮 数目 分组 内 部 常 数 值 描 述
符号作用表达式显示结果格式字符串0用0填充不足的位置"00000.0000"01234.56701234.567#位置不足时不填充01234.567"#####.####"1234.567千分位1234.567"##,##0.000"1,234.567,%数值乘以100,加百分号1234.567"####.##%"123456.7%$在数字前强加$"$###.##"$1234.571234.567E+用指数表示1234.567"0.00E+00"1.23E-01例4.4利用Format函数显示数值。4.2选择结构计算机要处理的问题往往是复杂多变的,仅采用顺序结构是不够的。必须利用选择结构等来解决实际应用中的各种问题。VB中提供了多种形式的条件语句来实现选择结构,有If条件语句和Select情况语句等。它们都是对条件进行判断,根据判断结果,选择执行不同的分支。4.2.1If条件语句1.If...Then语句(单分支结构)表达式If<表达式>Then语句块(可以是一句或多句语句)ITEnd If语句块或If<表达式>Then<语句>表达式:关系表达式、逻辑表达式,算术表达式。表达式值按非零为True零为False进行判断。该语句的作用是当表达式的值为True,执行Then后面的语句块,否则不做任何操作。单分支结构例:已知两个数x和y,比较它们的大小,使得x大于y。Ifx<yThen(2)t=xx-y13y=tEnd If或If x<yThent=x:x=y:y=t简单If形式无EndIf时,只能是一句语句或语句间用冒号分隔,而且必须在一行上书写。双分支结构2.If...Then..Else语句If表达式Then表达式语句块1语句块1语句块2Else语句块2End If→
表达式 语句块 T F 例 4.4 利用 Format 函数显示数值。 4.2 选择结构 计算机要处理的问题往往是复杂多变的,仅采用顺序结构是不够的。必须利用选择结构 等来解决实际应用中的各种问题。VB 中提供了多种形式的条件语句来实现选择结构,有 If 条件语句和 Select 情况语句等。它们都是对条件进行判断,根据判断结果,选择执行不同的 分支。 4.2.1 If 条件语句 1. If.Then 语句(单分支结构) If <表达式> Then 语句块(可以是一句或多句语句) End If 或 If <表达式> Then <语句> 表达式:关系表达式、逻辑表达式,算术表达式。表达式值按非零为 True, 零为 False 进行判断。 该语句的作用是当表达式的值为 True,执行 Then 后面的语句块,否则不做任何操作。 单分支结构 例:已知两个数 x 和 y,比较它们的大小,使得 x 大于 y。 If x<y Then t=x x=y y=t End If 或 If x<y Then t=x: x=y: y=t 简单 If 形式无 End If 时,只能是一句语句或语句间用冒号分隔,而且必须在一行上书 写。 双分支结构 2. If.Then.Else 语句 If 表达式 Then 语句块 1 Else 语句块 2 End If E+ 用指数表示 1234.567 "0.00E+00" 1.23E-01 $ 在数字前强加$ 1234.567 "$###.##" $1234.57 % 数值乘以100,加百分号 1234.567 "####.##%" 123456.7% , 千分位 1234.567 "##,##0.000" 1,234.567 # 位置不足时不填充0 1234.567 "#####.####" 1234.567 0 用0填充不足的位置 1234.567 "00000.0000" 01234.5670 符号 作 用 表达式 格式字符串 显示结果 t x y 表达式 F 语句块 1 T 语句块 2
或If表达式Then语句1Else语句2当表达式的值为True时,执行Then后面的语句块1,否则执行Else后面的语句块2。双分支结构例sinx+x? +1x±0计算分段函数Vcosx-x+3xx=0单分支结构实现y=cos(x)—x^3+3*xIf x0 Then y=sin(x)+sqrt (x*x+1)双分支结构实现Ifx0Theny=sin(x)+sqr (x*x+1)Elsey=cos(x)—x^3+3*xEndIf多分支结构3.If...Then...Elself语句表达式If表达式1Then语句块1Elself 表达式2 Then语句块2.语句块!语句块2语句块n语句块+1[Else+七Y语句块n+1]→End If作用:根据不同的表达式值确定执行哪个语句块多分支结构例例4.7已知变量ch中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。If UCase(ch)>="A"And UCase(ch)<="Z"Then考虑大小写字母MsgBox(ch+"是字母字符")Elselfch>="O"Andch<="9"Then数字字符MsgBox(ch+"是数字字符")Else·除上述字符以外的字符MsgBox(ch+"是其他字符")End If不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。Elself不能写成ElseIfIf语句的嵌套If语句的嵌套是指If或Else后面的语句块中又包含If语If表达式1ThenIf表达式2ThenEnd IfEndIf
或 If 表达式 Then 语句 1 Else 语句 2 当表达式的值为 True 时,执行 Then 后面的语句块 1,否则执行 Else 后面的语句块 2。 双分支结构例 计算分段函数 单分支结构实现 y=cos(x)-x^3+3*x If x<>0 Then y=sin(x)+sqrt (x*x+1) 双分支结构实现 If x<>0 Then y=sin(x)+sqr (x*x+1) Else y=cos(x)-x^3+3*x End If 多分支结构 3. If.Then.ElseIf 语句 If 表达式 1 Then 语句块 1 ElseIf 表达式 2 Then 语句块 2 . [Else 语句块 n+1] End If 作用:根据不同的表达式值确定执行哪个语句块 多分支结构例 例 4.7 已知变量 ch 中存放了一个字符,判断该字符是字母字符、数字字符还是其他字符。 If UCase(ch) >= "A" And UCase(ch) <= "Z" Then MsgBox(ch + "是字母字符") '考虑大小写字母 ElseIf ch >= " 0" And ch <= "9" Then ' 数字字符 MsgBox(ch + "是数字字符") Else ' 除上述字符以外的字符 MsgBox(ch + "是其他字符") End If 不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若 条件都不满足,且有 Else 子句,则执行该语句块,否则什么也不执行。ElseIf 不能写成 Else If。 If 语句的嵌套 If 语句的嵌套是指 If 或 Else 后面的语句块中又包含 If 语 If 表达式 1 Then If 表达式 2 Then . End If . End If y x x x x x x x = + + − + = sin cos 2 3 1 0 3 0 表达式 2 表达式 n T F T F 语句块 1 语句块 2 语句块 n+1 F T 表达式 1 语句块 n
例已知x,y,z三个数,使得x>y>z用一个IF语句和一个嵌套的IF语句实现。Ifx<y Then t=x: x=y: y=tIfy<z Then(=y: y=z: z=tIfx<yThen{=x: x=y: y=tEnd IfEnd If4.2.2SelectCase语句SelectCase变量或表达式Case表达式列表1语句块1Case表达式列表 2语句块2[Case Else语句块n+1]EndSelect表达式列表与变量或表达式的类型必须相同,是下面4种形式之一:例:"A"表达式:一组用逗号分隔的枚举值2,4,6,8100:表达式1To表达式260To·Is关系运算符表达式Is<60SelectCase语句例将例4.7改用SelectCase语句实现:Select CasechCase"a"To"z","A"To"Z"MsgBox(ch+"是字母字符")Case"o"To"9"MsgBox(ch+"是数字字符")Case ElseMsgBox(ch+"是其他字符")End Select多分支结构,用SelectCase语句比If...Then...Elself语句直观,程序可读性强。但不是所有的多分支结构均可用SelectCase语句代替If..Then...Elself语句。SelectCase语句例例4.9判断坐标点(x,y),落在哪个象限。代码一Ifx>0Andy>0ThenMsgBox("在第一象限")Elselfx<0Andy>0ThenMsgBox("在第二象限")Elselfx<0Andy<0ThenMsgBox("在第三象限")
例 已知 x,y,z 三个数,使得 x>y>z 用一个 IF 语句和一个嵌套的 IF 语句实现。 If x<y Then t=x: x=y: y=t If y<z Then t=y: y=z: z=t If x<y Then t=x: x=y: y=t End If End If 4.2.2 Select Case 语句 Select Case 变量或表达式 Case 表达式列表 1 语句块 1 Case 表达式列表 2 语句块 2 . [Case Else 语句块 n+1] End Select 表达式列表与变量或表达式的类型必须相同,是下面 4 种形式之一 : • 表达式 例: "A" • 一组用逗号分隔的枚举值 2,4,6,8 • 表达式 1 To 表达式 2 60 To 100 • Is 关系运算符表达式 Is < 60 Select Case 语句例 将例 4.7 改用 Select Case 语句实现: Select Case ch Case "a" To "z","A" To "Z" MsgBox( ch + "是字母字符") Case "0" To "9" MsgBox (ch +"是数字字符") Case Else MsgBox( ch + "是其他字符") End Select 多分支结构,用 Select Case 语句比 If.Then.ElseIf 语句直观,程序可读性强。但不是 所有的多分支结构均可用 Select Case 语句代替 If.Then.ElseIf 语句。 Select Case 语句例 例 4.9 判断坐标点(x,y),落在哪个象限。 代码一 If x > 0 And y >0 Then MsgBox("在第一象限") ElseIf x < 0 And y > 0 Then MsgBox("在第二象限") ElseIf x < 0 And y < 0 Then MsgBox("在第三象限")