• 沒有找到結果。

程序结构

在文檔中 第 2 章 Visual Basic 语言基础 (頁 24-32)

VB 是面向对象的程序设计语言,尽管采用了事件驱动的机制,但在设计过程的程序代码 时,仍需要对过程的流程进行控制,即采用结构化程序设计的方法完成过程代码设计。

结构化程序设计方法把程序的结构分为顺序、选择和循环三种基本结构。程序设计的基 本原则是尽量避免语句之间的跳转,自顶向下、逐步求精、模块化设计等。目的是在团队开发 大型软件时,实现高效率、高可靠性。 

2.4.1 顺序结构

顺序结构是程序设计中最简单、最常用的基本结构。该结构中,各语句的执行按照语句 的书写次序逐条顺序执行,是任何程序的基本结构。

例 2­23  一个最简单的顺序结构程序。

【程序代码】

Private Sub Command1_Click()  Dim x As Integer 

Dim y As Integer  x = 10 

y = 20 

MsgBox "x+y=" & x + y  End Sub

【代码说明】

单击命令按钮 Command1 时,将逐条执行 Click 事件内的语句。 

2.4.2 分支结构

通常,计算机按语句在程序中书写的顺序执行语句。但在许多情况下,语句执行的顺序 依赖于输入数据或中间运算结果。在这种情况下,必须根据某个变量或表达式的值作出判定,

以决定执行哪些语句和跳过哪些语句不执行。VB 应用程序中,可以通过分支结构实现这种功 能。分支结构又称条件结构。 

VB 提供三种分支语句,即:

(1)If…Then 语句

(2)If…Then…Else 语句

(3)Select Case 语句  1.If…Then 语句

格式 1:If  条件  Then  语句 格式 2:If  条件  Then 

语句块  End If 

功能:如果条件成立(为真),则执行  Then  后面的语句或语

句块。否则,执行 If 语句的下一条语句。流程图如图 2­24 所示。 图 2­24  If…Then 语句流程图 语句块

条件  Y

说明:

(1)条件一般为关系表达式、逻辑表达式。

(2)格式 1 中的语句只能是一个语句或写在一行上用“: ”分隔的多个语句。

(3)语句块指一行或多行语句。

例 2­24  比较 x、y 中的数,将大数放在 x 中,小数放在 y 中。

【程序代码】

用格式 1:

If x<y Then w=x:x=y:y=w  '引入中间变量 w,使 x、y 中的值进行交换 用格式 2:

If x<y Then  w=x  x=y  y=w  End If

例 2­25  已知 x、y、z 三个数,要求按从小到大的顺序进行排列。

【程序代码】

Private Sub Command1_Click() 

X = 8: y = 9: z = 3  '设定 x、y、z 的初值 If x > y Then w = x: x = y: y = w '将 x、y 中的小数存放于 x 中

If x > z Then w = x: x = z: z = w 'x 中存放 x、z 中的小数,此时 x 为三个数中的最小数 If y > z Then w = y: y = z: z = w 'y 中总是存放 y、z 中的小数

MsgBox x & "," & y & "," & z  End Sub

程序运行时,单击 Command1 按钮,将弹出按从小到大的顺序显示 x、y、z 值的对话框。 

2.If…Then…Else 语句

格式 1:If  条件  Then  语句 1 Else  语句 2  格式 2:If  条件  Then 

语句块 1  Else 

语句块 2  End If 

格式 3:If  条件 1 Then  语句块 1  ElseIf  条件 2 Then 

语句块 2  Else 

语句块 3  End If  End If 

功能:如果条件成立(为真),则执行 Then  后面的语句 1(或语句块 1);否则,执行 Else  后面的语句 2(或语句块 2)。流程图如图 2­25 所示。

说明:

(1)格式 3 构成了条件语句的嵌套,若条件 1 不成立,则判断条件 2 是否成立。

(2)ElseIf 不能写成 Else If。在 Else 语句中又出现 If 语句,称为 If 语句的嵌套。使用 If  的嵌套结构时,若 If 语句不写在一行上,则必须与 End  If 配对。多个 If 嵌套时,End  If 与其 最接近的 If 配对。

例  2­26  在火车站托运行李时,需要根据行李的重量按不同标准收费。若重量不超过  50kg,按每公斤 0.3 元收费;若重量超过 50kg,其中 50kg 按每公斤 0.3 元收费,超出 50kg 部 分按每公斤 0.6 元收费。要求设计程序,根据输入的托运行李重量计算并输出托运费。

