当前位置:文档之家› 数组知识点归纳

数组知识点归纳

◆◆◆一、理解一维数组的定义和应用,了解二维数组和控件数组;
1、数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。

用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。

(1)数组必须“先声明后使用”,声明一个数组就是声明其数组名、类型、维数和数组的大小。

(2)其表示形式:A(1),A(10)
X(1,1), X1(1,10), X(2,10)
Y(0,0,0), Y(1,2,5)
(3)Visual Basic中的数组分类:
按数组的大小(元素个数)是否可以改变来分为:
定长数组、动态(可变长)数组。

按元素的数据类型可分为:
数值型数组、字符串数组、逻辑数组、
日期型数组、变体数组等、对象数组。

按数组的维数可分为:
一维数组、二维数组、多维数组(最多可以达到60维)
(4)数组元素的引用
格式:数组名(下标[, 下标]……)
其中,下标可以是常量、变量或表达式,但表达式的值必须介于定义数组时指定的下标的下界和上界之间,否则将导致“下标越界”的错误。

例如: A(1)=A(2)+B(1)+7 ′取数组元素运算
A(i)=B(i) ′下标使用变量
B(i+1)=A(i+2) ′下标使用表达式
C(3,4)=100 ′下标使用常量
2、数组的定义
[Dim / Private / Public] 数组名( [下界To] 上界,…) [As 数据类型]
例如:Dim Counter(1To 14) As Integer …14个元素的局部数组。

Private Sume (1 To 20) As Double …20个元素的模块级数组。

说明:
(1)数组名的命名规则与变量的命名相同,但在同一过程中数组名不能和简单变量名同名,否则会出错。

(2)下标的最大值和最小值分别称为数组的上界和下界。

数组元素在上、下界内是连续的。

如:Dim A(-5 To 20) As Integer
定义一个数组名为A,下界为-5,上界为20的一维数组,数据类型为整型,共有26个元素,即A(-5),A(-4),A(-3)…A(20)。

(3)缺省<下界>为0,若希望下标从1开始,可在模块的通用部分使用Option Base语句将缺省<下界>设为1,其使用语法格式是:
Option Base n
①Option Base n语句用于指定数组的默认下界,参数n只能取0或1
②Option Base语句只能用于窗体或模块的通用部分,不能出现在过程中,并且必须放在数组定义前。

例如:
Option Base 1 ' 将数组声明中缺省<下界>下标设为1
(4)如果省略As子句,则数组的类型为变体类型。

(5)数组中各元素在内存占一片连续的存储空间。

A(0) A(1) A(2
)
A(n) ….
一维数组在内存中存放的顺序
二维数组则按先行后列的顺序。

