第5章数组1.ppt

上传人:本田雅阁 文档编号:2550904 上传时间:2019-04-07 格式:PPT 页数:55 大小:660.01KB
返回 下载 相关 举报
第5章数组1.ppt_第1页
第1页 / 共55页
第5章数组1.ppt_第2页
第2页 / 共55页
第5章数组1.ppt_第3页
第3页 / 共55页
亲,该文档总共55页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章数组1.ppt》由会员分享,可在线阅读,更多相关《第5章数组1.ppt(55页珍藏版)》请在三一文库上搜索。

1、第5章 数组,5.1 数组的概念 5.2 静态数组 5.3 动态数组 5.4 控件数组,为什么要使用数组?,变量代表在程序执行过程中其值可以改变的存储单元. 问题:输入50个数,放在内存存储单元中? 若需要对相同类型的一批数据进行处理,则需要在计算机内存中开辟一块连续的区域对之进行存储.,数组的概念,数组:具有相同类型变量的有序集合。这些变量按照一定的规则排列,使用一片连续的存储单元。,5.2 静态数组,VB中两种变量数组:静态数组和动态数组。 静态数组大小固定 动态大小不确定,使用前重新定义(定义2次) VB中的对象数组-控件数组,使用数组之前必须对其进行定义(先定义后使用) 定义语句格式如

2、下: Dim|Static|Private|Public 数组名(下标1,下标2)As Dim 数组名(下标1)As 一维数组 Dim 数组名(下标1,下标2)As 二维数组,5.2.1 静态数组的定义,下标的格式如下:, To 上界1 , To 上界2 其中,“下界”和关键字“To”可以省略,若程序中无 特别声明,表示下标的取值从0开始,等价于“0 To 上界”。 Dim A(5) As Integer 等价于 Dim A(0 To 5) As Integer A为数组名,该数组中有6个数组元素,分别为:A(0)、 A(1) 、 A(2) 、 A(3) 、 A(4) 、 A(5), Dim

3、B(2, 1 To 2) As Single 等价于 Dim B(0 To 2, 1 To 2) As Single 解析:定义了一个名为B的二维数组,其中有6个数组元素,分别为:B(0,1)、 B(0,2) 、 b(1,1) 、 B(1,2) 、 B(2,1) 、 B(2,2) 二维数组: 其元素构成一个二维表格或矩阵.数组元素的第一个下标值表示该元素在表格中的行号,第二个下标值表示列号.,数组定义(续),二维数组 矩阵,二维数组的元素表示,第1行 第2行 第3行,第1列 第2列,1.数组的上下界 数组的上界和下界 下界:数组中表示某维最小的下标值; 上界:数组中表示某维最大的下标值; 注:

4、定义静态数组时,维的上下界必须是常数表达式,不可以是变量名。 且下界上界,5.2.2 静态数组的操作,静态数组的操作(续),数组的上界和下界 Dim M As Integer Const N = 5 As Integer Dim A(N) As Integer Dim B(1 To 6.6) As Integer 四舍五入后维上界7 Dim C(1 To 2 * 3) As String Dim D(0 To M) As Single,数组的维下界,定义数组时,若未指定某维的下界,则下界默认为0 设置缺省维下界的数组的维下界为1的方法: 在代码窗口通用声明部分写一语句option Base 1

5、 再在cmd1_click()事件过程中进行定义: Dim S(4), B(3,3) as integer 变体型,整型数组,数组的大小,数组的大小即数组所包含的数组元素的个数,也称为数组的长度。 数组的大小=第一维大小第二维大小 第N维大小 维的大小= 维上界 维下界 + 1 dim A(6) as integer dim B(3,-1 to 4) as single,2.数组元素的引用,引用形式:数组名(下标表达式) Dim score(3) as integer Dim two(1,1 to 2) as integer score(0)=80 :score(1)=score(0)+23

