第06章 数组.docx
- 文档编号:7897905
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:25
- 大小:65.88KB
第06章 数组.docx
《第06章 数组.docx》由会员分享,可在线阅读,更多相关《第06章 数组.docx(25页珍藏版)》请在冰豆网上搜索。
第06章数组
第6章数组
6.1数组的概念
数组是一组具有相同名字、不同下标的变量。
说明:
(1)数组元素的地位和作用与普通变量相当。
(2)数组中的数据必须是同一个类型。
(3)数组中各元素在内存中占据一片连续的存储单元。
(4)数组与循环结合使用,可以很方便地对大批数据进行处理。
6.2数组的定义
(1)过程级(局部级)
在过程中用Dim或Static定义
可用ReDim定义动态数组
(2)模块级
在模块中用Dim或Private定义
(3)程序级(全局级、公共级)
在标准模块顶部用Public定义
6.2.1常规数组的定义
1.格式
Dim数组名([[第一维下标下界To]第一维下标上界][,[第二维下标下界To]第二维下标上界]……)[As类型]
2.说明
(1)数组名与简单变量命名规则相同,同一过程中数组和变量不允许同名
(2)定义多维数组,各维的下标界限用逗号相隔
(3)下界和上界必须为整型常量,范围-32768~32767
(4)下界默认值为0,可由OptionBase语句改为1
(5)“类型”用来指定数组元素的数据类型
(6)一维数组元素个数=下标上界-下标下界+1,多维数组元素个数是各维下标取值个数之积
6.2.2动态数组的定义
1.定义格式
ReDim[Preserve]数组名(下标界限列表)[As类型]
用Preserve,重新定义之后,保留原有元素值
下标的上界和下界可以是常量、变量或表达式
2.定义方法
【方法1】
先用Dim或Public声明一个没有下标的数组
再用ReDim语句改变数组的大小、维数,不能改变数据类型
例6.2多次用ReDim语句定义同一个数组
DimS()AsString
PrivateSubForm_Click()
ReDimS(4)
S
(2)="One"
PrintS
(2)
ReDimS(6+1)
S(5)="VB"
PrintS(5)
ReDimS(2,3)
S(1,1)="Two"
PrintS(1,1)
EndSub
【方法2】
用ReDim语句直接定义数组
只可改变大小,但不能改变类型、维数
例6.3用ReDim语句直接定义数组
PrivateSubForm_Click()
ReDimvar(3)AsInteger'直接定义数组
ReDimvar
(2)'改变数组的大小
ReDimvar
(2)AsSingle'错误,不能改变类型
ReDimvar(2,3)'错误,不能改变维数
EndSub
6.3数组元素的使用
6.3.1数组元素的引用、赋值、输出和复制
1.数组元素的引用
通过数组名和下标访问指定的元素
与简单变量地位、作用相当
注意:
(1)Dima(5)AsInteger与t=a(5)的区别
(2)引用时,数组名、类型和维数必须与定义数组时一致。
(3)引用时,下标值应该在建立数组时所指定的范围内。
2.数组元素的赋值
【方法1】用赋值语句为单个元素赋值。
例如:
Dima(0To5)AsInteger
a(0)=1:
a
(1)=3:
a
(2)=5
a(3)=7:
a(4)=9:
a(5)=11
【方法2】通过循环语句为多个元素赋值。
例如:
OptionBase1
Dimt()AsString
PrivateSubForm_Click()
ReDimt(4)
Fori=1To4
S=InputBox("输入姓名:
")
t(i)=S
Nexti
EndSub
3.数组元素的输出
例6.4二维数组元素的赋值与输出
PrivateSubForm_Click()
Dimt(4,4)AsInteger
Fori=1To4
Forj=1To4
t(i,j)=i+j
Printt(i,j);"";
Nextj
Nexti
EndSub
4.数组元素的复制
单个数组元素可以像简单变量一样从一个数组复制到另一个数组。
例如:
DimB(5,10),A(8,8),C(10)
B(3,4)=A(4,5)
C(5)=B(1,2)*A(3,3)+C
(2)
6.3.2数组函数
1.LBound和UBound函数
求数组下标的下界、上界
格式:
LBound(ArrayName[,Dimension])
UBound(ArrayName[,Dimension])
其中,ArrayName数组名,Dimension指定第几维
例如:
Dimx(-10To100,-5To40)
LBound(x,1)得到x数组第1维的下界值-10
UBound(x,2)得到x数组第2维的上界值40
例6.5使用LBound和UBound函数。
PrivateSubForm_Click()
n=Val(InputBox("请输入数组下标下界"))
m=Val(InputBox("请输入数组下标上界"))
ReDima(nTom)AsInteger
Print"a数组元素为:
"
Fori=LBound(a)ToUBound(a)
a(i)=i
Printa(i);
Nexti
Print"b数组元素为:
"
Dimb(4,5)AsInteger
Fori=1ToUBound(b,1)
Forj=1ToUBound(b,2)
b(i,j)=10*i+j
Printb(i,j);
Nextj
Nexti
EndSub
程序运行时输入1和5后,运行结果如下图:
2.Array函数
(1)格式
数组名=Array(数组元素值)
(2)功能
给数组各元素赋初值
(3)说明
数组是一维变体类型,不加括号
数组元素值之间用逗号隔开
例6.6编写程序,检验Array函数
OptionBase1
PrivateSubCommand1_Click()
DimA()AsVariant
DimN1,N2AsString
DimkAsInteger
Test_str=Array("one","two","three","four")
N1=Test_str
(1)
N2=Test_str(3)
A=Array(1,2,3,4,5,6,7,8,9,0)
Fork=1To10
PrintA(k);
Nextk
PrintN1,N2
EndSub
程序的执行结果如下图:
6.3.3数组参数
(1)数组形参的定义
[ByRef]数组形参名()As数据类型名
不能用ByVal,因为数组参数只能传址
(2)调用时,实参是与形参相同类型的数组
(3)一个通用过程可以定义多个数组参数
(4)作参数的数组可以是任意维的,由实参数组决定
例6.7编写程序,实现数组传递。
Subca(min,max,p()AsInteger)
Fori=minTomax
p(i)=i^3
Nexti
EndSub
Subpa(min,max,q()AsInteger)
Fori=minTomax
Printq(i)
Nexti
EndSub
Subform_Click()
Dimvalue(1To4)AsInteger
Callca(1,4,value())
Callpa(1,4,value())
EndSub
运行结果:
6.4数组的清除
1.格式与功能
Erase数组名[,数组名]……
重新初始化常规数组元素的值
释放动态数组所占的存储空间
2.说明
(1)只需给出数组名,不带括号和下标
(2)常规数组,将元素的值初始化为相应数据类型的默认值
(3)动态数组,将删除整个数组
例6.8清除常规数组元素的值
PrivateSubForm_Click()
Dima(1To10)AsInteger
Fori=1To10
a(i)=i
Printa(i);
Nexti
Erasea
Print"Erasea"
Fori=1To10
Printa(i);
Nexti
EndSub
运行结果:
6.5数组元素的常用操作
6.5.1一维数组元素的常用操作
1.数组元素赋值
例6.9产生n个[1,100]之间的互不相同的随机整数。
Dima()AsInteger
DimnAsInteger
PrivateSubCommand1_Click()
n=Val(Text1.Text)
ReDima(n)
i=1
DoWhilei<=n
s=Int(Rnd*100+1)
Forpi=1Toi-1
Ifa(pi)=sThenExitFor
Nextpi
Ifpi=iThen'新产生的随机数与数组元素不相同,则存入数组
a(i)=s
Printa(i);
IfiMod5=0ThenPrint'以每行5个元素输出数组元素
i=i+1
EndIf
Loop
EndSub
2.求数组元素的平均值
例6.10求例6.9中数组元素的平均值。
PrivateSubCommand2_Click()
s=0
Fori=1Ton
s=s+a(i)
Nexti
Print"所有元素的平均值是:
";s/n
EndSub
3.数组元素的排序
例6.11用冒泡排序法将例6.9中的数组元素按照由小到大的顺序排序输出。
冒泡排序法:
将相邻两个元素进行比较,顺序不对则交换位置,n个数比较n-1轮,第i轮比较n-i次。
N-S流程图:
程序:
PrivateSubCommand3_Click()
Fori=1Ton-1
Forpi=1Ton-i
Ifa(pi)>a(pi+1)Then
s=a(pi)
a(pi)=a(pi+1)
a(pi+1)=s
EndIf
Nextpi
Nexti
Fori=1Ton
Printa(i);
Nexti
EndSub
例6.12用选择排序法将例6.9中数组元素按由小到大的顺序打印出来。
选择排序法:
第1轮,用指针k指向所有元素的最小值,交换到a
(1)中
第2轮,用指针k指向其余元素的最小值,交换到a
(2)中
……
第n-1轮,用指针k指向其余元素的最小值,交换到a(n-1)中
N-S流程图:
程序:
PrivateSubCommand4_Click()
Fori=1Ton-1
k=i
Forj=i+1Ton
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第06章 数组 06