Dim S(2,
(6)一维数组的元素个数:上界-下界+1;多维数组的元素个数等于每一维元素个数的乘积。

如:Dim x(1 To 10,3,1 To 15)
这是一个三维数组,第一维的元素个数为10,第二维的元素个数为4,第三维的元素个数为15,故整个数组的元素个数为:10×4×15=600个元素。

(7)关键字Public 、Dim 、Static 、Private 表示数组变量的作用范围,具体内容将在过程与函数一章进行讲解。

(8)在数组定义后未赋值前,对于数值型数组各元素的初始值为0;字符型数组初始值为空字符串;逻辑型数组初始值为False 。

3、给数组元素赋初值——可以使用循环结构和
Array 函数给数组赋初值。

(1)使用循环结构
如给数组strName(100)的元素赋初值: For i = 1 To 100 strName(i) = 0 Next
(2)使用Array 函数——可方便地对数组整体赋值
它只能给声明V ariant (变体)的变量或仅由括号括起的动态数组赋值。

赋值后的数组大小由赋值的个数决定。

其语法格式为:
<变量名> = Array(<数据列表>)
例如,要将1,2,3,4,5,6,7 这些值赋值给数组a ,可使用下面的方法赋值。

Dim a()
A=array(1,2,3,4,5,6,7)
第0行 第1行 第2行
Dim a
A=array(1,2,3,4,5,6,7)
4、数组的操作
(1)数组的输入一般可以通过文本框输入和InputBox函数输入。

(2)输出数组中的全部或部分元素,一般使用循环结构。

(3)数组元素的复制
单个数组元素可以像简单变量一样,通过对其赋值,也可以把它的值赋给其他的变量或数组元素。

即数组元素之间可以互相复制,无论它们是否属于同一个数组或维数是否相同,但数组类型必须相同。

例如:
Dim a(4,8) As Integer, b(6,6)As Integer
……
a(1, 2) = b(1,1); a(2, 3) = b(2,4)
b(4,4) =a (1, 2)
5、数组的上界Ubound( )函数、下界 Lbound( )函数
(1)Ubound( )函数和Lbound( )函数,分别用来确定数组某一维的上界和下界值。

(2)使用形式如下:UBound(<数组名>[, <N>])
LBound(<数组名> [, <N>])
其中:<数组名>:数组变量的名称,遵循标准变量命名约定。

<N> :可选的;一般是整型常量或变量。

指定返回哪一维的上界。

1 表示第一维,
2 表示第二维,如此等等。

如果省略默认是1。

6、控件数组
(1)控件数组的概念
一个窗体上可以包含多个同种类型的控件,可以通过创建控件数组的方法使同一类型的控件共享同一个事件过程。

使用控件数组的最大好处:编写的代码比较简单且易于维护。

控件数组:是具有相同名称、类型以及事件过程的一组控件。

每一个控件具有一个唯一的索引(index)。

当数组中的一个控件识别某一事件时,它将调用此控件数组的相应事件过程,并把相应索引作为参数传递给事件过程。

一个控件数组至少应有一个元素,在控件数组中可用到的最大索引值为 32767。

同一控件数组中的元素有自己的属性设置值。

(2)控件数组的建立
控件数组中每一个元素都是控件,它的定义方式与普通数组不同。

可以通过以下两种方法建立控件数组。

方法一:复制已有的控件并将其粘贴到窗体上。

方法二:将窗体上已有的类型相同的多个控件的Name属性设置为同一值。

二、排序
1、冒泡法排序:
冒泡排序是常用的一种排序方法。

假设n个元素按递增的顺序排序,排序思想为:(1)第一轮:从数组的第一项开始,每一项(i)都与下一项(i+1)进行比较。

如果下一项的值较小,就将这两项的位置交换,直到最后第n-1项与第n项进行比较,将最大的数排列在最后。

(2)第二轮:从数组的第一项开始,每一项(i)都与下一项(i+1)进行比较。

如果下一项的值较小,就将这两项的位置交换,直到最后第n-2与第n-1项进行比较,将第二大的数排列在倒数第二位。

(3)依此类推,直到只有第一项与第二项进行比较交换,完成递增法排序。

例(1):冒泡法排序(升序)程序:
For i = 1 To n - 1
For j = 1 To n-i
If a(j) > a(j+1) Then
t=a(j)
a(j)=a(j+1)
a(j+1)=t
End if
Next j
Next i
2、选择法排序(升序):
选择法排序是最为简单且易理解的算法,其基本思想是每次将最小(或最大)的数找出来放在序列的最前面。

假设按递增法将有n个数的数组A(1To n)进行排列,步骤为:
(1)假定最小值Temp,将Temp与A(2)进行比较,若A(2)<A(1),则令Temp= A(2),直到比较到A(n),这样Temp中就存放了A(1)~A(n)中的最小数,将Temp所指向的元素与A(1)进行交换,从而将A(1) ~A(n)中的最小数存放在数组的第1个位置。

(2)对除第1个数外的其余n-1个数再按步骤(1)的方法选出次小的数,与第2个数交换位置。

(3)依次类推,经过n-1遍后构成递增序列。

若要按递减次序排列,只要每次选最大的数即可。

例(2):选择法排序(升序)的程序:
For i = 1 To n - 1
p = i
For j = i + 1 To n
If a(p) > a(j) Then p = j
Next j
t = a(i)
a(i) = a(p)
a(p) = t
Next i。

相关主题