第5章 数组与过程.doc
《第5章 数组与过程.doc》由会员分享,可在线阅读,更多相关《第5章 数组与过程.doc(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第5章 数组和过程本章涉及两个问题:(1)当需要处理的数据具有同一性质而且数据量大时,如果用变量存储数据是不合适的,这时只有用数组来实现比较方便。(2)Visual Basic应用程序是由过程组成的。过程设计和调试使程序设计简单化、模块化和功能化。可以这样说,在用Visual Basic设计应用程序时,除了定义常量、变量、控件外,全部工作就是编写过程。5.1 数组处理少量的数据,可以为每一个数据设计一个变量,一个变量存储一个数据。但如果数据量很大,就要用数组来存储数据了。例如:要记录一个班的30个同学的成绩时,总不能分别定义c1,c2,c30等30个变量来分别存储30项成绩。如果使用数组存储这
2、30个同学的成绩,我们只需要定义一个数组名,30个同学的成绩之间的区分靠数组的下标来表达。5.1.1 数组的概念1. 基本概念(1)数组:是同类型变量的一个有序的集合。这些同类型变量共用同一个名字数组名,它们之间的区别是以数组名后面跟上下标来表达的。(2)数组元素: 即数组中的变量。从形式上讲,数组名后面跟上下标就是数组元素,或者说带下标的数组名不再表示数组,而是表示数组中的一个变量数组元素。数组元素的表示形式:数组名(n1,n2,)。其中n1、n2表示元素在数组中的排列位置,称为“下标”。例如:A(3,2)表示二维数组A中第3行第2列上的那个元素。(3)数组维数: 由数组元素中下标的个数决定
3、,一个下标表示一维数组,二个下标表示二维数组,。VB中有一维数组、二维数组、最多60维数组。(4)下标:下标表示顺序号,每个数组元素有一个唯一的顺序号,下标不能超过数组声明时的上、下界范围。下标可以是整型的常数、变量、表达式,甚至还可以是一个数组元素。特别说明:这里所说的“下标”仅是用于数组元素的下标,在数组声明时,如果省略下界,数组声明的形式与数组元素的书写形式一样,但在数组声明时,写在数组名后园括号内的单个常量叫范围。2数组声明数组必须先声明后使用。声明数组就是让系统在内存中分配一个连续的区域,也就是表明同时定义相应的数组元素,为存储数据做准备。声明的内容:数组名、类型、维数、数组大小。一
4、般情况下,数组中各元素类型必须相同,但若数组为Variant时,可包含不同类型的数据。5.1.2静态数组静态数组的声明形式:语法: 数组名(,) As 类型 = TO 说明:(1)的写法是: TO ,也可以只写,这时表示省略了,其默认值为0,多数都是这种写法。(2)、必须是常数,不可以为表达式或变量。(3)最小为-32768,最大为32767;一维数组的大小(数组元素的个数)为:(-)+1;如果省略下界,一维数组的大小为:+1。(4) 如果省略类型,则为变体型。(5)个数决定数组的维数,最多60维。例如:Dim A(10) As Integer 声明了数组A、整型、一维数组、有11个数组元素,
5、下标的范围是010。例如:Dim AB(-5 To 5) As String*3声明了数组AB、字符串型、一维数组、有11个元素,下标的范围是-55,每个元素最多存放3个字符。例如:Dim ABC(2 To 5, 4) As Long声明了数组ABC、长整型、二维数组、第一维下标范围为25,第二维下标的范围是04,占据4x 5个长整型变量的空间。(6)上面的语法形式只表达了声明一个数组的简单情况,实际上可以在一行中声明多个数组。例如:Dim A(10), B(20), C(5) As Double声明了数组A、B和C三个数组。5.1.3 动态数组1. 动态数组的使用建立动态数组的目的是希望在程
6、序的运行过程中改变数组的大小,建立动态的数据存储区。往往在实际编程会有这样的情况发生,在程序开始运行时只知道需要一个数据区,但并不知道需要多大的数据区,只在程序运行一段时间后,才会知道需要多大的数据区。动态数组是VB的最大特点之一,许多程序设计语言不具有这一特点。建立动态数组的方法是:利用Dim、Private、Static、Public语句声明园括号内为空的数组,然后在过程中用ReDim语句指明该数组的大小。动态数组的声明形式:语法:ReDim Preserve 数组名(,) As 类型 = TO 说明: (1)语法形式只描述了声明一个数组的简单情况,实际上可在一行中声明多个数组。(2)可以
7、是常量,也可以是有了确定值的变量。(3)数组名必须与Dim中的声明语句保持一致。(4)类型可以省略,若不省略,必须与Dim中的声明语句保持一致。(5)如果使用了 Preserve 关键字,则只能重新定义数组最末维的大小,不能改变维数的数目。使用 Preserve 关键字的目的是保留改变之前数组中的数据。如果数组就是一维的,则可以重新定义该维的大小并保留原来的数据。如果数组是二维或多维的时,则只能改变其最末维。同时仍保留数组中的数据。只能改变的上界。【例5.1】下面的代码段第一次使用ReDim 语句时定义了动态数组A,第二次使用带“Preserve” 关键字的ReDim语句时改变了数组A的大小,
8、但保留了原来的数据。图5.1给出的输出结果证明了这一点。Dim A() As IntegerPrivate Sub Form_Click()ReDim A(10) As IntegerFor i = 0 To 10A(i) = iNext iReDim Preserve A(15)For i = 0 To 15Print ; A(i);Next iEnd Sub图5.1 例5.1输出结果 (6) 多次使用不带“Preserve” 关键字的ReDim语句不断可以改变数组的大小,还可以改变数组的维数。但每次使用ReDim语句都会使原来数组中的数据丢失。【例5.2】下面的代码段第二次使用ReDim语
9、句时改变了数组A的大小及维数,但丢失原来数组中的数据。图5.2给出本例代码运行的输出结果。Dim A() As IntegerPrivate Sub Form_Click()ReDim A(10) As IntegerFor i = 0 To 10 A(i) = 2 * iNext iFor i = 0 To 10 Print ; A(i);Next iPrint: PrintReDim A(10, 2)For i = 0 To 2 For j = 0 To 10 Print ; A(j, i); Next j PrintNext iEnd Sub图5.2例5.2输出结果2. 静态数组与动态数
10、组区别静态数组:声明时确定了大小的数组。动态数组: 声明时没有给定数组大小(省略了括号中的上界与下界),使用时需要用ReDim语句重新指出其大小。使用动态数组的优点是根据用户需要,有效地利用存储空间,它是在程序执行到ReDim语句时才分配存储单元,而静态数组是在程序编译时分配存储单元。3. 数组的清除和重新定义在一个程序中,同一数组只能用Dim语句定义一次。但有时可能需要清除数组的内容或对数组重新定义,这可以用Erase语句来实现。语法:Erase数组名,数组名功能:重新初始化静态数组的元素,或者释放动态数组的存储空间。说明:(1)在Erase语句中,只需给出数组名,不带括号和范围。(2)在E
11、rase语句用于静态数组时,如果这个数组是数值数组,则把数组中的所有数值元素置为0;如果是字符串数组,则把所有数组元素置为空字符串。(3)当把Erase语句用于动态数组时,将删除整个数组结构并释放该数组所占用的内存区。也就是说,动态数组经Erase语句执行后,即不复存在;而静态数组经Erase后,仍然存在,只是其内容被清空。(4)Erase语句释放动态数组所使用的内存,在下一次引用该动态数组之前,必须用ReDim语句重新定义该数组。【例5.3】下面的代码段指出:使用Erase语句后,数组A仍然存在,只是其中数据不存在了;而数组B所占存储空间被释放,所以,如果将下面代码段中加下划线的行前面的单引
12、号去掉,让这一行由注解行变成程序行,引用下标变量B(1),将会程序运行错误。Dim A(10) As IntegerPrivate Sub Form_Click()For i = 0 To 10 A(i) = 2 * i: Print ; A(i);Next iPrintReDim B(5)For i = 0 To 5 B(i) = 3 * i: Print ; B(i);Next iPrintErase A, BFor i = 0 To 10 Print ; A(i);Next iPrintPrint B(1)End Sub图5.3 例5.3输出结果4. 数组下标界的测试函数有时需要知道数组
13、的上界值和下界值,这可以通过LBound和UBound函数来测试。语法:LBound(数组名,维)UBound(数组名,维)功能:LBound函数返回数组指定维的下界。UBound函数返回数组指定维的上界。说明:(1)格式中的“维”是指定要测试数组的第几维。两个函数一起使用,即可确定一个数组的大小。(2)对于一维数组来说,“维”可以省略。如果要测试多维数组,“维”不能省略。【例5.4】使用LBound函数和UBound函数。代码如下:Private Sub Form_Click()Dim A(10), B(10, 8, -4 To 5) As IntegerPrint LBound(A), U
14、Bound(A)PrintPrint LBound(B, 1), UBound(B, 1)Print LBound(B, 2), UBound(B, 2)Print LBound(B, 3), UBound(B, 3)End Sub程序运行的输出结果如图5.4所示。图5.4 例5.4输出结果5.1.4数组的基本操作对数组的操作实际上主要是引用数组元素。我们把数组元素当成一个普通变量看待,普通变量能够出现的地方,数组元素就能出现。数组元素的写法:数组名(下标1,下标2,)数组元素中的下标可以是常量、变量、表达式。注意与数组声明时的下标范围(省略下界)相区别。数组声明时的下标范围只能常量。1. 数
15、组元素的赋值例如:Dim A(1 To 10) As IntegerFor i=1 To 10 A(i)=100 * iNext iA(10)=Int(sin(1)+cos(2)+100A(9)=A(10)A(8)=InputBox()For i=1 To 10 Print A(i)*100Next i2数组的赋值在VB6.0中可以直接将一个数组的值赋值给另一个数组。这VB的特点。例如:Private Sub Form_Click()Dim a(3) As IntegerDim b() As Integera(0) = 0: a(1) = 1: a(2) = 2: a(3) = 8b = aF
16、or i = 0 To 3Print b(i)Next iEnd Sub注意:(1)赋值号两边的数据类型必须一致。(2)如果赋值号左边的是一个动态数组,则赋值时系统自动将动态数组ReDim成右边相同大小的数组。(3)如果赋值号左边的是一个大小固定的数组,则数组赋值出错。5.1.5 控件数组1控件数组的概念控件数组是由一组相同类型的控件组成的,它们共用一个控件名。控件数组适用于若干个控件执行的操作相似的场合,控件组共享同样的事件过程。控件数组通过索引号(属性中的Index)来标识各控件,第一个下标是0 。如:Text1(0)、Text1(1)、Text1(2)、Text1(3)2控件数组的建立控
17、件数组的建立有两种方法,一种是在界面设计时就建立,二是在运行时添加。在设计时建立的具体步骤如下:(1)在窗体上画出某控件,并进行属性设置。(2)选中该控件进行“复制”和“粘贴”操作,系统提示“是否建立控件数组”,选择是即可。多次粘贴就可以创建多个控件元素。 (3)进行事件过程的编程。在运行时添加控件数组的具体步骤如下:1)在窗体上画出某控件,设置该控件的Index值为0,表示该控件为数组。2)在编程时通过Load方法添加其余若干个元素,也可以通过Unload删除某个添加的元素。3)每个添加的控件数组通过Left 和Top属性,确定其在窗体上的位置,并将Visible设置为True。5.1.6
18、数组的应用数组的应用主要体现在:(1)将外界一组同性质的数据输入到数组中;(2)将存储在数组中的数据输出转移其它数据结构;(3)对存储在数组中的数据进行查找、排序、统计分析等操作。下面用一些例题来说明数组的应用。【例5.5】通过键盘输入10个数,计算这10个数的累计和与平均值。代码如下,程序运行的输出结果如图5.5所示。Private Sub Form_Click() 单击窗体执行该过程Dim s, a(10) As Singles = 0For i = 1 To 10 a(i) = InputBox(输入第 & i & 个值:) Print ; a(i); s = s + a(i)Next
19、iPrint: Print s= ; s, average= ; s / 10End Sub图5.5 例5.5输出结果【例5.7】对一个数组中的数据排序。分析:对一个数组中的数据排序(升序)最基本的方法是:先找数组中最小的数,假设用第一个数组元素存储的数组中最小的数,将第一个数组元素与后面每个数组元素比较,如果后面的数组元素大于第一个数组元素,则交换两个数组元素的值,当比较完后面所有数组元素,就找到全数组中最小的值,而且存储在第一个数组元素中。下一步找次小的数据并存储在第二个数组元素中。将全数组中最小数据存储于第一个数组元素中,从数组中排除这个最小数,再从数组剩余的数据中找最小数(也就是全数组
20、中的次小数)存储于第二个数组元素中。再找第三个数并存储于第三个数组元素中。最后必然是倒数两个数组元素的数据进行比较。下面程序代码中,有下划线的部分就是排序程序,用二重循环实现。请注意外层循环控制变量i的起点是1,终点是(n1),表明每一步找一个最小数并存储于a(i)中。内层循环控制变量j的起点是(i+1),终点是n,控制被比较的对象(它们是a(i)后面的所有数组元素单元)。要特别注意排序程序内外二重循环变量的起点、终点的取值。如果比较过程出现后面的数据比前面的数据大,表明反序,要交换两个数组元素中的数据,这就用到前面第3章学习到的交换两个变量内容的方法。程序代码如下,程序运行的输出结果如图5.
21、7所示。Private Sub Form_Click() 单击窗体执行该过程Dim a() As Singlen = InputBox(输入数组规模:)ReDim a(n)Print 原始数据:For i = 1 To n a(i) = InputBox(输入数组的第 & i & 个值) Print ; a(i);Next iPrintFor i = 1 To n - 1 For j = i + 1 To n If a(i) a(j) Then t = a(i): a(i) = a(j): a(j) = t End If Next jNext iPrint 排序后的数据:For i = 1 T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 数组与过程 数组 过程
限制150内