欢迎访问文稿网!

一维数组和二维数组

范文之家 分享 时间: 加入收藏 我要投稿 点赞

一维数组和二维数组

    一、 一维数组

    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过程可以返回值。

221381
领取福利

微信扫码领取福利

微信扫码分享