




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章 数组,在实际处理数据时,经常是大批量同类数据需要处理,因此使用循环处理每一条数据的方法在编程中经常用到。而一条数据或一类数据我们一般用一种特殊的变量来定义,就是数组。 例如:学生的成绩 在VB中,把具有同一名字、不同下标的下标变量称为数组。 一般形式如下:S(n) 其中,S称为数组名,n是下标 一维数组:具有一个下标的下标变量所组成的数组 多维数组:具有两个或多个下标的下标变量所组成的数组,7.1 数组的定义,声明一个数组和声明简单变量有所不同,下面是数组定义的语句: Dim:在过程、窗体模块级、标准模块级中都可以定义声明 Private:在窗体模块级、标准模块级中都可以定义声明 ReDim:在过程中使用,声明动态数组的下标时使用 Static:在过程中使用 Public:在标准模块级中,定义全局数组 注意: 数组在使用前必须定义声明,这和简单变量是不同的,简单变量不声明直接使用是允许的。,格式:下面的2种格式适合上面5种定义关键字任意一种,现以Dim说明。 格式1:Dim 数组名(下标上界) As 类型名称 上面格式用于定义一维数组,例如: Dim a(4),b(5) As String 声明了数组a和数组b Dim f1,z(3) 声明了变量f1和数组z,说明: 数组是变量的一种,因此名称的书写规定和简单变量名称一样。并且在一个使用区域内,数组名不可以和简单变量名相同。 数组必须先定义,后使用。一个数组为一个数组变量。 定义声明数组时,括弧内的下标上界必须是一个常量或常量表达式,Dim a(5+n)是错误的声明方法。使用数组时,下标可以是一个数值型变量。通过下标变量的值的变化去访问下标指定的元素。 声明时系统通过数组的上界决定了数组中元素的个数。默认情况是下标下界为0。,当希望下标下界从1开始时,可以使用Option Base 1命令来设置(此命令的Option Base 0为默认情况)。这条命令只能出现在窗体层或模块层,不能出现在过程中,并且必须放在数组定义之前。该命令适用于多维数组。 当声明数组时使用了As 数据类型,数组中的每一个元素的类型就都被指定成为声明的类型。 如果不使用As数据类型,则数组的每一个元素的类型为变体类型,这种方式在使用中非常常见。 当声明了数组的类型后,系统自动将每一个元素赋予初值,数值型数据赋值为0,字符串型赋值为空字符串(“”),变体类型赋值为空。 注意区分“可以使用的最大下标值”(指的是下标值的上界)和“元素个数”(数组中成员的个数)。,格式2:,Dim 数组名(下界 To 上界 ,下界 To 上界.) As 类型名称 说明: 此格式可以使用逗号分隔符分隔多维数组下标上界,来声明多维数组。此格式已经包含了格式1的格式。格式1的所有说明也适用于格式2,在格式2中,可根据需要指定数组下标的下界。 举例: 声明数组P1,用于存放1980年到1995年的人口数量。 Dim P1(1980 to 1995) As Integer 下界从1980到1995的一维数组。 声明数组P2,用于存放2000年1月到2005年12月每月的产值。 Dim P2(2000 to 2005,1 to 12) 二维数组,说明: 当没有下界时,下界从Option Base 语句定义值开始;如果未使用Option Base 语句定义,定义数组中也没有说明下界则下界从0开始。 当使用 To 定义数组下标的上下界时,下界必须小于上界,数组下标的上下界范围可以从-32768+32767。 数组的类型可以使用类型声明符声明,但是声明符要放在数组名的后面且括弧的前面,例如:Dim P1%(1 To 9)。 在程序中有时需要求出数组的下标的上下界,可以使用下面2个函数: LBound(数组名,维):指定数组的指定维数的下标下界 UBound(数组名,维):指定数组的指定维数的下标上界 上面举例中的P2,LBound(P2,2)返回1,UBound(P2,2)返回12。 在同一过程中,数组名和变量名不能同名,否则会出错。,默认数组:数据类型为Variant的数组。,所谓默认数组就是没有声明数据类型的数组,默认数组的元素的数据类型为变体类型。 因此,对于默认数组来说,同一数组中可以存放各种不同的数据。这在我们编制程序中是非常有用的。 例:请编制程序,窗体上有一个列标框,列表框的项目上有一些商品,单击一个项目在标签框中显示商品的价格。,Option Base 0 Dim sp(5, 1) Private Sub Form_Load() sp(1, 0) = “康师傅方便面“ sp(2, 0) = “华龙方便面“ sp(3, 0) = “巧面馆方便面“ sp(4, 0) = “小神龙干脆面“ sp(5, 0) = “中萃方便面“ sp(0, 0) = “华丰方便面“ sp(1, 1) = 1.2 sp(2, 1) = 1.3 sp(3, 1) = 1.1 sp(4, 1) = 0.8 sp(5, 1) = 1.4 sp(0, 1) = 0.9,For i = 0 To UBound(sp, 1) List1.AddItem sp(i, 0) Next i End Sub Private Sub List1_Click() Label1.Caption = List1.Text + Str(sp(List1.ListIndex, 1) + “元/袋“ End Sub,7.2 静态数组与动态数组,1、数组的划分: 数组使用时需要的内存空间远远大于普通变量的空间,所以我们按内存开辟空间的时机来划分数组,在程序编译时开辟内存区的数组称为静态数组,运行时根据需要开辟内存区的数组称作动态数组。 2、如何定义静态数组和动态数组,静态数组的定义:,使用数值常量或符号常量定义下标的数组为静态数组。上一节讲到的所有例子,都是定义的静态数组,可以使用下面4种定义关键字。 Dim:在过程、窗体模块级、标准模块级中都可以定义声明 Private:在窗体模块级、标准模块级中都可以定义声明 Static:在过程中使用 Public:在标准模块级中,定义全局数组,动态数组的定义:,首先先声明一个没有下标的数组名,然后在使用时再次声明数组的下标。 声明数组名称:可以使用下面的关键字声明,声明时不要写下标最大值。 Dim:在过程、窗体模块级、标准模块级中都可以定义声明 Private:在窗体模块级、标准模块级中都可以定义声明 Public:在标准模块级中,定义全局数组 声明下标和维数:在过程中使用redim再次声明已经声明过的但没有声明下标的数组。 ReDim:在过程中使用,声明动态数组的下标时使用,例如:,Dim array1() Dim arrayno As Integer - Private Sub Command1_Click() arrayno = Val(Text1.Text) ReDim array1(arrayno) End Sub,ReDim命令格式:,ReDim Preserve 数组名(下标上界,下标上界) As 类型 说明: 下标的定义和上一节中的下标定义一样。 As 类型:如果使用As定义类型,必须和声明动态数组名称时声明的类型一致,否则报错。 可以使用ReDim直接定义数组,这时,As 数据类型这一项就用来定义数组的数据类型。 当在过程中直接使用ReDim定义数组,则维数可达60维;在窗体层或模块层定义后,再到过程中使用ReDim定义的动态数组最多只能定义8维。 使用ReDim直接定义的数组,不可以再次使用ReDim定义不同维数的数组。, Preserve:如果有此关键字,则在重新定义数组时,数组中原来的内容不会被清除。 可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型。 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。,数组的清除和重定义,数组的清除: 格式:Erase 数组名,数组名. Erase语句用来重新初始化静态数组的元素或者释放动态数组的存储空间。 Erase 根据是静态数组还是动态数组,来采取完全不同的行为。,Erase 无需为固定大小的数组恢复内存。Erase 按下表来设置固定数组的元素:,Erase 释放动态数组所使用的内存。在下次引用该动态数组之前,程序必须使用 ReDim 语句来重新定义该数组变量的维数。 也就是说,动态数组经Erase后即不复存在,而静态数组经Erase后仍存在,只是其内容被清空。,数组的重定义:,静态数组经定义后不可以在其作用域内重定义,即便使用清除命令也不能清除静态数组。 动态数组可以使用清除命令将动态数组的内存空间释放,再次使用时必须再次用ReDim重新定义。,7.3 数组的基本操作,1、数组元素的引用 定义了数组之后就可以使用数组了,数组根据定义时下标的上下界来确定有多少个元素。使用时将数组元素的具体下标写清楚。 例如: Option Base 1 要求声明的数组元素下标从1开始 Dim a(5) 声明了一个数组a,它有5个元素 a(1)=78 将a数组中下标为1的元素内容赋值78 a(5)=56 将a数组中下标为5的元素内容赋值56 Print a(5) 打印a数组元素下标为5的内容,注意:Dim a(5)和a(5)=56两个语句中的a(5)代表不同的内容,声明语句中的a(5)是数组说明符;而赋值语句中的a(5)代表数组a中下标为5的元素,是对这个元素的引用。 说明: 引用数组元素时,必须和定义数组时的数组名、下标范围、数据类型、维数一致。 下标不可以超出定义的范围。 维数必须和定义的一致。,2、数组元素的输入,一般来说,数组元素的输入是通过for语句和接受数据语句一起来实现的,当for语句循环时,可以用循环变量作为数组元素的下标,这样就可以访问到每一个元素。当使用到多维数组时可以使用for语句的多重循环实现。 例如:,Dim a() As Integer Dim mxbmin As Integer Dim mxbmax As Integer Private Sub Command1_Click() mxbmin = InputBox(“请输入下标下界“, “输入下界“) mxbmax = InputBox(“请输入下标上界“, “输入下界“) If mxbmin mxbmax Then mmm = mxbmin mxbmin = mxbmax mxbmax = mmm End If ReDim a(mxbmin To mxbmax) For i = mxbmin To mxbmax a(i) = Int(Rnd * 200) Next i End Sub,3、数组元素的输出,可以同输入一样使用for循环语句,也可以使用For Each语句(后面讲到),我们将产生的随机数输出。 例如:,For i = LBound(a) To UBound(a) Print a(i) Next i,4、数组元素的复制,单个数组元素可以像简单变量一样使用。将上面产生的数组元素中的数据排序。,For i = LBound(a) To UBound(a) For j = i + 1 To UBound(a) If a(i) a(j) Then mmm = a(i) a(i) = a(j) a(j) = mmm End If Next j Next i,也可以使用冒泡排序法:冒泡排序法是将数据按照上升的方式移动,经过一遍遍比较排序最后完成排序。,第三次冒泡: 3和5不换:3 5 4 7 8 5和4交换:3 4 5 7 8 第四次冒泡: 3和4不换:3 4 5 7 8,例如:7 3 5 8 4 第一次冒泡: 7和3交换:3 7 5 8 4 7和5交换:3 5 7 8 4 7和8不换:3 5 7 8 4 8和4交换:3 5 7 4 8 第二次冒泡: 3和5不换:3 5 7 4 8 5和7不换:3 5 7 4 8 7和4交换:3 5 4 7 8,5、For Each .语句,格式:For Each 成员 In 数组 循环体 Exit For Next 成员 说明: 成员是一个变体变量,在循环体中可以使用此变量代表数组的一个元素。 这种For循环是专门针对数组的方式实现的,它的循环次数是由数组的元素个数决定的,它自动遍历数组中的每一个元素,并将元素的值赋给成员变量,不管数组元素的下标从多少到多少,每个元素都会被赋值到成员变量中一遍。,For Each M In a Print M Next M,上面的输出可以写成下面的方式:,For EachNext语句比ForNext语句更方便,因为不需要指明循环结束的条件。,7.4 数组的初始化,数组的初始化 就是给数组的各元素赋初值。用赋值语句和Inputbox函数可以为数组元素赋值,但效率太低。 在使用数组时,需要将一批数据放入数组元素中,可以使用下面函数直接将数组元素的赋值在一条命令中完成,这样节省了时间,节省了书写程序的麻烦。,Array函数,格式: 数组变量名=Array(数组元素值) 例如:WeekDay=Array(“Mon“,“Tue“,“Wed“,“Thu“,“Fri“,“Sat“,“Sun“) 使用Array函数创建了一个数组,将数组赋值给WeekDay变量,而未经过声明的变量WeekDay此时经过赋值成为一个数组变量。数组的下标受Option Base语句限制。,说明: 所需的数组元素值是一个用逗号隔开的值表,这些值用于给变体变量所包含的数组的各元素赋值。如果不提供参数,则创建一个长度为 0的数组。 数组变量不能是具体的数据类型,只能是变体类型 数组变量名不可以在本命令之前声明为数组。 数组变量名可以有3种方式: 显示声明为变体变量。 声明时不指定类型。 不声明直接使用。 注意:此函数只用于一维数组。,7.5 控件数组,1、基本概念 控件数组由一组相同类型的控件组成,这些控件共用一个相同的控件名称。控件数组中的每个控件都有一个唯一的索引号,等同于普通数组中的下标,所有控件数组中的元素的name属性一样。 在控件数组的事件中,所有控件数组中的控件都触发同一事件,例如:有3个按钮控件,当他们是控件数组,单击任何一个按钮都将触发同一单击事件。如何区分是哪一个按钮被按下呢?先学习下面内容。,2、建立控件数组,方法一: 1.在窗体上画一个控件。 2.选中这个控件,进行复制/粘贴操作,系统提问“创建一个控件数组吗?” 3.选中“是”,将创建为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 第三方医学检验市场2025年行业规范与发展策略报告
- 氢能未来:2025年氢燃料电池汽车加氢站建设成本与布局策略研究
- 自动驾驶卡车在农产品物流运输中的保鲜技术与应用前景报告
- 汽车后市场汽车用品品牌忠诚度研究报告:2025年市场分析
- 特色乡村旅游项目2025年旅游目的地形象塑造评估报告
- 智能家电交互界面设计-洞察及研究
- 分布式发电系统故障诊断-洞察及研究
- 城市绿化对生物多样性价值-洞察及研究
- 机器学习在食品品质检测中的应用-洞察及研究
- 公众号数据泄露风险研究-洞察及研究
- 宁夏红墩子煤业有限公司红二煤矿环评上报版
- 空间中的“爱情买卖二次元手游”玩家的数字身体与爱欲张力研究
- 建设项目概算表(模板)
- 小提琴培训行业供需趋势及投资风险研究报告
- 深静脉血栓预防及护理课件
- 心律失常临床诊疗指南
- 食品存储和保鲜技巧
- 《现代服务业》课件
- 大学生毕业论文写作教程全套教学课件
- 肺部感染性疾病课件
- 《交通运输概论》 课件 第五章 铁路运输系统(二)
评论
0/150
提交评论