程序设计基础-Visual Basic(2019秋)

沈阳师范大学 刘立群

目录

  • 认识 Visual Basic
    • ● 认识 Visual Basic
    • ● 对象的属性、事件和方法
    • ● 控件的容器-窗体
    • ● 文本编辑工具-文本框
    • ● 命令按钮和标签
  • 程序设计基础
    • ● 语句和语法规则
    • ● 数据类型和常量变量
    • ● 运算符与表达式
    • ● 常用内部函数
    • ● 输入与输出
  • 基本控制结构和算法
    • ● 程序结构与算法
    • ● 选择结构的语句实现
    • ● 循环结构的语句实现
    • ● 穷举和递推问题求解
    • ● 嵌套循环解百钱百鸡问题
    • ● 星形矩阵的显示问题
  • 常用标准控件
    • ● 选择控件和滚动条--设置文字格式
    • ● 列表框及组合框—购票系统
    • ● 计时器与图片控件—自动变换的交通灯
    • ● 图形操作—小球运动
  • 数组和过程
    • ● 数组的定义与一维数组的应用
    • ● 二维数组
    • ● 控件数组
    • ● 自定义过程
    • ● 参数传递
    • ● 变量的作用域
  • 键盘鼠标事件与菜单设计
    • ● 鼠标键盘事件--小鸡吃虫游戏
    • ● 菜单程序设计--控制移动字幕
  • 通用对话框与文件操作
    • ● 通用对话框与文件操作
    • ● 文件操作--打开保存数据实例
数组的定义与一维数组的应用

  

数组是一组同名变量的集合。与简单变量不同的是:数组中的数据不是无规律存放的,而是按照下标的顺序存放的,在内存中占据一片连续的存储单元。只有一个下标的数组称为一维数组,具有两个或多个下标的数组称为二维数组或多维数组。在使用数组之前,必须先定义数组。

1.一维数组的定义

格式:

Public|Dim|Static <数组名> (下标上界) [As 数据类型]

说明:

Public语句表示数组为公用数组,如果希望数组为模块级数组,则在模块中通用声明处用Dim语句定义数组,如果希望数组为局部数组,则在过程中用StaticDim语句定义数组。例如:

Public test(4) As Integer

Dim s(2) As Long

“数组名”在程序中用来代表数组的名称。数组名遵循与变量名同样的命名规则。

“下标上界”是待定义数组元素的最大下标。注意,在VB中数组的第一个元素的下标是0,即下标下界为0,所以若定义一个数组的下标上界为n,则该数组最多可以拥有n+1个元素。例如:

Public test(4) As Integer

定义了一个下标上界是4的数组,数组中实际包含5个元素,分别为:test(0)test(1)test(2)test(3)test(4)

在默认情况下,数组的起始下标是0,也可以强制改变数组的起始下标,使其变为1,方法是在程序代码的通用声明部分插入“Option Base 1语句。这样在该程序模块中定义的所有数组,其第一个元素的下标都是1。在定义数组时要根据实际情况决定数组的起始下标。

“数据类型”用于指定数组元素的数据类型。如果指定了数据类型,则数组中的所有元素都具有相同的数据类型。如果未指定数组的数据类型,则默认为变体型,变体型的数组可以存放不同类型的数据元素。

Visual Basic 还提供了另一种数组定义格式:

Public|Dim|Static <数组名>(下界 To 上界) [As数据类型]

这种定义格式可以指定数组上下界,其范围可以是-3276832767。例如:

Public Arr(2 To 5)        '数组元素为Arr(2) Arr(3)Arr(4)Arr(5)4个元素

Public Arr(-1 To 3)       '数组元素为Arr(-1)Arr(0)Arr(1) Arr(2) Arr(3)

使用这种定义格式可以更好地反映对象的特性,例如:

Dim age(18 To 40)            '用来存储年龄从18岁到40岁人的数组

Dim production(1998 To 2004)        '用来存储1998年到2004年的产量的数组

2.数组的引用

数组的引用通常是指对数组元素的引用,其方法是在数组名后面的括号中指定被引用元素的下标,例如:a(2)b(1,3)数组元素与变量的用法相同,即可以被赋值也可以参加表达式的运算。例如:

