资源预览内容
第1页 / 共46页
第2页 / 共46页
第3页 / 共46页
第4页 / 共46页
第5页 / 共46页
第6页 / 共46页
第7页 / 共46页
第8页 / 共46页
第9页 / 共46页
第10页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第7章 数组,从存储角度看,前面使用的变量都是相互独立的、无关的,通常称它们为简单变量。但如果处理将200个学生的成绩按大小顺序排序这类问题,只使用简单变量将会非常麻烦,而利用数组却很容易实现。本章讲述VB数组的基本概念和使用方法,主要内容有:数组的概念、数组的定义及应用、可调数组的概念及应用、控件数组的概念及应用。,退出,7.1 数组的概念 7.2 一维数组 7.3 二维数组 7.4 可调数组 7.5 控件数组,7.1 数组的概念,在实际应用中,常常需要处理相同类型的一批数据。例如,为了处理100个员工的工资,可以用S(1),S(2),S(100)来分别代表每个员工的工资,其中S(1)代表第一个员工的工资,S(2)代表第二个员工的工资。在VB中,把一组相互关系密切的数据放在一起并用一个统一的名字作为标志,这就是数组。,数组中的每一个数据称为数组元素,用数组名和该数据在数组中的序号来标识。序号又称为下标,数组元素又称为下标变量。例如,S(2)是一个数组元素,其中的S称为数组名,2是下标。在使用数组元素时,必须把下标放在一对紧跟在数组名之后的括号中。S(3)是一个数组元素,而S3是一个简单变量。 如果只用一个下标就能确定某个数组元素在数组中的位置,这样的数组称为一维数组。如果用两个或多个下标才能确定某个数组元素在数组中的位置,则数组分别称为二维数组或多维数组。,7.2 一维数组,7.2.1 一维数组的定义 数组应当先定义后使用,数组的定义又称为数组的声明或说明。 对于固定大小的一维数组,用如下格式进行定义: 说明符 数组名(下标)As 类型 例如:Dim y(5)As Integer 定义了一个一维数组,该数组的名字为y,类型为Integer,占据6个(05)整型变量的空间。,说明: (1)“说明符”为保留字,可以为Dim,Public,Private,Static中的任意一个。在使用过程中可以根据实际情况进行选用。本章主要讲述用Dim声明数组,其它参数的意义在8.4节介绍。定义数组后,数值数组中的全部元素都初始化为0,字符串数组中的全部元素都初始化为空字符串。 (2)“数组名”的命名遵守标识符规则。 (3)“下标”的一般形式为“下界 to 上界”。 下标的上界、下界为整数,不得超过Long数据类型的范围,并且下界应该小于上界。如果不指定下界,下界默认为0。,(4)要注意区分“可以使用的最大下标值”和“元素个数”。 (5)“As类型”用来说明“数组元素”的类型,可以是Integer,Long,Single,Double,Currency,String(定长或变长)等基本类型或用户定义的类型,也可以是Variant类型。如果省略“As类型”,则数组为Variant类型。 (6)在同一个过程中,数组名不能与变量名同名,否则会出错。 (7)可以通过类型说明符来指定数组的类型。 例如:Dim A%(5),B!(3 To 5),C#(12),7.2.2 一维数组的引用 数组的引用通常是对数组元素的引用。一维数组元素的表示形式为: 数组名(下标) 一般通过循环语句及InputBox函数、文本框给数组输入数据。数组的输出一般用Print方法、标签或文本框实现。,【例7.2】编写程序,把输入的10个整数按逆序输出。 Private Sub Command1_Click() Dim a(10)As Integer,i% Print 输入的数据为 For i = 1 To 10 a(i)= InputBox(请输入一个整型数) Print a(i), Next i Print Print 逆序输出为 For i = 10 To 1 step -1 Print a(i), Next i End Sub,7.2.3 一维数组的应用举例 【例7.3】从键盘上输入40人的考试成绩,输出高于平均成绩的分数。 分析:该问题可分三部分处理:一是输入40个人的成绩;二是求平均分;三是把这40个分数逐一和平均成绩进行比较,若高于平均成绩,则输出。,程序如下: Private Sub Command1_Click() Dim score(40)As Single,aver!,i% aver = 0 For i = 1 To 40 score(i)= InputBox(请输入成绩) aver = aver + score(i) Next i aver = aver / 40 For i = 1 To 40 If score(i) aver Then Print score(i) Next i End Sub,【例7.4】从键盘上输入10个整数,把这些数按由小到大的顺序排序输出。 排序的方法很多,如选择法、冒泡法等。这里介绍最容易理解的“冒泡法”。 设10个数存放在A数组中,分别为:A(1)、A(2)、A(3)、A(4)、A(5)、A(6)、A(7)、A(8)、A(9)、A(10)。 第1轮:先将A(1)与A(2)比较,若A(1)A(2),则将A(1)、A(2)的值互换,否则,不作交换;这样处理后,A(1)一定是A(1)、A(2)中的较小者。,再将A(1)分别与A(3)、A(10)比较,并且依次作出同样的处理。最后,10个数中的最小者放入了A(1)中。 第2轮:将A(2)分别与A(3)、A(10)比较,并依次作出同第1轮一样的处理。最后,第1轮余下的9个数中的最小者放入A(2)中,亦即A(2)是10个数中的第二小的数。 照此方法,继续进行第3轮 直到第9轮后,余下的A(10)是10个数中的最大者。 至此,10个数已从小到大顺序存放在A(1)A(10)中。,为简单起见,我们以7,5,3三个数为例,再做说明: 第1轮:找出最小值3作为第一个数组元素 7 5 3 比较7和5,75,需要交换,交换后的序列为5 7 3; 5 7 3 比较5和3,53,需要交换,交换后的序列为3 7 5; 第2轮:找出剩下的元素中的最小值5作为第二个数组元素 3 7 5 比较7和5,75,需要交换,交换后的序列为3 5 7。 剩下的一个元素7为三个元素中的最大者,排序完成。,程序如下: Private Sub Command1_Click() Dim t%,i%,j%,a(10)As Integer For i = 1 To 10 a(i)= InputBox(输入一个整数) Next i Print 输入的10个整数为 For i = 1 To 10 Print a(i), Next i Print,For i = 1 To 9 For j = i + 1 To 10 If a(i) a(j)Then t = a(i):a(i)= a(j):a(j)= t Next j Next i Print 排序后的结果为 For i = 1 To 10 Print a(i), Next i End Sub,【例7.5】随机产生10个两位整数,找出其中最大值、最小值。 分析:该问题可以分为两部分处理:一是产生10个随机整数,并保存到一维数组中;二是对这10个整数求最大、最小值。 程序代码为: Private Sub Command1_Click() Dim min%,max%,i%,a(10)As Integer Randomize,For i = 1 To 10 a(i)= Int(Rnd * 90)+ 10 Next i Print 产生的随机数为 For i = 1 To 10 Print a(i), Next i Print min = a(1):max = a(1),For i = 2 To 10 If a(i) max Then max = a(i) If a(i) min Then min = a(i) Next i Print 最大值为 Print max Print 最小值为 Print min End Sub,7.3 二维数组,假如有30个学生,每个学生有5门考试成绩,如何来表示这些数据呢?VB中可以用有两个下标的数组来表示,如第i个学生第j门课的成绩可以用S(i,j)表示。其中i表示学生号,称为行下标(i1,2,30);j表示课程号,称为列下标(j1,2,3,4,5)。有两个下标的数组称为二维数组。,7.3.1 二维数组的定义 对于固定大小的二维数组,可以用如下格式进行定义: 说明符 数组名(下界to上界,下界to上界)As 类型 例如:Dim T(2,3)As Integer定义了一个二维数组,名字为T,类型为Integer,该数组有3行(02)4列(03),占据12(34)个整型变量的空间,如图7-3所示。,说明: (1)可以将二维数组的定义方法推广至多维数组的定义。 例如:Dim D(3,1 To 10,1 To 15)定义了一个3维数组,大小为 4 10 15。注意在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组,尤其是Variant 数组,因为他们需要更大的存储空间。 (2)在实际使用时,可能需要数组的上界值和下界值,这可以通过LBound函数和UBound函数来求得。其格式为: LBound(数组名,维) UBound(数组名,维) 这两个函数分别返回一个数组中指定维的下界和上界。,7.3.2 二维数组的引用 二维数组的引用和一维数组基本相同,格式为: 数组名(下标1,下标2) 对二维数组进行赋值或输出时,一般采用二重循环来实现。,7.3.3 二维数组的应用举例 【例7.8】打印4名同学的英语、数学、法律3门课的考试成绩,并计算出每个同学的平均成绩。 分析:把4名同学的姓名及各科的考试分数分别存入一个一维字符串数组xm(4)和一个二维数值数组a(4,3)中,然后对数组(主要是二维数组)进行处理。,程序如下: Private Sub Command1_Click() Dim a(4,3)As Single,xm(4)As String * 10,i%,j%,aver! Print Tab(25);成绩表 Print Print 姓名;Tab(15);英语;Tab(25);数学; Print Tab(35);法律;Tab(45);平均分 Print,For i = 1 To 4 aver = 0 xm(i)= InputBox(输入姓名) Print xm(i); For j = 1 To 3 a(i,j)= InputBox(输入 & xm(i)& 的一个成绩 ),aver = aver + a(i,j) Next j aver = aver / 3 Print Tab(15);a(i,1);Tab(25);a(i,2); Print Tab(35);a(i,3);Tab(45);aver Print Next i End Sub,7.4 可调数组,通过前两节的学习,我们知道,定义数组,是用数值常数或符号常量定义数组的维数及下标的上、下界。VB编译程序在编译时为数组分配了相应的存储空间,并且在应用程序运行期间,数组一直占据这块内存区域,这样的数组称为固定数组。但是,在实际应用中,有时事先无法确定到底需要多大的数组,数组应定义多大,要在程序运行时才能决定。如果定义的数组过大,显然会造成内存空间的朔选 可调数组提供了一种灵活有效的管理内存机制,能够在程序运行期间可以根据用户的需要随时改变数组的大小。,7.4.1 可调数组的定义 可调数组的定义分为两步: 第一步:声明一个没有下标参数的数组。 格式为: 说明符 数组名()As 类型 第二步:引用数
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号