310 likes | 457 Views
Visual Basic. 程序设计教程. 第八讲. VB 数组. 本讲教学内容. 4.4 数组与控件数组. 4.4 数组与控件组 1. 引入数组的目的 在实际应用中经常要处理具有相同性质的成批数据,如果要用变量来命名保存就需要很多个变量,处理时使用也不方便。 如果把这些变量作为一组,并用统一的名字来处理会非常方便,因此引入了数组。. 2. 数组的基本概念 (1) 数组: 具有相同类型的一组变量的集合。 (2) 数组名: 命名方式与变量命名相同,但代表一个集合。
E N D
Visual Basic 程序设计教程
第八讲 VB数组
本讲教学内容 4.4 数组与控件数组
4.4 数组与控件组 1. 引入数组的目的 在实际应用中经常要处理具有相同性质的成批数据,如果要用变量来命名保存就需要很多个变量,处理时使用也不方便。 如果把这些变量作为一组,并用统一的名字来处理会非常方便,因此引入了数组。
2. 数组的基本概念 (1) 数组:具有相同类型的一组变量的集合。 (2) 数组名:命名方式与变量命名相同,但代表一个集合。 (3) 数组元素:变量名后带有(下标)形式的变量,作为整体通过下标的变化而改变。也可称为下标变量。
3. 数组的类型 (1) 一维数组 例如:A(下标) (2) 多维数组 例如:A(下标1,下标2,…下标n)
二、数组的定义 1. 作用 定义数组是为了确定数组的类型并给数组分配所需的存储空间,定义数组包括定义数组的名称、维数、大小和类型。 2. 定义格式: Dim <数组名>[维数定义][As 数据类型]
Dim:定义变量和数组的关键字 • 数组名:用户为数组起的名字,必须是合法的标识符。 • 维数定义:它是用来确定数组是几维的,并确定每一维的最大值。下标个数决定维数。 • As 数据类型:说明数组元素的类型,如果省略,则数组默认为Variant类型。
3. 数组的数据类型 • 数组数据类型指的是数组能存放什么类型的数据。 • 数组数据类型可以用<As 数据类型>子句说明。 • 数组数据类型可以是任何基本数据类型。 • 数组数据定义了什么类型,那么其所有的元素都有相同的数据类型。
4. 下标变量 • 下标变量就是数组元素,它是数组处理的基本单位。 • 下标变量的表示方法:数组名(下标1,[下标2]) • 说明: (1) 下标用于指明数组元素在数组中的位置。 (2) 下标可以是常数、变量或表达式。 (3) 下标值必须是整数,若为非整数则自动取整 (4) 下标的个数必须与定义数组的维数相同。 (5) 下标不能超界。
例1:Dim S(2) As Integer 定义一维数组S, 有3个元素,分别为S(0), S(1), S(2),它们都是整型的。 例2:Dim M(2,3) As Single 定义二维数组M,数组有3*4个元素,分别为: M(0,0) M(0,1) M(0,2) M(0,3) M(1,0) M(1,1) M(1,2) M(1,3) M(2,0) M(2,1) M(2,2) M(2,3)
5. 数组的上、下界 • 数组下标的下界一般默认为0,而用户也可以根据需要自行定义上、下界。 • 格式1:Option Base n 说明: (1) 该语句功能指定数组下标的默认下界。 (2) n的取值只能是0或1,即只能定义下界为0或1。 (3) 该语句必须放在数组定义之前,只能出现在窗体模块或标准模块层,不能出现在过程中。
格式2:Dim 数组名([下界 To] 上界) 说明: (1) 其中下界和上界表示该维的最小值和最在下标值。 (2) 下界如省略,则按0或1处理,具体由格式1的语句决定。 例如:Dim Ab(-1 To 2) 定义了一个一维数组Ab,其下标的下界为-1,上界为2,数组元素为: Ab(-1), Ab(0), Ab(1), Ab(2)。共四个元素。
例如:Dim A3(3, 1 To 6) 定义二维数组,第1维的下标为0-3,第2维的下标为1-6。 例如: Dim A3(1 To 3, 2 To 6) 定义二维数组,第1维的下标为1-3,第2维的下标为2-6。
三、静态数组与动态数组 1. 静态数组:指需要在编译时就分配内存区的数组。 2. 动态数组:指需要在运行时才分配内存区的数组。 3. 定义时用数值常数或符号常量作为下标定维的数组是静态数组;定义时用变量作为下标定维的数组是动态数组。
4. 动态数组的定义 动态数组的定义分两步: (1) 用Public或Dim声明一个空数组,即没有下标的数组,但数组名后的括号不能省略。 (2) 在过程中有Redim语句声明带下标的数组。 Redim语句的格式: Redim [Preserve] 数组名(下标) As <数据类型> 功能:重新定义动态数组,按定义的下标重新分配存储单元,并可为定义的变量改变存储类型。
例如: Dim Test1( ) As Integer Sub pro1( ) s=8 ReDim Test1(s) …… End Sub
说明: (1) 定义没有下标的数组应在窗体层、标 准模块或过程中完成。而ReDim语句只能出现在窗体的事件过程或模块的通用过程中。 (2) 用ReDim定义的数组是在程序运行过程中才获得一定的内存空间,当过程结束时,数组所占的内存被释放。 (3) 即使没有预先定义数组,也可用ReDim语句直接定义数组。 (4) 如果使用Preserve子句,则重新定义数组时原有内容不清除 (5) ReDim语句只能改变数组元素的个数,不能改变数组的维数,也不能改变数组的类型。
5. 清除数组 (1) 作用:重新初始化静态数组的元素,或释放动态数组的存储空间。 (2) 格式:Erase <数组名>,[<数组名>]…… (3) 说明: • 在该语句中,只写数组名,不写括号和下标。 • 处理静态数组时,如果是数值型,则所有元素置为0,字符型则置为空串。 • 处理动态数组时,将删除数组的结构并释放其内存空间.
四、数组的基本操作 1. 给数组元素赋值 (1) 如果数据有规律,直接用循环结构完成。 For i = 1 To 20 iA(i) = i * 2 Next i
给数组a(1 to 3,1 to 3)赋成右侧矩阵的值。 Dim a(1 To 3, 1 To 3) For i = 1 To 3 For j = 1 To 3 a(i, j) = 3 - Abs(i - j) Next j Next i 321 232 123
(2) 利用Array( )函数。 VB中提供的函数Array( )可以一次性给一个数组赋固定的值。例如: Dim a, b, k As Integer a = Array(1, 2, 3, 4, 5, 6, 7, 8) b = Array("a", "b", "c", "d", "e") For k = 0 To UBound(a) Print "a("; k; ")="; a(k) Next k Print For k = 0 To UBound(b) Print "b("; k; ")="; b(k) Next k
2. 用输入方式给数组元素赋值 (1) 使用InputBox函数 (2) 使用文本框给数组赋值 本来文本框一次只能给输入一个数据,但如果应用Split()函数,就一次可以给多个数组元素赋值。 Dim a, k As Integer a = Split(Text1, ",") For k = 0 To UBound(a) Print "a("; k; ")="; a(k) Next k
3. 数组的输出 数组的输出通常都是以循环的方式实现的,一维数组是用单循环,二维数组用双重循环。 如果输出的数组元素过多,需要考虑每行输出的元素个数及在合适的位置上换行等,需要使用Tab( )函数和适当地增加Print空语句。
五、数组应用举例 1. 生成数组并求和,找最大值及所在位置。 【例4-17】随机产生30个三位正整数,对这组数据求和并找出最大值及所在位置。 2. 统计字母出现次数。 【例4-18】输入一个字符串,统计英文字母出现的次数,不区分大小写。
3. 数组排序 把一组没有次序的数据,按照从小到大(升序)或从大到小(降序)重新排列的算法称为排序算法。 常见的排序算法有选择法、交换法、插入法、合并排序等。 【例4-19】随机产生6个三位正整数,对这组数据按照升序排序(使用选择法排序)。
4. 数组元素逆序排列 如果给定一组数据,希望把这组数据的头尾对换,这样的处理方法称为逆序排列。 【例4-20】随机产生10个两位正整数,把这组数据逆序排列。
六、控件数组 1. 控件数组就是一些类型相同且功能相近的控件所组成的数组。 2. 特点 (1) 控件数组中的所有控件都有一个相同的控件名称,拥有相同的Name属性设置。 (2) 数组中的每一个控件都有一个惟一的下标索引号作为标识,下标值由Index属性决定 (3) 控件数组可以共享同样的事件过程,利用下标索引号可以判断事件是由哪个控件引发的。 (4) 控件数组可用于命令按钮、标签组、单选及复选框组等常用控件。
3. 控件数组的建立 (1) 设计时建立控件组 方法1:通过改变控件名称添加控件数组元素 方法2:通过复制已有控件添加控件数组元素 方法3:通过指定控件的索引值创建控件数组 (2) 运行时添加控件组 例4-21,例4-22