第8章 数组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
只要省略“下标下界 To”,即变 (2)第二种格式 为第一种格式,当下标为0或1时, 可以省略“下标下界 To”。
Dim 数组名 ( [下标1下界 To] <下标1上界> [, [下标2下界 To] <下标2上界>Biblioteka Baidu] ) [As <类 型>]
例: Dim a(8,3) As Integer 注意:没有 To 时,下标的下界只能是 0或1;使用 例:Dim a(-2 3) As 3) Integer 等价于: Dim a(0 To To 8, 0 To As Integer To后,下标的下界可以是-32768~32767,且下标 等价于: Dim a a(8, 0 To 3) As Integer 数组名为 ,是一维数组;数组下界为 -2,上界为3; 的下界始终小于下标的上界。 定义了一个二维数组,数组名为 a;下标 1的上界是 ,下界是 0; 数组中的元素是:a(-2)、 a(-1) 、 a(0)8 、 a(1)、 下标2的上界是3,下界是0;数组元素分别是 a(2)、 a(3);元素个数为6。 a(0,0)、 a(0,1)、 a(0,2)、a(0,3)、 a(1,0)、 a(1,1)、 a(1,2)、a(1,3)、 a(2,0)………………………a(8,3) 元素个数为9*4=36。
某个数组元素在数组中的 例:Dim S(30) 此数组是一维数组 位置。 Dim S(1 to 30) Dim S(3,4) 有两个下标,则此 数组是二维数组
由此可知:由具有一个下标的下标变量所组成的数 (2) 数组元素:数组中的每个变量。 组称为一维数组;而由具有两个或多个下标的下标 数组元素: S (1)、S(2)……S (30) 变量所组成的数组称为二维数组或多维数组。
定义数组时,需要注意以下几点: 1、数组名的命名规则和变量名命名规则相同,最好 做到“见名知义”。 2、在同一个过程中,数组名不能与变量名或常量名 同名,否则会出错。 3、在定义数组时,每一维的下标必须是常数,不能 是变量或表达式。 4、数组的类型通常是在As子句中给出,如果省略As 子句,则定义的是默认数组,也可以通过类型说明 符来指定数组的类型。 每一维大小:上界-下界+1 课本205页第1、2题 数组大小: 每一维大小的乘积
8.1 数组的概念 根据下标的 个数,决定 (1) 数组是数据的有序集合,即具有相同名字、 n是下标,必须放在一对 数组的维数 不同下标的下标变量来表示同一属性的一组数 紧跟在数组名后的圆括号 S是数组名 据集合。 中;可以含有若干个下标 一般格式为:S(只有一个下标,则 n) 变量。下标的作用是指出
例:Dim a%(10) …….. Print a$(3)
2)如果建立的是二维或多维数组,则在引用时必 须给出两个或多个下标。
例:Dim a(3,4) …… Print a(2,2)
3)引用数组元素时,其下标值应在建立数组时所 指定的范围内。
例:Dim a(10) …… Print a(12)
2.数组元素的输入
数组元素一般通过For循环语句及InputBox函 数输入。当数组较小或只需要对数组中的指定元素 赋值时,可以用赋值语句输入数组元素。 (举例:定义数组studName(10),分别输入学生 姓名) 多维数组元素的输入通过多重循环来实现。由 于VB中的数组是按行存储的(即先行后列),因此 把控制数组第一维的循环变量放在最外层循环中。 注意:当用InputBox函数输入数组元素时,如果要 输入的数组元素是数值类型,则应显式定义数组的 类型,或者把输入的元素转换为相应的数值。
第8章 数组
数组是一个有序的数据集合。本章主 要介绍了数组的定义、初始化和基本操作。
例:某班有30个学生,对本班的VB课程成绩进 行统计,求平均分,并统计高于平均分的学生 人数。
方法一:利用一个变量保存学生成绩,结合循环完 成求平均分.可是如果求高于平均分的学生人数,必 须重新输入所有学生成绩,这是不可行的。 方法二:定义30个变量,无法使用循环 方法三:使用数组score(1 To 30)完成,数组由 score(1) ……score(30)共30个变量组成,这样 就可以结合For循环完成程序
根据内存区开辟时机的不同,可以把数组 分为静态数组和动态数组。 静态数组:在编译时开辟内存区,用数组 常数或符号常量作为下标定维的数组。 静态数组的定义就是前面所讲的两种方式。 动态数组:在运行时开辟内存区,用变量 作为下标定维的数组。当程序没有运行时, 动态数组不占据内存。
8.3 数组的基本操作
创建一个长度为0的数组。
Array函数的语法格式为: 〈数组变量名〉= Array (〈数组元素值〉)
注意: 〈 数组变量名〉是预先定义的数组名,其后 1)使用Array函数创建的数组的下界一般受Option 无括号,作为数组使用,但作为变量定义,既 Base语句指定的下界决定;默认数组的下标从0开始。 没有维数,也没有上下界。注意:数组变量不 2)Array函数只适用于一维数组,即只能对一维数组进 能是具体的数据类型,只能是变体类型。 行初始化,不能对二维或多维数组进行初始化。
1.数组的引用 数组的引用即对数组各元素的引用(使 用)。方法是:在数组名后的括号中指定 要使用的数组元素下标。 数组元素 例:Dim a(3) 数组说明符 使用此数组下标为2的数组元素,即x=a(2) 注意区分数组定义和数组元素。
引用数组时需注意: 1)在引用数组元素时,数组名、类型和维数必须 与定义数组时一致。
8.4 数组的初始化
一般来说,数组变量可以通过以下3 种方式定义: 所谓数组的初始化,就是给数组的各元素赋 (1)显示定义为Variant变量。例如: 初值。在前面的课程中介绍了 InputBox和For语 Dim Numbers〈数组元素值〉是需要赋给数 as Variant 句为数组元素赋值,除了此方法之外, VB还提 (2)在定义时不指明类型。例如: 组各元素的值,各值之间用逗 供了Array 函数,可以使数组中程序运行之前初 Dim Numbers 号分开。如果不提供参数,则 (3)不定义而直接使用。 始化,得到初值。
3. 数组元素的输出 数组元素可以在窗体或图片框中使用Print 方法输出,也可以在多行文本框、列表框 或组合框中输出。 (举例:在窗体上显示输入的10个学生的姓 名)
4. 数组元素的复制
单个的数组元素可以像简单变量那样从一个数组 复制到另一个数组,而要复制整个数组则仍要使 用For循环语句。 二维数组中的元素可以复制给另一个二维数组中 的某个元素,也可以复制给一个一维数组中的某 个元素,并且反之亦然。
下标上界,即可以使用的下标的最大值。 定义数组适用范围。 8.1.1 数组的定义 只有一个下标上界,则表示一维数组; Public 建立公用 /全局数组,在标准模块中 当有两个或多个下标上界,则表示二维 定义。 数组应当先定义,后使用。在计算机中,数组 数组或多维数组。 Dim/Private 建立模块级数组,在窗体模块 占据一块内存区域,数组名是这个区域的名称,区 下标下界,即下标的最小值,在此格式 或标准模块中定义。 域的每个单元都有自己的地址,该地址用下标表述。 中只能为 0或1。一般情况,下标的下界 Dim/Static 建立局部数组,在过程中定义。 定义数组的目的就是通知计算机为其留出所需的空 默认为 0,省略不写;若希望从1开始, ReDim 建立局部数组,在过程中定义,用 间。 则可以在窗体层或模块层中使用 于动态数组。 “Option Base n”语句设置。 ( 1)定义数组的第一种格式: Dim 数组名( <下标1上界> [,<下标2上界>„] ) [As <类型>] 注意:1)当用Dim语句定义数组时,该语句把数值数组中的全 命名规则,遵循简单变量命名规则。 用来说明数组的类型。 部元素都初始化为0;而把字符串数组中滚动全部元素初始化为 名字只能由字母、数字和下划线组成。名字 如果省略,则定义数 空字符串。 的第一个字符必须是英文字母,最后一个字 组为默认的数据类 2 )注意区分“可以使用的最大下标值”和“元素个数”。“可 符可以是类型说明符。不能用 VB的保留字 型——Variant。 作变量名,但可以把保留字嵌入变量名中。 以使用的最大下标值”就是下标的上界;而“元素个数”则是 指数组中成员的个数,需要注意下标的下界是0还是1。
例8.3 编写程序试验Array函数。 Option Base 1 Private Sub Form_Click() Dim aaa As Variant myweek = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") myday2 = myweek(2) myday3 = myweek(4) Print myday2, myday3 aaa = Array(1, 2, 3, 4, 5, 6) For i = 1 To 6 Print aaa(i); 课本 206 页第 5 题 Next i End Sub
8.1.2 默认数组
在VB中,允许定义默认数组。所谓默认数组,就 是数据类型为Variant(默认)的数组。 在其他语言中,数组中的所有元素都属于同一个 数据类型;而中VB中,一个数组中的元素可以是 相同类型的数据,也可以是不同类型的数据。 通过定义默认数组,在同一个数组中可以存放各 种不同的数据,可以是一种“混合数组” 。 例:Dim a(5) 注意:默认数组一般定义为静态的,可以对各元素 赋予不同类型的数据,包括整型、字符串型、日 期和时间型等。
获取数组的下标的上界和下界值,可通过 LBound和UBound函数取得。 格式是: 被测试数组的维;对 LBound(数组名[,维]) 于一维数组,可省略 UBound(数组名[,维])“维”参数;对于多
被测试数组的名
维数组,则不能省略。
例:Dim a(1 To 100, 0 To 50, -3 To 4) 获取此数组各维的上下界。
<成员>是一个变体变量,是为 循环提供的,它实际代表的是 语法为:数组中的每个元素。 <数组>是一个 For Each 〈成员〉 In 〈数组〉 数组名,没有括 号和上下界。 [〈循环体〉] [Exit For] Next [〈成员〉]
用For Each...Next语句可以对数组元素进行处理,包 括查询、显示或读取。它所重复执行的次数由数组中 元素的个数确定,也就是说,数组中有多少个元素, 就自动重复执行多少次。例如: x的值处于不断的变化之中,开始执行 Dim a(1 To 6) 时,x是数组第一个元素的值,执行完 For Each x In a 一次循环体后,x变为数组第二个元素 的值……当x为最后一个元素的值时, Print x; 执行最后一次循环。X是一个变体变量, Next x 它可以代表任何类型的数组元素。 注意: For Each ....Next 语句不需要为其提供初值和终 注意:不能使用 For Each...Next 语句对普通的数组 值,而是根据数组元素的个数确定执行循环体的次数。 元素作“赋值”操作,因为语句中的〈成员〉表示 在数组操作中, For Each...Next语句比For...Next语句 数组元素的值,而不表示数组元素本身。但是可以 更方便,因为它不需要指明循环的条件。 对控件数组中每个控件的属性作赋值操作。
例: Dim A(8),B(3,2) Dim A(1 To 5) as String Dim B(-3A(2)=B(1,1) To 1) as String B(2,1)=A(3)
B(-2) = A(1)
张三
5. 数组的清除和重定义 数组一经定义,便在内存中分配了相应的存储空间, 其大小是不能改变的。因此,在一个程序中,同一个 数组只能定义一次。 清除数组的内容或对数组重新定义,可以使用Erase 语句来实现,语法格式: Erase 数组名[,数组名]……
使用Erase语句,只需给出数组 Erase语句用来重新初始化静态的数组元素,将其内 名,不带括号和下标。例如: 容清空。如果是数值数组,则把数组中的所有元素置 Dim A(10) 为0;如果是字符串数组,则把所有元素置为空字符 串;如果是变体数组,则所有元素置为“空”。 Erase A
8.3.2 For Each…Next语句 与For...Next语句类似,两者都用来执行指定重复次 数的一组语句。但For Each...Next语句专门用于数 组或对象集合(本书不涉及集合)中的每个元素。