Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组

上传人:E**** 文档编号:89400304 上传时间:2019-05-24 格式:PPT 页数:50 大小:400.50KB
返回 下载 相关 举报
Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组_第1页
第1页 / 共50页
Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组_第2页
第2页 / 共50页
Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组_第3页
第3页 / 共50页
Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组_第4页
第4页 / 共50页
Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组》由会员分享,可在线阅读,更多相关《Visual Basic程序设计应用教程-电子教案&源代码-薛晓萍 第5章 第5章 数组(50页珍藏版)》请在金锄头文库上搜索。

1、第5章 数组,5.1 数组的概念 5.2 固定数组 5.3 动态数组 5.4 For EachNext循环 5.5 控件数组 5.6 自定义数据类型,5.1 数组的概念,在现实生活中,存在着各种各样的数据,有些数据之间没有太多的内在联系,用简单变量就可以进行存取和处理,前几章我们用到的变量都属于这种情况。但是,在实际工作中,常常会遇到大批的有着内在联系的数据需要处理,例如,学生成绩的统计、人口普查的数据处理、农业实验观测值等等。如果仍然用简单变量来存取和处理,不仅很不方便,甚至不可能处理的。针对这个问题,我们需要引入一个重要的概念数组来解决。在许多场合,使用数组可以简化程序,提高程序的运行效率

