数组讲解
今天我们来学习有关数组的相关知识。
为了解决大批量的数据处理问题,VB中提供了数组(Array)变量。数组是一种重要的数据结构,在许多程序设计语言中,都要直接或间接用到数组这种数据结构。
数组的概念 在VB中,如果把一组有序的数或变量作为一个整体来处理,这一组数或变量称为数组,数组中的每一个数或变量称为数组元素,每一个数组给定一个名称,叫做数组名,一个数组中各个数组元素之间的区别用数组名的下标来表示,放在数组名后的圆括号内。数组中的任意一个数组元素都可以存放一个数据,和使用简单变量一样,所以又称数组元素为下标变量。 例如:用A来表示一个班50个同学的数学成绩,用A(1)表示1号同学的成绩;A(2)表示2号同学的成绩;A(3)表示3号同学的成绩;...;A(50)表示第50号同学的成绩。则A为数组名,A(1)、A(2)、A(3)等都称为A数组的元素。 数组也有数值型和字符串型等类型之分。在一个数组中通常只能放置一种类型的数据,并且与数组的类型一致。 此外,数组还有静态数组和动态数组之分。 注意:在使用数组前通常都要对数组进行维数、类型及大小等内容的定义或说明。 静态数组 一、静态数组定义 静态数组是在定义数组时就指定了数组维数的多少及数组的大小。 1、语法 Dim redim Static Public 2、语法说明: (1)Dim:定义窗体模块数组。ReDim:在过程中定义。Static:在过程中定义。Public:在标准模块中定义全局数组。 (2)数组名的命名规则和变量命名规则相同,但是数组名不能与一般变量同名。 (3)凡是VB的数据类型,在数组中都可以说明和使用,当“As类型”省略时,为变体型数组(Variant)。 (4)下限值和上限值的大小范围是从-32768至32767。下限值及关键字TO可以省略,当省略时下限值为0。使用数组时,其下标不能超出所定义的范围。下标可以是负数。 (5)维数可以多达60维。 (6)数组要先定义后使用。 (7)在一个过程内部,数组名不能与某个变量同名。 (8)用Dim语句定义数据组,数值型元素置0,字符型元素置空字符串。 (9)可用类型说明符说明数组类型。 (10)若在定义时不指明下标,下标为0,这里可用Option Base 1定义下标为1。 例子:数组定义举例
二、测试数组上、下标函数 1、测试数组下标函数:Lbound(数组[,维]) 2、测试数组上标函数:Ubound(数组[,维]) 例子: Dim D(3, 5, 7,9) As String Private Sub Form_Click() Print LBound(D, 1), Print UBound(D, 1) Print LBound(D, 2), Print UBound(D, 2) Print LBound(D, 3), Print UBound(D, 3) Print LBound(D, 4), Print UBound(D, 4) End Sub 结果显示: 0 3 0 5 0 7 0 9 三、变体型(默认)数组 若定义数组时不指定类型,则该数组是一个变体型数组。其元素的类型可以不同。 即:Dim A(2,3)等同于:Dim A(2,3) As Variant 例子: Dim A(5) Private Sub Form_Click() A(1) = "中华人民共和国" A(2) = 12345 A(3) = 3456789 A(4) = 987654321 A(5) = "ABCDE" + "abcde" Print A(1) Print A(2) Print A(3) Print A(4) Print A(5) End Sub 四、数组的操作 数组的操作包括对数组元素进行数值的输入、输出和复制。 1、数组元素的赋值 方法一:用赋值语句对数组元素逐个赋值。 例子: Dim A(5) Private Sub Form_Click() A(1) = "中华人民共和国" A(2) = 12345 A(3) = 3456789 A(4) = 987654321 A(5) = "ABCDE" + "abcde" Print A(1) Print A(2) Print A(3) Print A(4) Print A(5) End Sub 方法二:用赋值语句结合For循环语句。 Dim D(0 To 2, 1 To 3) As Integer Private Sub Form_Click() For i = 0 To 2 For j = 1 To 3 D(i, j) = 100 Print D(i, j) Next j Next i End Sub 方法三:用InputBox函数。 Dim array1(5) As Variant Private Sub Form_Click() For i = 1 To 5 array1(i) = InputBox("输入元素的值:") Next i For i = 1 To 5 Print array1(i) Next i End Sub 方法四:对于 变体型一维数组,可应用Array()函数赋值。 格式:Array(值1,值2,值3… …) 例子:设一个一维变体型数组ABC,不指定维数,用Array()函数赋值,然后显示元素值。 Option Base 1 Dim ABC Private Sub Form_Click() ABC = Array("One", "Two", "Three", "Four", 1, 2, 3, 4, 5, 6) For i = 1 To 10 Print ABC(i) Next i End Sub 2、数组元素值的输出 用Print语句显示输出。前面有相应的例子。这里讨论如何进行“格式”输出。 例子:设有一个单精度实型三维数组array2(2,3,4),其元素值: 11 12 13 14 15 16 17 18 19 20 21 22 31 32 33 34 35 36 37 38 39 40 41 42 源程序如下: Option Base 1 Dim array2(2, 3, 4) As Single Private Sub Form_Click() For i = 1 To 2 For j = 1 To 3 For k = 1 To 4 array2(i, j, k) = InputBox("输入元素的值:") Next k Next j Next i For i = 1 To 2 For j = 1 To 3 For k = 1 To 4 Print array2(i, j, k); ""; Next k Next j Next i End Sub 3、For Each … Next语句 该语句是专门用于数组操作的语句。 (1)语句格式 For Each 成员 in 数组 循环体 [ Exit For] … … Next 成员 (2)说明 利用语句中的成员变量可实现数组元素的赋值、计算、显示等操作。 例子:设一个二维数组array5(3,4),将其中的第一个元素赋值100,后面的元素依次再加1赋值 Option Base 1 Dim array5(3, 4) Private Sub Form_Click() n = 100 For Each x In array5 ’x为成员 x = n n = n + 1 Print x Next x End Sub 五、嵌套数组 在Visual Basic中,可以用一个数组作为另一个数组的元素。在使用时,可将一个数组(嵌套数组)赋值给另一个数组(被嵌套数组)的元素,嵌套数组名后面加空括号。 要求:嵌套数组是数据类型,被嵌套数组不指定类型。 例子:将数组a(4)赋给数组b(2), Dim a(4) As Integer Dim b(2) Private Sub Form_Click() For i = 1 To 4 a(i) = i Next i b(1) = a() b(2) = a() Print b(1)(1) Print b(1)(2) Print b(1)(3) Print b(1)(4) Print b(2)(1) Print b(2)(2) Print b(2)(3) Print b(2)(4) End Sub |
动态数组 动态数组是指其数组的维数及大小可以重新定义,根据应用的环境不同随时说明其维数及大小。“动态数组”是由变量作为下标的数组,其下标在程序运行时完成定义。 一、动态数组的定义 第一步:用Dim语句或Public语句定义一个只有空括号而无下标的数组。 第二步:用ReDim定义带下标的数组。语句的格式: ReDim [Preserve] 变量(下标) As 类型 在定义时,类型与Dim语句中的类型要一致。下标通过变量赋值解决。 例子: Dim A() As Integer Private Sub Form_Click() n = InputBox("输入n的值:") ReDim A(n) For i = 1 To n A(i) = 12345 Print A(i) Next i End Sub 可以动态地定义多个数组。例子: Dim A() As Integer, B() As Integer Private Sub Form_Click() n = InputBox("输入n的值:") m = InputBox("输入m的值:") ReDim A(n, m) ReDim B(n, m) For i = 1 To n For j = 1 To m A(i, j) = 12345 B(i, j) = 23456 Print A(i, j), B(i, j) Next j Next i End Sub 二、数组的清除和重定义 数组一经定义,在内存中会分配相应的存储单元,其大小是不能改变的。即:在一个程序中,同一个数组只能定义一次。若清除数组内容或重新定义,要使用Erase语句。 格式: Erase 数组名[,数组名]… … 例子: Erase A,B,C 1、清除静态数组的影响
例子: Dim A(3) As Integer Private Sub Command1_Click() For i = 1 To 3 A(i) = 12345 Print A(i) Next i End Sub Private Sub Command2_Click() Erase A For i = 1 To 3 Print A(i) Next i End Sub 2、清除动态数组的影响 (1)系统会删除数组结构,并释放内存空间。 (2)下次引用动态数组前,要用ReDim语句重新进行定义。 三、数组应用算法--数据统计 利用数组进行数据统计运算 例:利用随机函数生成十个100以内的随机整数,计算出这十个数的总和及其平均值,并输出这十个数、总和及其平均值。 问题分析:对象设置把结果使用Print方法直接输出到窗体中,不用设置专用对象。 程序代码: DimA(10)AsInteger Dim B As Single Sub Form_Load() Form1.Show Print " 十个整数为:" For i=1 To 10 '循环产生10个随机整数 A(I)=Int(Rnd*100) '生成随机第i个整数 PrintA(I); '显示第i个数 A(0)=A(0)+A(I) '累加求和 Next i B=A(0)/10 '求平均值 Print "总和为:";A(0) Print "平均值为:";B End Sub |
大家在学习过程中有不懂之处,可以添加微信号:vbyjk521 ,学习问题在线答疑。
长按上图,关注跟我学VB公众平台
更多VB知识,尽在跟我学VB