6、score(2)=87 :score(3)=9 two(0,1)=score(0),3.数组的输入/输出操作,(1)一维数组元素的初始化(输入) 初始化是给数组成员赋初值。 通过循环逐一给数组元素赋值 *使用Inputbox接收若干数值 *随机产生数值 (2)一维数组元素值的显示(输出) *边输入(获得每一元素值后)边输出 *获得全部元素值后再输出 窗体/图片框/文本框/Msgbox,实例,在FOR循环中用循环控制变量作为数组元素的下标。 边输入边输出 FOR I=0 TO 5 A(I)=INT(99*RND)+1 PRINT A(I); NEXT I,用INPUT函数给数组元素赋值,DIM

7、A(6) as integer, I as integer FOR I=0 to 6 A(I)=inputbox(“给数组元素赋值”,”数组A赋值”) PRINT A(I); NEXT I,例1:输入50个数,按逆序输出,输入使用随机函数,每得到一个数将之赋给数组元素. 边输入边输出每个元素值(正序) 如何实现逆序输出?,例2 随机产生100个0到9之间的整数,统计并输出每个数出现的次数。,所产生的整数在0-9之中 需要10个计数器(计数变量)来存放10个数各自出现的次数(数组元素) a(0)-0的个数 a(1)-1的个数,例3 最值问题(重点算法),编写一个程序,随机产生10个两位正整 数,

8、并从中找出一个最大数和一个最小数。 打擂台思想,5.4 控件数组,控件数组由一组相同类型的控件组成,例如一组命令按钮或一组文本框。它们共用一个控件名,具有相同的属性,建立时系统给每个元素赋一个唯一的索引号(Index)。,1. 基本概念,控件共享事件代码,那么如何识别哪个控件执行事件代码呢?,在某个控件识别了一个事件时,VB将调用公 共事件过程,并把该控件的Index属性值传递 给过程,由它指明是哪个控件识别了控件。 例:Private Sub Command1_click(Index As Integer) End Sub,2. 建立控件数组,方法一:创建同名控件 TEXT1 TEXT2命名

9、(NAME属性)为TEXT1,创建控件数组。INDEX值不同。 方法二:复制现存控件,3. 使用控件数组,例如: 为文本框控件数组的三个元素设置共同字体与大小 Dim I As Integer For I=0 TO 2 Text1(I).Font.Name=“隶书” Text1(I).Font.Size=20 Next I ,【例4】随机生成包含10个元素(全为一位正整数)的数组,要求交换对称位置的元素,并输出交换前后的各元素值。,交换: a(0)-a(7) a(1)-a(6) a(2)-a(5) . .,【例5】输出Fibonacci数列的前20项,要求4项一行输出,请使用数组完成,即数组各

10、元素取得各项值,以4个一行的形式输出数组中各元素值。,5.3 动态数组,动态数组:应用中数组的大小不确定. 首先定义不指明大小的数组: Dim 数组名() As 数据类型 其次,使用ReDim语句动态定义数组的大小。 ReDim Preserve数组名(下标1,下标2) As 注意:用Redim语句定义数组时若指定数据类型, 应与上面的Dim 数组名() As 数据类型中的数据类型一致,即不允许更换类型.,例: Option Base 1 Private Sub Command1_Click() Dim a() as integer redim a(9) Print a(8) Redim a(

11、2,3) Print a(1,1) End Sub 思考:将蓝色语句改为redim a(9) as long是否会出错?,Redim Preserve 数组名(维界定义)As 数据类型 例子:动态数组单循环例子(读程序见下页),在使用ReDim语句重新定义数组时,如果需要保留动态数组的内容可采用如下方式:,重新定义数组时可以保留原数组中的内容,单循环例子(读程序),Option Base 1 Private Sub Form_Click() Dim a() As Integer Dim i As Integer, j As Integer For i = 1 To 3 ReDim a(i) 思