图 2­25  If…Then…Else 语句流程图

【分析】

设托运行李重量为 weight,托运费为 pay,计算公式如下: 

pay=weight*0.3  当 weight≤50  pay=50*0.3+(weight­50)*0.6  当 weight>50 

程序运行时,单击窗体,利用  inputBox  函数接收输入的行李重量;计算后,在窗体上显 示行李托运费。

【程序代码】

Private Sub Command1_Click()  Dim weight, pay 

weight = InputBox("请输入行李的重量")  If weight < 50 Then 

pay = weight * 0.3  Else 

pay = 50 * 0.3 + (weight ­ 50) * 0.6  End If 

MsgBox "行李托运费为:" & pay & "元" 

End Sub

【运行结果】

如图 2­26 所示。

图 2­26  例 2­26 程序运行界面  条件

语句块 2  语句块 1

例 2­27  以下程序段将学生成绩的百分制转换成 A、B、C、D、E 等级制。

【程序代码】

Private Sub Command1_Click() 

score = Val(InputBox("请输入分数值:"))  If score > 90 Then 

grade = "A" 

ElseIf score >= 80 Then  grade = "B" 

ElseIf score >= 70 Then  grade = "C" 

ElseIf score >= 60 Then  grade = "D" 

Else 

grade = "E" 

End If 

MsgBox "分数等级为:" & grade  End Sub 

3.Select Case 语句 

Select Case 语句也可以实现选择,有时比 If 语句还简单、直观。

格式:Select Case  表达式  Case  表达式列表 1 

语句块 1 

Case  表达式列表 2  语句块 2 

…  [Case Else 

语句块 n+1] 

End Select 

功能:根据测试表达式的值,选择执行不同的语句。若表达式的结果与 Case 子句中表达 式列表 i 的值相等,则执行语句块 i。

说明:表达式列表与表达式的类型必须一致。

表达式列表可以是下列形式之一:

(1)一个具体的值,如 5。

(2)用逗号分隔的一组数据,如 1,3,4,6。

(3)用 To 表示的一个区间,如 3 To 9。

(4)用 Is 代表测试值,后带关系运算符和比较值,如 Is>7。

例 2­28  将例 2­27 中用 If 嵌套结构实现的功能改用 Select Case 语句实现。

【程序代码】

Select Case  score  Case is>=90 

Grade="A" 

Case 80 to 89

Grade="B" 

Case 70 to 79  Grade="C" 

Case 60 to 69  Grade="D" 

Case Else  Grade="E" 

Case Select  2.4.3 循环结构

程序设计中,常常会遇到一些计算不复杂但需要反复多次计算的问题,如显示九九乘法 表等。这种问题可用循环结构来实现。

循环结构程序设计实际上是一种特殊结构的选择结构,程序根据循环条件的判断结 果决定是否执行循环体语句。循环体语句是循环结构中的处理语句块,用来执行重复的 任务。

循环结构有多种形式,可以根据需要选择。无论采用何种类型的循环结构,循环体的执 行次数必须视其循环类型与条件而定,且必须确保循环的重复执行能在适当的时候得以终止

(即非死循环)。此外,循环结构还能嵌套使用。 

VB 的循环语句有以下四种形式。

(1)For ... Next 

(2)For Each ... Next 

(3)Do…Loop 

(4)While…Wend  1.For ... Next 结构

格式:For  循环变量  [As  类型]=初始值  To  终止值  [Step  步长] 

语句块  [Exit For] 

Next 

功能: For 循环语句是一种定次循环语句, 即在设计程序时已经可以确定需要循环的次数。

执行 For 语句时,首先判断循环变量当前值是否大于终值,若不是,则进入循环执行循环体语 句。执行到 Next 语句时,将循环变量的值加上步长值,返回到 For 语句(循环开始处);否则,

退出循环执行 Next 语句之后的语句。

说明:

l 循环变量:整型变量,用于记录循环次数的数值型变量。

l 类型:说明循环变量的类型。

l 初始值:循环变量的起点值。

l 终止值:决定何时退出循环。

l 步长值:数值类型。步长值决定每执行一次循环,循环变量的增量。每次循环后,循 环变量的增量(默认)增 1,可以是正数或负数。

