资源预览内容
第1页 / 共42页
第2页 / 共42页
第3页 / 共42页
第4页 / 共42页
第5页 / 共42页
第6页 / 共42页
第7页 / 共42页
第8页 / 共42页
第9页 / 共42页
第10页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第5章 数组与自定义数据类型 前面章节中所用的数值型、字符型、布尔类型等数据类型称 为VB的标准数据类型,通过一个变量存取一个数据,该类变量 称为简单变量。例如求3名同学的平均身高时,就可定义同类型 的变量a1、a2和a3表示3名同学的身高,但如果要求100名同学 的平均身高,采用100个简单变量表示100名同学的身高,在数 据存储与处理时就比较繁琐。又如, 在描述一个人的基本情况 时,可能会涉及到“姓名、性别、出生日期、电话号码、身高 、婚姻状况”等数据,这些数据类型不同,但却相互关联,如 果使用不同类型的简单变量,在数据存储和处理时也会带来诸 多的不便。通常,简单变量用于解决一些数据量小且处理简单 的问题,对于那些描述具有某种关联的批量数据时,应采用VB 提供的数组和用户自定义数据类型两种数据结构。 5.1 数组 1 数组的基本概念数组是VB提供的一种数据结构。用统一的名称来代表具有 相同性质的一组数,该名称为数组名。数组中的每一个元素称 为数组元素。为了区分数组中的每一个元素,需要用一个索引 号区别,该索引号称为下标。数组中的每一个元素可以用数组 名和下标惟一表示。每个数组元素和一个普通变量一样能存放 一个数据。5.1 数组 1 数组的基本概念 数组的特点: (1) 数组由若干个数组元素组成。数组元素的表示方法为:数组名后跟圆括号和下标, 如a(3)就表示数组a的元素。 (2) 数组元素在内存中有次序存放,下标代表它在数组中的位置。如数组元素a(3)表示数组a中的第3个元素(若下标从0开始则为第4个元素,下同),而数组元素b(3,4)则表示数组b的第3行第4列的那个元素。 (3) 数组元素数据类型相同,在内存中存储是有规律的,占连续的一段存储单元。例如一个整型数组a,有3个元素a(1)、a(2)和a(3),那么a(1)、a(2)和a(3)的数据类型均为整型,若已知a(1)在内存中的存储单元地址编号为3001H, a(2)在内存中的存储单元地址必然为3003H(因为一个整型数据占两个字节),a(3)在内存中的存储单元地址为3005H。5.1 数组 1 数组的基本概念 在表示数组元素时,应注意以下几点: (1) 用圆括号把下标括起来,不能使用中括号或大括号代替,圆括号也不能省略。 (2) 下标可以是常量、变量或表达式,其值为整数,如常量、变量或表达式的值为小数时,将自动“四舍五入”。 (3) 下标的最小取值称为下界,下标的最大取值称为上界。在不加任何说明的情况下,数组元素下标的下界默认为0。 5.1 数组 2 数组的声明在VB中,使用数组前要先进行声明,以使VB在遇到某个标 识符时,能将其当作数组来处理。“先声明后使用,下标不能 越界”是数组使用的基本原则。在用Dim语句声明时就确定了大 小的数组,称为静态数组,静态数组在程序编译时分配存储空 间,一旦分配,数组的大小就不能再改变了。 5.1 数组 2 数组的声明 1)一维静态数组 格式:Dim 数组名(下界 To 上界)As 作用:声明数组具有“上界下限”个数组元素,这些元 素按照下标由小到大的顺序连续存储在内存中。其中: 数组名 命名要符合变量命名规则。 下界 To 上界 称为维说明,确定数组元素下标的取值范围 (下标下界最小为-32768,上界最大值为32767)。下界默认值 为0。下界和上界只能取直接常量或直接常量表达式、符号常量 或符号常量表达式,不能为变量或包含变量的表达式。 As 指明数组元素的类型,默认为变体数据 类型。 5.1 数组 2 数组的声明 2)二维静态数组 格式:Dim 数组名(下界1 To 上界1,下界2 To 上界2As 作用:声明(上界1下限1)*(上界2下限2)个连续的单元。 例如: Dim Larray(0 to 3,0 to 4) As Long或 Dim Larray( 3 ,4) As Long声明了长整型的二维数组Larray,第1维下标范围为03, 第2维下标范围为04,数组元素个数为4*5个,每个元素占4个 字节的存储空间,元素排列如表所示。 5.1 数组 2 数组的声明 静态数组声明的注意事项: (1) 用“Option Base 1”可设定数组元素下标下界值为1, 以改变下界默认值为0。该语句必须放在窗体或模块的通用声明 段中,否则会出现“无效内部过程”的错误。例如:Option Base 1Dim x(4) 声明数组x下标下界为1,因此x具有x(1)、x(2)、x(3)、x(4) 4 个数组元素,数组元素为变体类型数据。5.1 数组 2 数组的声明 静态数组声明的注意事项: (2) 静态数组在同一个过程只能声明一次,否则会出现“当前 范围内声明重复”的提示信息。 例如:Private Sub Form_Click()Dim x(5) As IntegerDim x(5) As SingleEnd Sub 在该过程中两次声明了静态数组x。5.1 数组 2 数组的声明 静态数组声明的注意事项: (3) 声明数组和声明变量一样,数组也有作用范围。如建立公 用数组,在标准模块的通用声明段用Public语句声明;建立模 块级数组,在窗体的声明段用Private或Dim语句声明;建立过 程级数组,在过程中用Dim或Static声明。详细内容请看第8章 变量的作用域。 (4) 声明数组后,各数组元素的初值与声明普通变量相同。 5.1 数组 2 数组的声明 3)动态数组声明动态数组是指在程序执行过程中,数组元素的个数可以改 变的数组。和静态数组类似,也分为一维动态数组、二维动态 数组和三维动态数组。动态数组在用Dim语句声明数组时不给出数组的大小,程序 执行到ReDim语句时才确定大小。创建动态数组通常分两步:5.1 数组 2 数组的声明 3)动态数组声明第1步,在标准模块、窗体的通用程序段或过程,声明一个 省略维说明的数组,格式为: Dim 数组名()As 第2步,根据应用需要,用ReDim重新确定数组元素的个数,格 式为: ReDim Preserve 数组名(维说明)As 5.1 数组 2 数组的声明 3)动态数组声明说明: (1) 维说明 通常包含变量或表达式,但其中的变量或表达式应有明确的值。 (2) 关键字Preserve 如果省略,重定义前数组元素的值全部丢失,VB系统重新对数组元素进行初始化;如果使用了Preserve,重定义前数组元素的值不丢失,VB系统保留原数组元素的值。 在使用Redim语句时请注意:Redim语句只能改变数组的大小,不允许改变数组的数据类 型。 5.1 数组 例5-2 输入某门课n个同学的成绩,输出高于平均分的成绩。Dim aver!, i%, x!() 这里先声明一个空数组n = Val(InputBox(“请输入统计人数“, “输入框“, 1) ReDim x(1 to n)根据实际人数声明数组大小aver = 0For i = 1 To nx(i) = InputBox(“请输入第“ “ “;Next iPrintFor i = 0 To UBound(b)Print b(i); “ “;Next i 注意:Array函数只能对一维动态数组赋值。若提前声明了数组,类型必须为变体类型。 5.1 数组 3 数组的赋值 2)动态数组赋值 使用Split()函数为动态数组赋值Split()函数为数组元素赋值的基本方法是:将要赋值的数 据组成字符串,且数据之间用固定的分隔符(如“,”)分隔 ;再通过Split()函数将其分离成逐个的数据后,赋给数组各元 素,Split()函数格式为:=Split(,分隔符) 其中:是一组为数组赋值的数据,数据之间用 固定的分隔符分隔,默认为“ ”(一个空格字符)。5.1 数组 3 数组的赋值 2)动态数组赋值 使用Split()函数为动态数组赋值 注意:Split()函数要求所赋值的数组必须是动态数组,可以不提 前声明,如果提前声明则必须声明为字符型。该方法通常和文 本框配合使用解决大量数据处理问题。5.1 数组 3 数组的赋值 2)动态数组赋值 使用Split()函数为动态数组赋值 Split函数和Array函数使用时应注意的问题: Split函数只能给字符型数组赋值;而Array函数只能给变体类型数组赋值。 Split和Array函数均只能为一维数组赋值,如果要为二维数组赋值,需要先将数据存储在一维数组中,再通过程序的方法将一维数组的值赋值给二维数组。 用Array函数赋值时,数组元素的最小下标受Option Base 语句影响,当“Option Base 0”或默认情况下,数组元素下标最小值为0;当“Option Base 1”时,数组元素下标 最小值为1;用Split函数为数组赋值时,数组元素的最小下标与Option Base 语句无关,不管Option Base 语句设置为0还是1,数组元素的最小下标均从0开始。 5.1 数组 例5-3 使用文本框录入大量的数据,将它们保存在一维数组中 ,并打印输出(每行显示10个数据)。5.1 数组 例5-3 使用文本框录入大量的数据,将它们保存在一维数组中 ,并打印输出(每行显示10个数据)。 Private Sub Command1_Click()Dim a$()a = Split(Text1.Text, “,“) For i = 0 To UBound(a)Picture1.Print Tab(6 * (i Mod 10) + 1); a(i);Next i End Sub 5.1 数组 4 数组的输出在上面的例子中已经看到,数组输出就是分别输出数组中 的各元素,采用循环或循环嵌套将数组中各元素逐一输出。通常利用For循环或For循环嵌套,调用Print方法实现将数 组元素值输出到窗体或图片框中。输出时可采用Tab()函数控制 输出格式,使输出的数据清晰。以下程序是把随机函数产生的 0,99之间的随机整数,存入到二维数组中并输出。 5.1 数组 4 数组的输出 数组输出时的注意事项: (1) 采用循环控制结构输出数组中各元素中的值时,输出方法 在循环结构的位置要合理,避免下标超限现象。5.1 数组 4 数组的输出 数组输出时的注意事项: (2)可以根据需要单个输出数组元素的值,但下标不能超限。如 :输出上例二维数组a前三个元素,可使用语句: Print a(1, 1) ; a(1, 2) ; a(1, 2)5.1 数组 4 数组的输出 数组输出时的注意事项: (3)不能通过数组名来输出数组中各元素的值。 如上述程序改为: Private Sub Form_Click()Dim a(5, 5) As Integer For i = 0 To 5For j = 0 To 5a(i, j) = Int(Rnd * 100) Next jNext iPrint Tab(j * 8 + 1); a; End Sub 想通过数组名a输出二维数组中的每一个元素,则是错误码的。5.1 数组 4 数组的输出 数组输出时的注意事项: (4)要注意用Tab()函数控制输出格式 为了使数组输出层次清晰,要注意使用Tab()函数或使用其他方 法控制输出格式,实现行定位输出和换行输出。5.1 数组 5 数组的应用举例 例5-4 输入多名学生的一门课程的考试成绩(假设为整数), 统计各分数段学生人数。5.1 数组 Private Sub Command1_Click()Dim a$()Dim x(0 To 10) As Integer用于保存统计结果a = Split(Text1, “,“)For i = 0 To UBound(a)If (a(i) 0) Then
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号