第7章 使用数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
'声明存放n个学生成绩的数组
aver = 0
For i = 1 To n
score(i) = Int(Rnd * 101) '通过随机数产生0~100的成绩
aver = aver + score(i)
7.1 数组的概念及定义
7.1.1 初识数组
由此,VB引入了数组,即用一批具有相同名字、不同下标的变量来存放一组数据。在VB中,把这 组具有相同名字、不同下标的变量称为数组。 因此,用数组解决上例中的问题的程序段如下:
Dim score(1 To 100) As Single Dim sum, average As Single Dim i As Integer sum = 0 For i = 1 To 100
Section
7.2 静态数组与动态数组
实例7-1——数组应用
7.2 静态数组与动态数组
在定义时已确定了数组占用内存空间大小的数组称为静态数组,前面我们所使用的数组都是静 态数组。而在声明数组时未给出数组占用内存的大小(省略括号中的下标)的数组称为动态数 组,当要使用它时,可随时用ReDim语句重新指出数组的下标,并重新为其分配内存空间。执行 ReDim之前,动态数组是不占内存空间的,因此,利用动态数组可以更有效地利用内存空间。
第 11 页 共 57 页
7.1 数组的概念及定义
7.1.2 数组的定义
知识库
所谓默认数组,就是数组类型为Variant(默认)的数组。几乎在所有的程序设计语言中,一个数组中的 所有元素必须属于同一种数据类型,而在VB中,一个数组中的元素可以是相同类型的数据,也可以是 不同数据类型的数据。而默认数组就是可以存放不同类型数据的数组。因此,默认数组也可以说是一 种“混合数组”。如: Static Arr(1 to 5) Arr(1)=10 Arr(2)=3.9 Arr(3)="Visual Basic" Arr(4)="20"& Now Arr(5)=&HAAF 上述语句定义了一个静态默认数组Arr(默认数组一般定义为静态的),共有5个元素,并对这5个元素 分别赋予了整型、实型、字符串型、日期和时间型及十六进制整型。
第 9 页 共 57 页
7.1.2 数组的定义
7.1 数组的概念及定义
定义数组时,还需注意以下几点: (1)数组名的命名规则与变量名相同。
7.1.2 数组的定义
3.定义数组时的注意事项
three
(2)数组必须先定义,后使用。
(3)当用Dim语句定义数组时,数组中的全部元素都被初始化为0 (数值型数组)或空字符串(字符型数组)。
7.1.2 数组的定义
下面以Dim语句为例介绍数组定义的格式,其他语句定义数组的格式与Dim类似。
即可以使用的下标的最大值,格式如下:
Dim 数组名(第一维下标上界,第二维下标上界,…)As 类型名称
1.只给出每一维下标的上界
ONE
例如
Dim Test(2,3) As Integer
上述语句定义了一个二维数组Test, 该数组有3行4列共12个元素,即: Test(0,0)、Test(0,1)、Test(0,2)、 Test(0,3)、Test(1,0)、Test(1,1)、 Test(1,2)、Test(1,3)、Test(2,0)、 Test(2,1)、Test(2,2)和Test(2,3),其形 式如右图所示。
(4)每次使用ReDim语句 都会使原来数组中的值丢 失,但如果在ReDim语句中 的ReDim关键字和数组名之 间加上Preserve选项,就可 以保留数组中的原有数据。 但使用Preserve后只能改变 数组最后一维的大小,前 面几维的大小不能被改变。
7.2 静态数组与动态数组
实例 7-1
数组应用
第 15 页 共 57 页
7.2 静态数组与动态数组
例如
Public TestArr( ) As Integer Dim size As Integer Sub Form_Click( )
…… size=InputBox("Enter a integer value:","Data","12") ReDim TestArr(size) …… End Sub
但是,因为存放学生成绩的变量score是一个简单变量,它只能存放一个学生的成绩,而无法 把100名学生的成绩全部保存起来。因此,如果接下来要对这100名学生的成绩再作其他处理, 如统计不及格学生人数或统计高于平均分的人数,就要再重复输入100名学生的成绩。显然, 这样做工作量大而且效率低下。
第 4 页 共 57 页
第 12 页 共 57 页
7.1 数组的概念及定义
7.1.2 数组的定义 (8)数组的下界必须小于上界。VB中提供了两个函数LBound和UBound用来测 试一个数组中指定维的下界值和上界值,这两个函数的格式为:
LBound(数组名[,维]) UBound(数组名[,维])
'测试指定维的下界值 '测试指定维的上界值
Option Base n
其中,n值只能是0或1。Option Base语句只能出现在窗体的“(通用)”段中或代码模块中,不能出 现在过程中,并且必须出现在数组定义之前。如果定义的是多维数组,则下标的默认下界对每一维都 有效。
第 8 页 共 57 页
7.1 数组的概念及定义
2.给定需要指定数组下标的下界
上述语句首先声明了一个空数组TestArr和一个变量size,然后在 Form_Click( )事件过程中输入一个值给size,用ReDim语句定义数组 TestArr的大小为size。
第 16 页 共 57 页
7.2 静态数组与动态Biblioteka Baidu组
(1)静态数组定义中的下 标只能是常量,动态数组 ReDim语句中的下标可以 是常量,也可以是有了确 定值的变量。
TWO
格式如下:
Dim 数组名([下界 To] 上界,[下界 To] 上界,…) As 类型名称
例如
Dim Arr(-2 To 3) As Integer
上述语句定义了一个一维数组Arr,其下标的下界为2,上界为3,因此该数组共有6个数组元素:Arr(-2), Arr(-1),Arr(0),Arr(1),Arr(2),Arr(3)。
第 18 页 共 57 页
7.2 静态数组与动态数组
实例7-1——数组应用
输入若干个学生的成绩并存放于一个数组中,计算其平均分,并统计高于平均分的人数。要 求将求得的两个数据放于数组的最后两个元素中。
步骤1 步骤2
启动VB 6.0,新建一个标准EXE工程,在窗体中增加1个命令按钮,将其Caption属性修 改为“成绩统计”。
Visual Basic
程序设计教程
CHAPTER
第七章 使用数组
数组的概念及定义 静态数组与动态数组 数组的基本操作 控件数组
Section
7.1 数组的概念及定义
7.1.1 初识数组
7.1.2 数组的定义
7.1 数组的概念及定义
7.1.1 初识数组
我们首先来看一个例子,求一个班100名学生某门课的平均成绩。显然,我们不能去定义100个 简单变量解决这个问题。但是,我们可以结合循环结构用一个简单变量来设计程序,程序段如 下:
在VB中,可以用4个语句来定义数组,它们的格式相同,但适用范围不同。这4个语句为:
Dim:用来在窗体模块或标准模块中声明数组,也可以用在过程中。 ReDim:用来在过程中声明动态数组。 Static:用来在过程中声明静态数组。 Public:用来在标准模块中声明全局数组。
第 6 页 共 57 页
7.1 数组的概念及定义
双击命令按钮,为其Click事件输入如下代码:
第 19 页 共 57 页
7.2 静态数组与动态数组
实例7-1——数组应用
Private Sub Command1_Click()
Dim score() As Integer, i%, n%, aver
n = InputBox("输入学生的人数:")
ReDim score(1 To n)
第 5 页 共 57 页
7.1 数组的概念及定义
7.1.2 数组的定义
数组应当先定义后使用。定义中要声明数组名、类型、维数及数组的大小。数组在计算机内 存中占据一块区域,数组名是这个区域的名称,区域的每个单元都有自己的地址,该地址用 下标表示。定义数组的目的就是通知计算机为其留出所需的内存空间。
数组的维数也就是定义数组时下标的个数。如果只用一个下标就能确定一个数组元素在数组中 的位置,就称为一维数组。如果要用两个或多个下标才能确定一个数组元素在数组中的位置, 则称为二维数组或多维数组。VB中的数组最多可以有60维。
在数组Arr中,元素个数为3,而可以使用的最大下标值为5。
(6)定义数组时,每一维的元素个数必须是常数,不能是变量或表达式。
(7)数组的类型通常用As给出,如果省略As,则定义的是默认数组(数组类型为Variant)。例如:
Static Arr(3 to 5)
等价于如下定义:
Static Arr(3 to 5) As Variant
第0行 第1行 第2行
第 7 页 共 57 页
第0列
第1列
第2列
第3列
Test(0,0) Test(1,0) Test(2,0)
Test(0,1) Test(0,2) Test(1,1) Test(1,2) Test(2,1) Test(2,2)
二维数组Test(2,3)
Test(0,3) Test(1,3) Test(2,3)
7.1 数组的概念及定义
7.1.2 数组的定义
提示
在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用Variant 类型数组时更要格外小心,因为它们需要更大的存储空间。
在一般情况下,数组下标的下界默认为0。如果希望下标从1开始,可以通过Option Base语句来设置, 其格式为:
score(i) = InputBox("输入第" + Str(i) + "位学生的成绩") sum = sum + score(i) Next i average = sum / 100
若要再求低于平均分的学生人数,可接着写如下语句:
num% = 0 For i = 1 To 100
If score(i) < average Then num = num + 1 Next i
Dim Sum, score, averge as Single Dim i As Integer sum = 0 For i = 1 To 100
score = InputBox("输入第" + Str(i) + "位学生的成绩") sum = sum + score Next i average = sum / 100
(3)可以用ReDim语句直 接定义数组。如果在窗体 级或标准模块中没有用 Dim或Public语句声明过同 名数组,则用ReDim定义 的数组最多可有60维。
使用动态数组 时还需要注意 以下几点:
第 17 页 共 57 页
(2)在过程中可以多次使 用ReDim语句来改变数组 的大小,也可以改变数组 的维数,但最多不能超过8 维。
(4)在第一种格式中,下标的下界只能是0或1;而在第二种格式中, 下标的范围可以是-32768~32767。
第 10 页 共 57 页
7.1 数组的概念及定义
7.1.2 数组的定义
(5)注意区分“可以使用的最大下标值”和“元素个数”:前者指的是下标值的上界,后者指数组 中的元素个数。如:
Dim Arr(3 To 5) As Integer
如果测试的是一维数组,则参数“维”可以省略。例如,有下面的数组定义:
Dim A(1 to 30,0 to 50)
则用下面的语句可以得到该数组各维的上下界:
Print LBound(A,1),UBound(A,1) Print LBound(A,2),UBound(A,2)
输出结果为:
1
30
0
50
第 13 页 共 57 页
定义动态数组的方法是:在窗体的“(通用)”段、标准模块或过程中使用Dim或Public 语句声明一个没有下标(即括号内为空,但括号不能省)的数组,然后在过程中用 ReDim语句指明该数组的大小。ReDim语句格式如下:
ReDim 数组名(下标,下标…) As 类型
其中,下标可以是常量,也可以是有了确定值的变量。类型可以省略,若不省略, 必须与前面声明语句中的类型保持一致。