收藏 分享(赏)

第5章数组及应用.ppt

上传人:天天快乐 文档编号:1155923 上传时间:2018-06-15 格式:PPT 页数:41 大小:252KB
下载 相关 举报
第5章数组及应用.ppt_第1页
第1页 / 共41页
第5章数组及应用.ppt_第2页
第2页 / 共41页
第5章数组及应用.ppt_第3页
第3页 / 共41页
第5章数组及应用.ppt_第4页
第4页 / 共41页
第5章数组及应用.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、数组定义及引用方法,与数组有关的一些常用算法,本章要求:,重点:,1.掌握数组的概念 2.掌握数组(一、二维)的定义及其引用, 3.掌握控件数组的建立及使用。 5. 掌握与数组有关的常用算法,如排序、统计等。,难点:,与数组有关的一些常用算法,第5章 数组及应用,Dim N%, S!, A!, Ave!For N=1 to 10 A=Val(InputBox(Enter A Number) S=S+ANext NAve=S/10Print Ave,输入10个数,输出它们的平均值及大于平均值的那些数?,引例,数组必须先定义,后使用。 定义数组时必须指定数组名、数据类型、数组维数及数组的长度。,数

2、组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标区分;下标代表某个元素在数组中的位置。,5.1 数组的基本概念,VB中数组的表示形式: A(1), A(10) 一维数组 X(1,1), X(2,10) 二维数组 Y(0,0,0), Y(1,2,5) 三维数组,按数组的长度是否可以改变,可分为: 定长数组、动态(可变长)数组。按元素的数据类型可分为: 数值型数组、字符串数组、逻辑数组、 日期型数组、变体数组等、对象数组。按数组的维数可分为: 一维数组、二维数组、多维数组。,Visual Basic中的数组分类,5.2

3、.1 一维数组的定义,Dim 数组名( to)As Dim 数组名( to)例:Dim a(-10 to 10) As Integer 声明了a数组有21个元素,-10是下标的下界,10是下标的上界,数组元数的数据类型,定义数组的简捷形式: Dim a%(-10 to 10),一般形式:,5.2 一维数组,或:,说明: 1数组名的命名规则与变量的命名相同。 2数组的元素个数:上界-下界+1。 3缺省为0,若希望缺省下标值从1开始,可在模块的通用声明部分使用Option Base语句将设为1。 其一般格式是: Option Base 0|1 例如: Option Base 1 将数组声明中缺省下

4、标设为 1,关于一维数组的说明,Dim N As IntegerN=Val(InputBox( Enter N=? )Dim A(N) As Integer,5.如果省略As子句,则数组的类型为变体类型。6数组中各元素在内存占一片连续的存储空间。,关于一维数组的说明2,4.和不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。,使用形式: 数组名(下标) 其中:下标可以是整型变量、常量或表达式。例如: 设有下面的数组定义: Dim A(10) As Integer ,B(10) As Integer 则下面的语句都是正确的。 A(1)=A(2)+B(1)+5 取数组元素运算

5、 A(i)=B(i) 下标使用变量 B(i+1)=A(i+2) 下标使用表达式,5.2.2 一维数组元素的引用,1. 通过循环给数组元素赋值 For i = 1 To 10A(i)=i Next i 2. 数组的输入与输出 输入10个数,并存入到数组A中For i = 1 To 10 A(i) =Val( InputBox(输入A( & i & ) 的值) ) Next i,5.2.3 一维数组的基本操作,For i = 1 to 10 Print A(i); 注意分号的作用 If i Mod 5=0 then PrintNext i,For i =1 To 102 t=A(i) A(i)=A

6、(10-i+1) A(10-i+1)=tNext I,3. 将数组元素倒置,i=1:j=10Do while i Max Then Max = A(i) iMax = i End If Next i Print A( A(iMax),4. 求数组中最大元素及所在下标,一、排序问题,5.2.4 一维数组的应用,数据的排序就是将一批数据由小大到(升序)或由大到小(降序)进行排列。常用的有选择法、冒泡法。 1选择法排序,升序排序程序段:For i = 1 To n - 1 p = i For j = i + 1 To n If a(p)a(j) Then p= j Next j t= a(i):a(

7、i)=a(p):a(p)=tNext i,用随机函数产生40个10100的随机整数,并按由小到大的顺序打印出来。,例5.2 对随机数排序后输出,Private Sub Form_Click() Const N= 40 Dim i%,j%,p%,a(N) For i=1 to N a(i)=10+int(rnd*91) Next i For i = 1 To N - 1 p = i For j = i + 1 To N If a(p) a(j) Then p = j Next j t = a(i): a(i) = a(p): a(p) = t Next I For i=1 to N print

8、a(i); if I mod 10=0 then print Next iEnd sub,2冒泡法排序,升序排序程序段: For i = 1 To n - 1 For j = 1 To n-i If a(j) a(j+1) Then t=a(j):a(j)=a(j+1):a(j+1)=t End If Next j Next i,二、查找算法,查找算法主要有顺序查找法和二分查找法两种。,1顺序查找法,顺序查找法的基本思想是:从数组的第一个元素开始,依次将数组中的元素与被查值进行比较,若相等则查找成功;若数组中所有的元素都与被查值不相等,则查找失败。顺序查找法在最坏情况下的比较次数为数组长度N。

9、,例5.3 用随机函数产生20个互不相等的数,Const M% =20 : Dim A%(1 To M) 通用段中定义Private Sub Command1_Click() Dim i% , j% , x% Print 用随机函数产生的20个互不相等的两位整数: i=0 Do While i i Then 前面的i个数中没有x i= i+1 A(i) = x : Print A(i) ; If i mod 10=0 Then Print End If LoopEnd Sub,例5.4 用插入法进行排序,For i = 2 To M 从第二个数开始往前插 x= A(i) 取出第i个数,准备将它

10、前面的数后移 For j=1 to i-1 在前i-1个数中查找 If x=1 And A(j)x) A(j+1)= A(j) j=j-1Loop 退出时j+1的值就是x的目标位置A(j+1)=x,例5.4 用插入法进行排序,2. 二分查找法,x=Val(InputBox(请输入要查找的整数值!)Do While iA(k) Then i=k+1 Else j=k-1 End IfLoopIf ij Then Print 没找到 & x & !,例5.5:二分查找要求数组中的元素必须是有序的。二分查找法在最坏情况下的比较次数为Log2N。,例5.6 统计各分数段的人数 Const M% = 1

11、00 : Dim A%(1 To M) , B%(5 to 9) , i%For i = 1 To M A(i) = Int(45+Rnd*56) Print A(i); : If i Mod 10 = 0 Then Print Select Case A(i) 10 Case 9,10 统计优秀人数 B(9) = B(9) + 1 Case Is = 1 And k a(row, Col) Then Max = a(i, j) row = i Col = j End If Next jNext iPrint 最大元素是; MaxPrint 在第 第 & Col & 列,3. 求最大元素及其所

12、在的行和列,5. 计算两矩阵相乘(略),方阵转置的程序代码:For i = 1 To For j = 1 To i -1 t=a(i,j) a(i, j) = a(j, i) a(j, i)=t Next j Next i,设A是M*N的矩阵,要重新定义一个N*M的二级数组B,将A转置得到B的程序代码如下:For i = To For j = To N b(j,i) = a(i,j) Next jNext i,4. 矩阵的转置,例5.8 杨辉三角形,5.3.4 二维数组应用举例,Const M%=9Dim CC%(1 to M , 1 to M ) , i%, j%For i = 1 To M

13、 CC(i, 1) = 1 : CC(i, i) = 1 For j = 2 To i - 1 CC(i, j) = CC(i-1, j-1) + CC(i-1, j) Next jNext i,例5.9 产生N阶的幻方矩阵,Const N% = 5 N必须是一个奇数Dim CC%(1 To N, 1 To N) Private Sub Command1_Click() 产生幻方的程序 Dim i%, j%, x% x = 1: i = 1: j = (N + 1) / 2 第一个数,第1行的中间 For x= 1 to N * N CC(i, j) = x If x Mod N = 0 Th

14、en i = i + 1 Else i = i 1 : If i N Then j = 1 列号向右移 End If Next xEnd Sub,定义多维数组的格式如下:Dim 数组名( to , to ,) As 例如: Dim a(5,5,5) As Integer 声明a是三维数组 Dim b(2,6,10,5) As Integer 声明b是四维数组,5.3.5 多维数组的声明和引用,动态数组:在定义数组时未给出数组的长度。在程序执行时,需重新定义并分配存储空间。5.4.1 动态数组的建立及使用 建立动态数组包括定义与长度说明两步: 1用使用Dim,Private或Public语句定义

15、括号内为空的数组。 格式:Dim | Private|Public 数组名( ) As 数据类型 2在过程中用ReDim语句指明该数组的长度。 格式:ReDim Preserve 数组名(下标1,下标2),Preserve参数:保留数组中原来的数据,5.4 动态数组,此时,只能改变最后一维的下标上界!,例:Dim A( ) As Integer,x% Redim A(10) x=10 Redim Preserve A(x+1) Redim Preserve A(30),长度可以是含有变量的表达式,例5.10 统计输入的若干个整数 中高于平均值的个数,Dim D%( ), i%, n%,x%,a

16、ver!n=0 : aver=0x=Val(InputBox(输入一个整数(-1结束)Do While x=0 n=n+1 : ReDim Preserve D(1 to n) D(n)=x : Print D(n); If n Mod 8=0 Then Print aver=aver+ D(n) x=Val(InputBox(输入一个整数(-1结束)LoopIf n0 Then aver=aver/n x=0 用变量x统计高于平均分的人数For i = 1 To n If D(i) aver Then x=x+1Next i,求数组下标值的上界与下界,要求:确保在打印动态数组A的各个值的过程

17、中,不发生数组下标值的越界错误。 For i = LBound(A) To UBound(A) Print A(i) ; Next i,5.5 与数组操作有关的函数和语句,一般形式为: UBound( , ) LBound( , ),Array 函数创建的数组类型是变体类型,数组长度为参数中常量值的个数,下界默认值由Option Base 语句指定。但它没有数组名,只能用来对变体型的动态数组整体赋值。,例如,要将1,2,3,4,5,6,7 这些值赋值给数组a,可使用下面的方法赋值。 Dim a() a=array(1,2,3,4,5,6,7)或 Dim a a=array(1,2,3,4,5,

18、6,7),2. Array函数,函数功能:将若干个常量表达式的值组合成一个数组。,例如: Dim a%( ), b, c%(5 to 15), i% For i = 5 To 15 c(i) = i * 10 Next i a = c : b = c 整体赋值后,数组a和b的下标范围均为515。,关于对动态数组的整体赋值,VB允许将一个数组的全部内容整体赋值给另一个相同类型的动态数组或一个变体型的变量,其作用相当于先按右边的数组的长度重新定义左边的动态数组的长度,然后再逐个元素赋值。,3. Split函数,函数功能: 从一个字符串中,以某个指定的符号为分隔符,分离出若干个子字符串,建立一个无名

19、的、字符型的一维数组。,使用格式: = Split( ,),例如:Dim MyWeek$( ), MyDay$MyWeek=Split (Sun,Mon,Tue,Wed,Thu,Fri,Sat,)MyDay= MyWeek(3) MyDay 的值为 Wed。,例5.11 分离出文本框中的多个整数,求最小值,Private Sub Text1_KeyPress(KeyAscii As Integer) Dim A%( ), C$( ), i%, mi% If KeyAscii = 13 Then 回车键的Ascii 值是13 C = Split(Text1, ,) ReDim A(LBound(

20、C) To UBound(C) mi = UBound(A) For i = UBound(A) To LBound(A) Step -1 A(i) = Val(C(i) : Print A(i); If A(i) A(mi) Then mi = i Next i Print: Print 最小值是: & A(mi) End IfEnd Sub,4. For EachNext语句,For EachNext语句的功能类似于ForNext循环语句,但它只能对数组或“集合”对象中的成员逐一进行操作 。,使用格式: For Each 成员 in 数组名 Exit For Next 成员,其中,“成员”

21、必须是一个变体型的变量,其功能类似于ForNext循环中的循环变量,在循环过程中依次获取数组中各个数组元素的值。For EachNext语句的循环次数就是数组中数组元素的个数。,例5.12 For EachNext使用实例,Private Sub Form_Click() Dim a( ), MyWeek$( ), x a = Array(0,1, 2, 3, 4, 5,6) MyWeek=Split (Sun,Mon,Tue,Wed,Thu,Fri,Sat,) For Each x In a Print x; ; Next x Print For Each x In MyWeek Print

22、 x; ; Next x PrintEnd Sub,For x= LBound(a) To UBound(a) Print a(x) ; ;Next x,程序运行结果为: 0 1 2 3 4 5 6Sun Mon Tue Wed Thu Fri Sat,1数组的概念 通常数组用来存放具有相同性质的一组数据,即数组中的数据必须是同一个类型。 数组元素是数组中的某一个数据项,引用数组通常是引用数组元素,数组元素的使用同简单变量的使用类似。 数组可以被看作一组带下标的变量集合,系统分配一块连续的内存空间来存放数组中的元素。当所需处理的数据个数确定时,通常使用定长数组,否则应该考虑使用动态数组。,本章

23、小结,2数组的声明 声明一个定长数组:Dim 数组名 ( 下界 To 上界 , 下界 To 上界 , ) As 类型关键字 它声明了数组名、数组维数、数组长度、数组类型。下界、上界必须为常数,不能为表达式或变量,若省略下界,则默认为 0, 也可用 Option Base语句将默认下界设置为1。 声明一个长度可变的动态数组: Dim 数组名( ) As 类型关键字ReDim Preserve 数组名 ( 下界 To 上界 , 下界 To 上界 , ),本章小结2,3数组的操作 对数组的操作通常要使用循环结构来实现。 数组的基本操作有: 数组输入、数组输出、求数组中的最大(最小)元素及下标、求和、数据倒置等。 应用数组解决的常用问题有: 排序、查找与复杂统计等。,本章小结3,

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报