第06章 数组Word格式.docx
- 文档编号:21032114
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:25
- 大小:65.88KB
第06章 数组Word格式.docx
《第06章 数组Word格式.docx》由会员分享,可在线阅读,更多相关《第06章 数组Word格式.docx(25页珍藏版)》请在冰豆网上搜索。
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语句直接定义数组
ReDimvar(3)AsInteger'
直接定义数组
ReDimvar
(2)'
改变数组的大小
ReDimvar
(2)AsSingle'
错误,不能改变类型
ReDimvar(2,3)'
错误,不能改变维数
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
ReDimt(4)
Fori=1To4
S=InputBox("
输入姓名:
"
)
t(i)=S
Nexti
3.数组元素的输出
例6.4二维数组元素的赋值与输出
Dimt(4,4)AsInteger
Forj=1To4
t(i,j)=i+j
Printt(i,j);
"
;
Nextj
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函数。
n=Val(InputBox("
请输入数组下标下界"
))
m=Val(InputBox("
请输入数组下标上界"
ReDima(nTom)AsInteger
Print"
a数组元素为:
Fori=LBound(a)ToUBound(a)
a(i)=i
Printa(i);
b数组元素为:
Dimb(4,5)AsInteger
Fori=1ToUBound(b,1)
Forj=1ToUBound(b,2)
b(i,j)=10*i+j
Printb(i,j);
程序运行时输入1和5后,运行结果如下图:
2.Array函数
(1)格式
数组名=Array(数组元素值)
(2)功能
给数组各元素赋初值
(3)说明
数组是一维变体类型,不加括号
数组元素值之间用逗号隔开
例6.6编写程序,检验Array函数
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
程序的执行结果如下图:
6.3.3数组参数
(1)数组形参的定义
[ByRef]数组形参名()As数据类型名
不能用ByVal,因为数组参数只能传址
(2)调用时,实参是与形参相同类型的数组
(3)一个通用过程可以定义多个数组参数
(4)作参数的数组可以是任意维的,由实参数组决定
例6.7编写程序,实现数组传递。
Subca(min,max,p()AsInteger)
Fori=minTomax
p(i)=i^3
Subpa(min,max,q()AsInteger)
Printq(i)
Subform_Click()
Dimvalue(1To4)AsInteger
Callca(1,4,value())
Callpa(1,4,value())
运行结果:
6.4数组的清除
1.格式与功能
Erase数组名[,数组名]……
重新初始化常规数组元素的值
释放动态数组所占的存储空间
(1)只需给出数组名,不带括号和下标
(2)常规数组,将元素的值初始化为相应数据类型的默认值
(3)动态数组,将删除整个数组
例6.8清除常规数组元素的值
Dima(1To10)AsInteger
Fori=1To10
Erasea
Erasea"
6.5数组元素的常用操作
6.5.1一维数组元素的常用操作
1.数组元素赋值
例6.9产生n个[1,100]之间的互不相同的随机整数。
Dima()AsInteger
DimnAsInteger
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
IfiMod5=0ThenPrint'
以每行5个元素输出数组元素
i=i+1
EndIf
Loop
2.求数组元素的平均值
例6.10求例6.9中数组元素的平均值。
PrivateSubCommand2_Click()
s=0
Fori=1Ton
s=s+a(i)
所有元素的平均值是:
s/n
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
例6.12用选择排序法将例6.9中数组元素按由小到大的顺序打印出来。
选择排序法:
第1轮,用指针k指向所有元素的最小值,交换到a
(1)中
第2轮,用指针k指向其余元素的最小值,交换到a
(2)中
……
第n-1轮,用指针k指向其余元素的最小值,交换到a(n-1)中
PrivateSubCommand4_Click()
k=i
Forj=i+1Ton
Ifa(j)<
a(k)Thenk=j
Ifk<
>
iThent=a(k):
a(k)=a(i):
a(i)=t
4.数组元素的查找
例6.13查找例6.9中数组元素的最大值及其所在位置。
PrivateSubCommand5_Click()
s=a
(1):
pi=1
Fori=2Ton
Ifa(i)>
sThen
s=a(i):
pi=i
值最大的元素是:
s;
位置是:
第"
pi;
个数"
例6.14在例6.9中数组中顺序查找值为x的元素,若找到则输出所在位置。
PrivateSubCommand6_Click()
x=77
Ifx=a(i)Then
查找成功,"
x;
在数组中的位置是:
i
ExitFor
Ifi>
nThenPrint"
查找失败,"
不在数组中"
例6.15在例6.12产生的升序数组中折半查找值为x的元素,若找到则输出所在位置。
折半查找法:
将x与数组中间的元素进行比较,如果x大于元素值,则x位于数组后面一半元素中。
如果x小于元素值,则x位于数组前面一半元素中。
接下来,在一半元素中用同样的方法继续查找。
这样,不断地减小查找范围,直到没有元素。
PrivateSubCommand7_Click()
x=77:
L=1:
H=n
DoUntilL>
H
M=(L+H)\2
Ifx=a(M)Then
M
ExitDo
ElseIfx>
a(M)Then
L=M+1
Else
H=M-1
IfL>
HThenPrint"
5.数组元素的插入
例6.16数据s插入到例6.12产生的升序数组,保证插入后数组仍然升序。
PrivateSubCommand8_Click()
ReDimPreservea(n+1)
s=20
Fori=nTo1Step-1
Ifs<
a(i)Then
a(i+1)=a(i)
a(i+1)=s
n=n+1
例6.17数据s插入到例6.9产生的无序数组的第pi个位置上。
PrivateSubCommand9_Click()
s=15:
pi=3
Fori=nTopiStep-1
a(pi)=s:
6.数组元素的删除
例6.18删除例6.9产生的无序数组中第pi个位置上的数据元素。
PrivateSubCommand10_Click()
Fori=piTon-1
a(i)=a(i+1)
n=n-1
例6.19删除例6.9产生的无序数组中值为s的数据元素。
PrivateSubCommand17_Click()
s=77
Ifa(i)=sThen
Forpi=iTon-1
7.数组元素的逆序存储
例6.20将例6.9产生的无序数组按照相反的顺序输出(不借助任何额外的空间)。
PrivateSubCommand11_Click()
例6.21将例6.9产生的无序数组按照相反的顺序存储(只可以借助另外一个单元)。
PrivateSubCommand12_Click()
Fori=1Ton\2
s=a(n-i+1)
a(n-i+1)=a(i)
例6.22将例6.9产生的无序数组按照相反的顺序输出(可以借助另外一个数组)。
PrivateSubCommand13_Click()
Dimb()AsInteger
ReDimb(n)
b(i)=a(n-i+1)
Printb(i);
6.5.2二维数组元素的常用操作
1.查找
例6.23有一个n×
m的矩阵,要求找出其中值最大的那个元素所在的行号和列号,以及该元素之值。
设该矩阵为:
算法:
(1)输入n,m和n×
m矩阵中各元素值;
(2)先将t(1,1)的值赋给max变量;
(3)将max与各元素相比较,如果有某个t(i,j)>
max,则将t(i,j)赋给max,并将行号i和列号j赋给变量row和colum;
(4)最后输出矩阵各元素和max、row、colum的值。
请输入矩阵的行数"
请输入矩阵的列数"
ReDimt(n,m)AsInteger
Forj=1Tom
t(i,j)=Val(InputBox("
请输入元素"
max=t(1,1)
Ift(i,j)>
maxThen
max=t(i,j)
row=i
colum=j
Themartrixis:
PrintTab(5*j);
t(i,j);
Thelargestnumberis:
t("
row;
,"
colum;
)="
max
2.计算
例6.24计算n×
m的矩阵的所有元素的平均值。
s=s+t(i,j)
s/(m*n)
例6.25计算m×
m的方阵的主对角线所有元素的和。
ReDimt(m,m)AsInteger
Fori=1Tom
Ifi=jThens=s+t(i,j)
主对角线元素之和:
s
例6.26计算m×
m的方阵的次对角线所有元素的和。
Ifi+j=m+1Thens=s+t(i,j)
副对角线元素之和:
3.转置
例6.27矩阵转置(借助另外一个数组)。
矩阵转置:
行列数据交换(沿对角线反转)
矩阵
转置后为
将a数组第i行第j列的元素赋予b数组第j行第i列
n=2:
m=3
ReDima(n,m),b(m,n)
a(i,j)=Val(InputBox("
请输入数据"
b(j,i)=a(i,j)
matrixa:
PrintTab(6*j);
a(i,j);
matrixb:
Forj=1Ton
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第06章 数组 06