2、。,返回,5.1 数组的概念,5.1.1 下标变量 5.1.2 数组和数组元素 5.1.3 数组元素的存放,返回,5.1.1 下标变量,1.下标:在一组类型相同的数据中,每个数据在其中的顺序位置是一定的 ,我们用下标来标识。 2.下标变量:带下标的变量,我们称为下标变量。 关于下标变量的规定: (1)下标变量在程序中的用法和简单变量的用法一样。 (2)下标可以是常数、数值变量、算术表达式甚至下标变量。下标中如含有变量,使用前应给该变量提前赋值。例如,当i=5时,a(i)表示a (5),a (i+3)表示a (8);如果b(3)=5,则a(b(3)表示a(5)。 (3)下标变量的下标值应该为整数

3、,否则计算机将对下标进行自动取整。如a(3.2)将被视为a(3),a(-3.7)将被视为a(-4)。,返回,5.1.2 数组和数组元素,数组是由一系列具有相同变量名、相同数据类型的下标变量构成的有序排列。变量名就是数组名,每个下标变量称为该数组的一个数组元素。数组的数据类型也就是该数组包含的下标变量的数据类型。 在Visual Basic中,可以声明任何基本数据类型的数组,包括用户自定义类型和对象变量,但是一个数组中的所有元素应该具有相同的数据类型,只有当数据类型为Variant时,各个元素才能够包含不同类型的数据。,返回,5.1.3 数组元素的存放,数组中的各个元素在内存中的存储是按照一定的

4、规律,占据着一片连续的存储区域。一维数组的存放顺序就是它的下标顺序;而多维数组的元素的存放顺序遵照下述规定:首先变化的是最后一维的下标,然后变化倒数第二维的下标,第一个下标最后变化(按行存放)。下表显示数组A(4,3)在内存中的分配情况:,返回,5.2 固定数组,5.2.1 数组的声明 5.2.2 数组的使用,返回,5.2.1 数组的声明,固定数组也称为静态数组,是指数组元素的个数固定不变的数组。 数组的声明格式如下: Private|Public|Dim 数组名() As 数据类型 其中: (1)Private|dim用来声明局部数组或模块数组,Public用来声明公用 数组。 (2)数组名

5、的命名规则与简单变量的命名规则相同。 (3)如果省略As 数据类型,数组按Variant型处理。如果数组的数据类型可以确定,最好不要省略。,返回,5.2.1 数组的声明,(4)指定数组的维数以及各维的范围,为了规定下界,用关键字To显式提供下界(为Long数据类型)。 定义格式为: To , To 如果没有使用To显式指定下标下界,则可以用Option Base n语句控制下界。如果没有使用Option Base n语句,则默认数组的下界为0。 (5)数组的大小:每一维的大小为上界-下界+1;数组的大小为各维大小的乘积。 例如: Private A(6)As Integer 声明一个长度为7的

6、整型数组A,下标为06 Dim grade(1 To 50,3) as single 声明包含504个元素的二维数组,返回,注意: (1)在声明数组时,下标必须是常量,不能是变量。而在应用数组元素时下标可以是常数、变量或表达式。例如:下面的静态数组声明是错误的。 n = InputBox(“输入数组的上界“) Dim a(1 To n) As Integer 声明数组时下标出现变量 (2)数组下标越界错误:引用的下标比数组声明时的下标范围大或小。 例如: Dim a(1 To 30) As Long, i% a(1) = 1: a(2) = 1 For i = 2 To 30 a(i) = a

7、(i - 2) + a(i - 1) a(0)不存在 Next i,5.2.1 数组的声明,返回,5.2.1 数组的声明,(3)数组维数错:数组声明时的维数与引用数组元素时的维数不一致。 例如: Dim a(3, 5) As Long a(i)=10 (4)在增加数组的维数时,数组所占的存储空间会大幅度的增加,所以要慎用多维数组。使用Variant数组时更要格外小心,因为它们需要更大的存储空间。,返回,5.2.2 数组的使用,数组的使用是通过对数组元素进行赋值、表达式运算、输入和输出等操作来实现。对数组元素的操作和对简单变量的操作类似,但对数组元素的使用要注意以下几点: (1)在同一过程中,不

8、能声明与简单变量同名的数组。 (2)声明数组后,数值型数组的各个数组元素被初始化为0,字符串型数组的各个数组元素被初始化为空字符串。 (3)使用数组元素时,数组名、数组的数据类型、维数必须与数组声明时一致。 (4)使用数组元素时,下标值应在数组声明时所指定的范围之内。,返回,5.2.2 数组的使用,【例5-1】 编写程序,将输入的10个数据,按照输入的顺序逆向输出。,返回,图5-1 10个数的逆序输出,【例5-2】随机产生10个1100的正整数放入数组,显示产生的数,求最大值、最小值、平均值。,5.2.2 数组的使用,图5-2 例5-2界面设置及运行结果,返回,5.2.2 数组的使用,【例5-

9、3】从已知的数组a中查找是否存在数b(由用户输入要查找的数)。 解法1:顺序查找法 程序分析: 所谓“顺序查找法”就是从第一个数据开始一个一个的比较,直到找到输入的数据或找完全部数据为止。由此可以看出“顺序查找”可以对无序序列进行处理。查找结束后,如果被查找数据在该序列中,则显示输入数据所在的位置;如果被查找数据不在该序列中,则显示输入的数据“不在序列中”。,返回,5.2.2 数组的使用,【例5-3】控件属性设置及运行界面如图5-3所示。,图5-3 顺序查找数据,返回,【例5-3】解法2:对分法查找 分析:对分法查找只能用于有序数列。 对分法查找的算法思想是:每次都取数据区间的中间值,并且通过

10、这个中间值与被查找数据比较,来判断是否找到。如果没有找到,再比较这个中间值与被查找数据的大小,从而决定被查找数据可能存在的新区间。由于这个新区间是由原区间“对分”得到的,因此这种方法被叫做“对分查找”。,5.2.2 数组的使用,返回,5.2.2 数组的使用,【例5-4】产生10个互不相同的两位数的进行排序,将其从小到大的顺序输出 (选择法排序) 分析:这是一个数组的排序问题,排序的算法有许多,常用的有选择法、冒泡法插入法等。这里介绍选择法和冒泡法来排序。 (1)使用“选择排序法”由小到大排序,方法如下:先将 10个数存入数组a的10个数组元素中,然后对10个下标变量a(1),a(2),a(3)

11、, ,a(10)进行“选择排序法”处理。,返回,5.2.2 数组的使用,第一轮:从这10个下标变量中选出最小值,共需比较9次(n个数需要比较n-1次),通过交换把最小值存入a(1)。 第二轮:除a(1)之外(a(1)已存放最小值),还剩9个(n-1个)下标变量需要比较选出最小值,共需比较8次(n-2次),通过交换把选出的最小值存入a(2)。 根据上述方法,可以总结出任意的第i轮比较进行的操作是:从后n-i+1个数中选出最小者存入a(i),共需比较n-i次。 重复上述的处理,直至进行到最后一轮,即第9轮(第n-1轮)的比较,此时就需要从最后的2个下标变量a(9)、 a(10)中选出最小值,需要比

12、较1次,通过交换把最小值存入a(9)(也就是a(n-1)。找出了前9个(n-1个)数,实际上此时a(10)(即a(n)存放的就是整个数组中的最大数了。,返回,5.2.2 数组的使用,6个数的选择排序法的示意图如图5-4所示,返回,5.2.2 数组的使用,【例5-4】产生10个互不相同的两位数的进行排序,将其从小到大的顺序输出。(冒泡法排序) (2)使用“冒泡排序法”从小到大排序:冒泡排序总体思想是大数沉底,小数上浮。参加比较的两个元素是相临的,每轮比较可以找出一个本轮最大放在本轮最后,使所有小数前移位置。第1轮比较之后,最大的数沉底,即放到a(10)位置;第2轮比较a(1) a(9),使该轮最

13、大数沉底,即放到a(9)位置;依次类推,最后一轮比较a(1)和 a(2),使大数放到a(2),最小数为a(1),比较结束。,返回,5.2.2 数组的使用,6个数的冒泡排序法示意图如图5-6所示。,5.5.2 数组的使用,【例5-5】利用随机函数生成一个44的矩阵(即二维矩阵),范围是20,80内的整数,求它的最小值及所对应的下标 。,返回,图5-8 界面设计及运行结果,5.5.2 数组的使用,【例5-6】声明一个整型的二维数组a(1 to 4,1 to 4),用随机函数产生各元素,范围介于1,100之间,将第1行和第3行对应元素交换。 分析:二维数组的生成及输出可以用双重循环;元素的交换要注意

14、交换的对应位置。,图5-9 例5-6界面及运行结果,返回,5.3 动态数组,5.3.1 动态数组的定义 5.3.2 动态数组的应用 5.3.3 字符串数组,返回,5.3.1 动态数组的定义,动态数组指在声明数组时未给出数组的大小(省略括号中的下标), 当要使用它时,随时用ReDim语句重新指出数组大小。 创建动态数组的步骤为: (1)声明数组为动态数组,只需给数组附以一个空维数表(括号 不能省略)。 (2)在过程中用ReDim语句为声明的动态数组分配实际的元素个数,格式为: ReDim Preserve 数组名维数说明)As 类型 说明: ReDim语句只能出现在事件过程或通用过程中。 的格式

15、为: To , To 其中,中括号的内容可以省略,当省略了上下界的说明时,可以用 Ubound 和Lbound函数来获取数组的上界和下界。,返回,5.3.1 动态数组的定义,(3)在一个过程中,可以多次使用Redim语句定义同一个数组,随时修改数组中的元素个数,而且可以改变数组的维数。但是不能改变数组类型。 例:Redim语句的使用 (4)当再次使用ReDim语句重新分配动态数组时,当前存储在数组中的数据将被清除,利用这一点,可以随时对数组进行初始化。但如果在ReDim语句中使用了Preserve选择项,可保持数组中原有的数据不变。但Preserve只能改变数组最后维的大小,且不能改变数组的维

16、数。,返回,5.3.1 动态数组的定义,(5)用Array函数对数组赋值。 格式:数组变量名=Array(数组元素值)。 说明: “数组变量名”后面没有括号、没有维数、没有上下界。“数组元素值”是需要赋给数组各元素的值,各值之间以逗号分开。 例如: a = Array(1, 3, 5, 7, 9, 11,13, 15, 17, 19), 则a(0)=1,a(1)=3,a(2)=5,a(9)=19。 Array函数只适合于一维变体型数组,不能对二维或多维数组进行初始化。,返回,5.3.2 动态数组的应用,【例5-7】已知一维数组a()中的元素已排序,分别为12,15,21,25,27,33,39,43,48,52,编程将30插入数组a,并使a依然有序。 分析: (1)首先查找待插入数据在数组中的位置k; (2)然后从最后一个元素开始往前到下标为k的元素依次往后移动一个位置; (3) 第k个元素的位置腾出,将数据插入。 插入数据的操作过程

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号