a(1) = "a"

a(2) = "b"

b(1,3) = a(1) + a(2)

引用数组时应注意下标要在定义的范围内,否则会出现“下标越界”的错误。

3.数组元素的输入输出

定义数组其实是为数组安排一块连续的内存存储区,但这并不意味着内存里该数组已建立了应有的内容。

数组有上界和下界,数组元素在上下界之间是连续的,所以利用数组与循环语句的配合,可以方便地处理数组元素,从而简化程序。对数组元素值的输入、输出都采用这种方法。一般情况下,对于一维数组的输入输出采用一重循环,而对于二维数组的输入输出则采用双重循环。

InputBox函数为数组元素赋值。例如:

Dim A(5)

For i = 0 To 5

A(i) = Val(InputBox("请输入一个数", "数组输入"))

Next i

将数组元素赋值为有规律的数列。例如:

Dim A(5)

For i0 To 5

A(i)i

Next i

该程序定义了一个含有6个元素的数组A,利用循环变量为数组元素依次赋值,分别为012345。为数组元素赋值为有规律的数列,需要找出数组元素下标与循环控制变量的关系,例如,将数组元素存储为奇数数列,可以这样设计循环:

For i1 To n

A(i)2*i-1

Next i

Array()函数为数组元素赋值。

定义数组除了使用命令定义的方法,还可以利用Array()函数将变体型变量定义为数组,并直接为数组元素赋值。函数格式:

Array(元素列表)

例如:

Dim a                           ‘定义变量a

a=Array1,5,9,3,2

此时变量a成为数组,并且有5个元素,即a(0)=1a(1)=5a(2)=9a(3)=3a(4)=2Array()函数定义的数组起始下标会受到语句Option Base 1的影响。

注意,Array函数只适用于一维数组,即只能对一维数组进行初始化,不能对二维或多维数组进行初始化。用Array函数赋值的变量只能是变体型的变量,不可以是其它类型的变量。

输出数组元素的值。例如:

For i=0 To 5

Print A(i);

Next i

4.数组的上下界

无论定义一维或多维数组,下界都必须小于上界。如果需要知道数组的上界值和下界值,可以通过LboundUbound函数来测试。格式为:

Lbound(数组名[,维])

Ubound(数组名[,维])

这两个函数分别返回一个数组中指定维的下界和上界,若两个一起使用即可确定一个数组元素个数。

对于一维数组来说,参数“维”可以省略。如果测试多维数组,则“维”不能省略。

例如:

Dim a(10)

Print Lbound(a), Ubound(a)                    ‘结果为0    10

Dim b(1 to 100, 50)

Print Lbound(b,1), Ubound(b,1) 

 ‘求数组b第一维的下界和上界,结果为1    100

Print Lbound(b,2), Ubound(b,2)                

‘表示求数组b第二维的下界和上界,结果为0    50

 

【例1输出菲波拉契数列的前20项。菲波拉契数列的定义是数列的前两项是01,以后每项均为其前两项的和,即依次为01123581321……。

Private Sub Command1_Click()

    Dim a(20) As Long

    a(1) = 0                                                    '数列第1

    a(2) = 1                                                    '数列第2

    For i = 3 To 20                                         '应用循环求第3~20

      a(i) = a(i - 2) + a(i - 1)                        '数列第3项为前两项和

    Next

    For i = 1 To 20

      Print a(i);

    Next

End Sub

【例2】从5个数中找出最大数。

算法设计:程序应用Array函数将5个数存入数组a中。若想找出数组中最大数,令第1个数为最大数即m=a(1),利用循环将后面的数依次与m比较,若遇到大于m的数,则让m存储该数,即语句If a(j) > m Then m = a(j),循环结束后,m中存储的数一定是最大值。

程序代码:

Option Base 1

Private Sub Form_Click()

Dim a

a=Array(1,3,2,7,9)

Print

m = a(1)

For j = 2 To 5

If a(j) > m Then m = a(j)

Next j

Print "max = "; m

  End Sub

程序运行结果为max= 9

思考:如何求出最小值?