12、考:redim preserve a(i) a(i) = i Next i Print a(1); a(2); a(3) End Sub,【例6】生成若干个0-99之间的整数存于数组a,删除指定位置的元素,并显示删除前、后结果。,利用循环生成数组各元素值。 指定要删除元素的位置 删除方法:用后继元素覆盖之 由于数组大小在删除元素后会发生变化,所以应定义为动态数组。,【例1】将某范围内的素数存放到数组中.,从键盘输入一个正整数,找出该数以内的所有素数存放在数组prime中 并将所有找到的素数按每行5个的形式输出到文本框中。 输出到当前窗体中。,数组第二次课内容,数组的输入(赋值)与输出(显示)

13、Array函数:给Variant类型的变量或Variant类型的动态数组赋值 例:ARRAY赋值.vbp,4.用ARRAY函数给一维数组赋值,一维数组的输入:直接赋值,随机赋值,inputbox赋值,Option Base 1 Private Sub Form_Click() Dim A As Variant, I As Integer Dim B() As Variant FontSize = 30 A = Array(5, 4, 3, 2, 1) Print A(1); A(2); A(3); A(4); A(5) A = Array(1.5!, 2.3!, 3.6!, 4.1!) Pri

14、nt A(1); A(2); A(3); A(4); A = “NO ARRAY“ Print A B = Array(1, 2, 3, 4, 5, 6) Print B(1) End Sub,数组的输出(元素值的显示),循环控制(下标变量print a(i) For Each Next结构 不需要提供初值与终值 根据数组元素的个数确定循环执行的次数 For Each v In 数组 v是变体变量 Exit for Next 成员 v必须定义为variant类型,Dim i%, j% Dim b(1 To 2, 1 To 3) As Integer For i = 1 To 2 For j =

15、 1 To 3 b(i, j) = i * 10 + j Print b(i, j); Next j Print Next i *此方法按行列式的格式输出,二维数组的定义及赋初值,For Each v In b 此结构按列输出二维数组中的各元素 Print v; Next,【例2】随机生成两位正整数,存放到一个4*5的数组中,请按下图所示格式分别将其输出到文本框及图片框中。,5.2.3 数组的常用函数及语句,1.LBound函数 返回指定数组某维的下界值. LBound(数组名,维编号) 2.UBound函数 返回指定数组某维的上界值. UBound(数组名,维编号) *缺省时返回第一维上/下

16、界,Erase语句:用于清除指定数组的内容 用于静态数组时,将所有数组元素置为默认值 用于动态数组时,将删除整个数组结构并释放该数组所占内存。下次引用该动态数组前必须REDIM重新定义。 例:Erase.vbp,3. Erase语句,Dim a(3) As Integer, b() As Integer a(1) = 1: a(2) = 2: a(3) = 3 ReDim b(4) Print a(1), a(2), a(3) Erase a, b Print a(1), a(2), a(3) Print b(1) 此行出错,部分重点算法: 一数组,求其中最大和最小; 对一数组排序(选择法、冒

17、泡法) 在一数组中查找指定的数(顺序、二分查找) 插入,删除 删除一数组中重复的数,一维数组的应用,【例3】选择排序法,基本思想: 设在数组S中存放n个无序的数,要求将这n个数按升序(从小到大)重新排列。 第一轮比较:使得s(1)为所有元素中最小的. 用s (1)与s (2)比较,若s (1)s (2),则交换两个元素中的值,然后继续用s (1)与sort(3)比较,若s (1)s (3),则交换这两个元素的值。依此类推,直到s (1)与s (n)进行比较处理后,s (1)中存放了这n个数中的最小数。 第二轮比较,s (2)依次与比较总共通过n-1轮比较,得到一个从小到大排列的有序序列。,【例

18、4】数组元素的插入,(1)将任意一整数插入到数组中,由用户指定插入的数据作为第几个元素 (2)已知一按升序排好的包含有10个元素的数 组,将某一整数插入到该数组中,基本思路:首先要找到插入位置.以升序为例.,【例5】数据检索问题(顺序查找法),基本思想 对所存储的数据从第一项开始,依次与所要检索的数据进行比较,直到找到该数据,或将全部元素都找完还没有找到该数据为止。 将元素显示在列表框中.结果显示在文本框中,结果格式为:23找到了,为元素a(5)。,【例6】二分查找(要求数组已排好序) 算法说明: 给定一组数据,查找是否存在指定的某个值,二分法查找要求这组数据必须已经是排好序的,每次将查找范围

19、一分为二,直到找到或查询了所有区间也没有找到要查找的数为止。,具体思路为: 假设给定的一组数据存放在数组A中,需要查找的数为x。 设定三个下标left(初始值为0)、right(初始值为数组A的上界)、Mid分别指向查找区间的左端、右端和中间位置。计算Mid=,比较x和AMid的大小, *若Find=AMid,则要查找的数已经找到; *若FindAMid,说明需要查找的数应当在Mid和right区间,则left=mid+1; 重复以上步骤,每次查找区间减少一半,直到找到或者LeftRight(表示找不到,停止查找)。,【例7】 :使用冒泡(起泡)法对10个整数(数组元素)从小到大排序,并输出排

20、序前后数组中元素的值。起泡法的思路是:将相邻两个数比较,将小的调到前头。,排序通常分为以下3个步骤: 将需要排序的n个数存放到一个数组中(设x数组)。 将x数组中的元素从小到大排序,即x(1)最小、x(2)次之、x(n)最大。 将排序后的x数组输出。,在第一轮比较中进行两两比较_次,在第二轮中比较_次,第4轮中比较_次. 如果有n个数,则要进行_轮比较,用i表示轮次,在第i轮比较中要进行_次两两比较.,【例8】随机生成包含10个无重复元素的数组,要求元素在0,9之间。,思路: 每生成一个元素与前面的元素进行比较,若相同,则重新生成该元素.,【例9】删除一数组中重复的数,第一轮用A(1)依次和位

21、于其后的所有数组元素比较,假设元素A(j)与它相同,则将A(j)删除.删除的方法是将位于A(j)元素后面的依次前移,直到将之覆盖为止;然后继续用A(1)和A(j),A(j+1)等比较,若有相同数存在,仍然将其删除,直到比较完所有元素. 第二轮用A(2)和位于其后的所有元素比较,处理方法同第一轮. 依次类推,【例10】数组合并,将两个有序数且A和B合并成另一个有序的数组C 思路 (1)先在A,B数组中各取第一个元素进行比较,将小的元素放入C数组. (2)取小的元素所在数组的下一个元素与别一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完. (3)将另一个数组剩余元素放入C数

22、组,合并排序完成,二维数组的应用:,【例1】.生成一个3*4的二维数组,求出该数组中所有元素的和sum1,所有靠边元素的和sum2。 【例2】.求二维数组a的转置矩阵b。 【例3】.求二维数组中每行的最大值及其所在的位置(列).,【例4】.输出杨辉三角形,【例】.,利用随机函数生成一个由1,9之间的正整数构成的4行5列矩阵,求出矩阵行的和为最大和最小的行,并调换这两行的位置。,【例】.,生成一个4*5的二维数组,找出二维数组的所有鞍点。所谓鞍点是指该位置的数在该行上最大,而在该列上最小。,字符数组的应用:,【例7】.用户由文本框输入一串英文字符,统计其中各英文字母出现的次数。,运行时添加和删除控件数组中的控件,Load 对象名(index) 向控件数组添加控件 对象名 指在数组中添加的控件名称,Index是控件在数组中的索引值。加载新元素到控件数组时,要在程序中将Visible属性设置为TRUE, 通过代码安排新元素在窗体上的位置(通过top,left属性)。 Unload 对象名(index) 删除用Load产生的对象数组元素。 例5.2 建立一个动态添加和删除控件数组元素的程序.,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1