Exit For:控制转移到 For 循环外,即退出循环。

l 初始值、终止值和步长变量在循环前必须赋值,且为整数。

例 2­29  从 1 累加到 100,显示累加结果。

【程序代码】

Private Sub Command1_Click()  Dim sum As Integer 

sum = 0 

For i = 1 To 100  sum = sum + i  Next 

MsgBox ("计算结果为:" & sum)  End Sub

【运行结果】

如图 2­27 所示。

例 2­30  显示九九乘法表。 

For 循环语句可以嵌套使用。本例中,被乘数从 1 变化到 9,乘数也从 1 变化到 9,采用 两层循环嵌套。

【程序代码】

Private Sub Command1_Click() 

Dim i As Integer, j As Integer  Dim s As String 

For i = 1 To 9  For j = 1 To i 

s = s & i & "*" & j & "=" & i * j & " " 

Next 

s = s & vbCrLf  Next 

MsgBox (s)  End Sub

【运行结果】

如图 2­28 所示。

图 2­28  九九乘法表  2.For Each... Next 结构 

For Each...Next  循环与 For...Next  循环类似。该语句对数组或对象集合中的每一个元素重 复一组语句,而不是重复语句一定的次数。在不知道一个集合有多少元素的场合,For  Each...Next  循环非常有用。

格式:For Each element In  对象或集合、数组

图 2­27  运行结果

语句块  [Exit For] 

Next 

功能:可以列出数组中的每一个元素,或一个集合中的每一个元素。

其中:

l 对集合,element 只能是 Variant 类型变量,或一般的 Object 类型变量,或“对象浏览 器”中列出的对象。

l 对数组,element 只能是 Variant 类型变量。

例 2­31  用 For Each 结构显示数组中每一个元素。

【程序代码】

Private Sub Command1_Click()  Dim arr(9) As Integer  Dim s As String  '为了测试,先对数组赋值 For i = 0 To UBound(arr) 

arr(i) = i + 1  Next 

'使用 For Each 结构列举出数组的每一个元素 For Each a In arr 

s = s & a & " " 

Next 

MsgBox "数组元素如下:" & s  End Sub

【运行结果】

如图 2­29 所示。

例 2­32  用 For Each 结构显示窗体上所有控件对象的信息。

【建立工程】

新建工程,按默认名称保存工程为“工程 1” ,窗体名称保存为 Form1。

界面布局如图 2­30 所示。

图 2­30  界面布局

【程序代码】

Private Sub Command1_Click()  For Each c In Me.Controls 

Label1 

Label2 

Command1  Text1  Text2 

图 2­29  运行结果

s = s & "控件名称是:" & c.Name & _ 

" 控件类型是:" & TypeName(c) & vbCrLf  Next 

MsgBox "窗体包含以下控件:" & s  End Sub

【代码说明】 

TypeName 函数求取变量的类型名。

【运行结果】

如图 2­31 所示。

图 2­31  运行结果  3.While 结构 

While 循环结构有几种形式,如表 2­6 所示。

表 2­6  While 循环结构的形式 

While 结构 1  While 结构 2  While 结构 3 

While <条件> 

语句块  Wend 

Do While<条件> 

语句块  [Exit Do] 

Loop 

Do  语句块  [Exit Do] 

Loop While <条件> 

表中 While 结构 1 和 While 结构 2 实现相同的功能, 只是写法不同, 这种结构称为 “当型”

循环结构。即当满足条件时,执行循环体(语句块)。 

While 结构 3 是“直到型”循环结构,无论是否满足条件,至少执行循环体(语句块)一 次,直到不满足条件才退出循环。

注意:While…Wend 没有 Exit While 的语句,Do...Loop  语句提供了一种结构化与适应性 更强的方法来执行循环。

例 2­33  求从 1 累加到 100 的过程中,结果超过 1000 的数是多少。

【程序代码】

Private Sub Command1_Click()  Dim i As Integer 

Dim sum As Integer 

Do While 1 '形式上是无限循环,在循环体中必须有退出的判断 sum = sum + i 

If sum > 1000 Then Exit Do '当满足条件时,退出循环 i = i + 1 

Loop 

MsgBox ("当结果超过时,该数为:" & i)  End Sub

在文檔中 第 2 章 Visual Basic 语言基础 (頁 24-32)

相關文件