首页 百科知识 一维数组和二维数组

一维数组和二维数组

时间:2022-10-03 百科知识 版权反馈
【摘要】:Msg BoxDebug.Print num=num+D数组参数的传递只能使用按地址传递的方式, 在被调用过程中, 用LBound() 函数和UBound() 函数可测出形参数组的下标下界与下标上界。例27: Array_Sum过程产生一个100以内随机数组, 要求调用Add函数求数组的和, 输出随机数组个数和数组内数据总和。

一、 一维数组

1. 一维数组的定义

一维数组中的元素呈直线状排列, 每个下标对应一个元素。

数组在使用前必须先行定义, 语法格式是:

Dim<数组名>([<下界>]To上界)As数据类型

若省略下标下界, 则数组的最小下标为0。

例如: Dim A(10)As Double

A数组共有11个元素 (下标的起止范围是0~10)。

2. 说明

(1) 定义数组时, 下标的下界值和上界值必须是常量或符号常量, 不能使用变量。

Dimx(n)

或:

n=Inputbox("输入n")

Dimx(n)As Single

均是错误的声明。

(2) 引用数组元素时, 下标不得超出所定义的下界和上界, 否则程序的执行将被中断,同时系统报错。

(3) 使用数组时, 用LBound() 和UBound() 函数可得到该数组下标的下界和上界值。

二、 案例十六的操作步骤

例26: 案例十六的程序代码如下。 其结果如图9.13所示。

Subsub26()

Dim D(10)As Integer,i As Integer

Dimdata(500)As Integer,Sum_350 As Integer

Dim up_avg As Integer,Sum_grade As Long

Dim num As Integer

Fori=1To500

data(i)=300+Rnd∗100

Nexti

For=1To500

Sum_grade=Sum_grade+data(i)

Ifdata(i)>350Then

Sum_350=Sum_350+1

End If

Nexti

avg_grade=Sum_grade/500

Fori=1To500

Ifdata(i)>avg_grade Then

up_avg=up_avg+1

End If

Grade=(data(i)-300)/10

D(Grade)=D(Grade)+1

Nexti

Msg Box("大于350分的考生人数"&Sum_350&" "&"500考生平均分="&avg_grade)

Msg Box("大于平均分的考生人数为"&up_avg)

Debug.Print""

Fori=0To9

Debug.Print("分数段3"&i&"0--"&"3"&i&"9考生人数为:"&" "&D(i)) num=num+D(i)

Nexti

Debug.Print("分数段400分的考生人数为:"&" "&500-num)

End Sub

三、 动态数组

动态数组指在声明数组时给出数组的大小需要改变时, 可用Re Dim语句重新指出数组大小。

1. 语法格式

Re Dim数组名(下标[,下标2...])[As类型]

例如:

Private Sub S1()

Dimx()As Single

...

n=Inputbox("输入n")

Re Dimx(n)

...

End Sub

2. 说明

(1) 动态数组在运行时分配存储单元, 过程中可多次使用Re Dim来改变数组元素的个数。

(2) Re Dim中的下标可以是常量, 也可以是有了确定值的变量, 即:

n=Input Box("输入n的值")

Re Dim Arr(n)

四、 二维数组

二维数组中数据排列成矩阵, 保存在一个二维表中。

1. 语法格式

Dim<数组名>(下标1,下标2)As数据类型

Dim<数组名>([<下界>To]上界,[<下界>To]上界)As数据类型

例如: Dim A(3,4)As Integer,声明的A数组有4´5=20个元素。

二维数组的操作通常需要与双重循环相结合。

2. 数组说明

(1) 下标1指定行, 下标2指定列, 若省略定义下标值, 则下标值默认为0;

(2) 二维数组在内存的存放顺序是 “先行后列”, 若定义a(2,3), 则存放顺序是:

a(0,0)→a(0,1)→a(0,2)→a(0,3)

a(1,0)→a(1,1)→a(1,2)→a(1,3)

a(2,0)→a(2,1)→a(2,2)→a(2,3)

例如: Diml Array(0To3,0To4)As Long

等价于

Diml Array(4,5)As Long

3. 数组参数的传递方法

数组参数的传递只能使用按地址传递的方式, 在被调用过程中, 用LBound() 函数和UBound() 函数可测出形参数组的下标下界与下标上界。

例27: Array_Sum过程产生一个100以内随机数组, 要求调用Add函数求数组的和, 输出随机数组个数和数组内数据总和。

编写的过程代码及运行结果如图9.42所示。

图9.42 数组求和结果

Function Add(Rnd_Array()As Integer,N As Integer)As Integer

Dimi As Integer,s As Integer

Fori=1 To N

s=s+Rnd_Array(i)

Nexti

Add=s

End Function

Sub Array_sum()

Dim NAs Integer,i As Integer

Dima(100)As Integer,Sum As Integer

N=Rnd∗100

Fori=1To N

a(i)=Rnd∗100

Nexti

Sum=Add(a(),N)

Msg Box("Sum="&Sum&" "&"N="&N) End Sub

五、 案例十七的操作步骤

例28: 编写过程代码生成下列8×8矩阵。

编写的过程代码如下, 其运行结果见案例十七图9.14所示。

Sub matrix()

Dim a (8,8) As Integer

Dimk As Integer

k=2

Fori=0To7

Forj=0To7

Ifj <=i Then

a(i,j)=1

Else

a(i,j)=k

k=k+1

End If

Nextj

Nexti

Fori=0To7

Forj=0To7

Ifa(i,j)<10Then

Debug.Print" "&a(i,j) '一位数多空1位

Else

Debug.Print" "&a(i,j)

End If

If j=7 Then

Debug.Print""

End If

Nextj

Nexti

End Sub

• 一个过程就是一组完成所需操作VBA代码的命令集合;

• VBA的过程主要包括 “Sub过程” 和 “Function过程” 两种;

• Sub过程不能返回值, Function过程可以返回值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