1、第五讲 数组为什么使用数组?批量数据存取的需要!一、概念:1数组:数组是一组具有同一名字、不同下标的变量的集合。一般格式为 A(N),A 为数组名,n 是下标。数组分静态数和动态数组。在定义数组时已确定了数组的大小,称为静态数组。在定义数组时未给出数组的大小,省略了括号中的下标,称动态数组。2重要概念:1)数组名:代表整个数组,和变量的命名规则一样2)元素:一个数组元素相当于一个变量,数组是元素的有序集合3)下标:数组元素的编号(连续的)4)下界和上界:下标的取值范围(下界上界)3数组和变量的关系:数组是一组变量的有序的集合。二、数组定义:1静态数组定义:1)一维数组(火车)定义:一般格式:D
2、im 数组名 (下标下界 to 下标上界) As 类型省略下界:Dim 数组名 (下标上界 ) As 类型 -下标下界默认从 0 开始例:Dim a(1 to 10) as integer - 数组中包含 10 个整型数组元素Dim b(0 to 10) as integer - 数组中包含 11 个整型数组元素注意: 数组必须先定义后使用,命名规则同变量 下标上下界用来确定数组的大小(下标下界下标上界) 数组下界省略时,默认为 0;可在通用声明字段中用 option base 0/1,指定省略的下界值是 0 或者 1(注意:不影响以 to 关键字定义的下标下界) 省略数组类型时,该数组中可以
3、存放不同类型的数据 定义时,下标不能是变量 一维数组元素个数=下表上界-下标下界+1例:Option Base 1Dim a(5) - 数组中包含 5 个整型数组元素Dim b(-5 to 1) - 数组中包含 7 个整型数组元素2)二维数组(表格)定义:Dim 数组名(第一维说明,第二维说明) As 类型注意: 格式变形:Dim 数组名(行,列) As 类型即第一维说明的是行号范围,第二维说明的是列号范围 同行第一维下标相同,同列第二维下标相同 二维数组元素个数=各维下标取值个数之积在数组的定义中,必须声明数组的名称和下标范围!例:Dim B(1,3 To 5) As Integer - 定
4、义了一个 2 行、3 列的整型二维数组,共有 6 个元素:B(0 ,3) 、 B(0,4)、B(0,5)、B(1,3)、B(1 ,4)和 B(1,5)Dim S(5 To 5,2 To 10 ) As String - 定义了一个 1 行、9 列的字符串型二维数组,共有 9 个元素:S(5,2)、S(5,3)、S(5,4)、S(5,5) 、S(5,6)、S(5 ,7)、S(5 ,8)、S(5 ,9)、和S(5,10)2动态数组定义:Dim 数组名( ) As 类型 定义数组名ReDimPreserve 数组名( 下标说明) 重定义数组大小定义动态数组的步骤: 在窗体中用 Dim 语句声明一个没
5、有下标的数组(括号内不要写维数说明) ; 在过程中根据需要再用 Redim 语句确定数组的大小。注意: 允许多次使用 ReDim,改变数组的大小、维数,但是不能改变数组类型; ReDim 时下标可以是变量; 使用 ReDim 时,默认情况下数组中的原有内容清空;如果要保留原有数据,可使用Preserve 选项; 在 ReDim 时,如果使用了 Preserve 选项只能改变最后一维的上界。例:Dim A( )ReDim A(10,10) 重新定义动态数组 A 的空间ReDim A(5) 再重新定义动态数组 A 的空间三、数组的操作1数组的引用格式:数组名(下标) - 一维引用数组名(行标,列标
6、) - 二维引用说明: 在程序中,凡是能用变量的地方,都可用数组元素来替换; 引用数组元素时,注意数组名、类型及维数要与定义的一致; 数组元素的下标要在定义的范围之内,否则出现下标越界错误; 数组引用中的下标可以是变量、常量、表达式。2数组的输入(赋值)1)For 循环:(结合 InputBox 函数、随机函数、赋值语句)2)Array 函数(动态数组)格式:数组名=Array(数组元素值)功能:将小括号中的数据依次赋给数组中的各元素。说明: 所声明的数组为动态数组,圆括号可省略不写; 数组可以声明成 Variant 类型或不说明类型; 数组下标的下界值由 Option Base 指定,或者默
7、认为 0; 数组下标的上界值由下界值和括号内的参数个数决定; Array 函数中的数组元素值之间以逗号分隔; Array 函数只适用于一维数组。3数组的输出1)Print 方法(和 For 循环结合)2)赋值语句(和 For 循环结合)3)For Eachnext 语句格式:For each 成员 In 数组.Exit For.Next 成员功能:For Eachnext 语句主要用来对数组元素进行处理,它所执行的次数由数组个数确定。有多少个元素,就重复多少次。说明: “成员”是一个变体类型的循环变量,它表示数组中的每个元素; “数组”仅是一个数组的名称,没有维数和括号。语句执行过程: 首先计
8、算数组元素的个数,决定循环的次数; 每次执行循环体之前先将数组的一个元素的值赋给成员,第一次是第一个数组元素,第二次是第二个数组元素,依次类推 执行循环体后,转到; 直到遍历完每一个数组元素或遇到 Exit For 语句则退出该循环。4数组的清除格式:Erase数组名 , 数组名 功能:用于重新初始化大小固定的静态数组的元素,或者释放动态数组的存储空间。说明: 当用于静态数组时,如果是字符串数组,把所有元素置为空字符串;如果是数值数组,把所有元素置为 0; 当用于动态数组时,释放存储空间。下一次引用该数组时,必须用 ReDim 重定义。四、数组相关函数1数组下界测试函数格式:LBound( 数
9、组名,维 )功能:LBound 函数返回一个数组中指定维的下界2数组上界测试函数格式:UBound(数组名,维)功能:LBound 函数返回一个数组中指定维的上界3LBound 和 LBound 的说明 省略维数,默认测试第一维; 维数不能超过数组实际定义五、综合实例1输出 20 个存放在整数数组中的所有偶数。 (一维数组)Private Sub Command1_Click()Dim a(1 To 10) As IntegerFor i = 1 To 10a(i) = InputBox(“请输入数字“)NextFor i = 1 To 10If a(i) Mod 2 = 0 Then Pri
10、nt a(i)NextEnd Sub2求出数组中的最大值及相应得下标。 (一维数组)Private Sub Command1_Click()Dim a(1 To 10) As IntegerFor i = 1 To 10a(i) = Int(Rnd * 100)Print a(i);NextPrintMax = a(1) 假设数组中第一个数最大For i = 1 To 10If a(i) Max Then Max = a(i)NextPrint MaxEnd Sub3求 3*3 矩阵对角线上的元素和。 (二维数组)Private Sub Command1_Click()Dim a(1 To 3, 1 To 3) As IntegerFor i = 1 To 3For j = 1 To 3a(i, j) = i + jPrint a(i, j);NextPrintNextFor i = 1 To 3s = s + a(i, i)NextPrint sEnd Sub4随机产生 n 个学生的考试成绩,n 值由文本框输入的值决定。 (动态数组)