设有一个长java定义整型数组的二维数组共有7行8列,在内存中的起始地址为 100。

二维数组是如何存储的设W为一个二维数组,行下标i从0到7 ,列下标j从0到3 ,若按行顺序存放二维数组W,其起始地址为100,则二维数组元素W[6,3]的起始地址为________。为什么?我知道答案哦
有才炒勛酗
二维数组A[m][n]可以视为由m个行向量组成的向量,或者是由n个列向量组成的向量。由于计算机的内存是一维的,多维数组的元素应排成线性序列后存入存储器。数组一般不做插入和删除操作,即结构中元素个数和元素间的关系不变。所以采用顺序存储方法表示数组。1、&&行优先存储将数组元素按行向量排列,第i+1个行向量紧接在第i个行向量后面。【例】二维数组A[m][n]按行优先存储的线性序列为:A[0][0]、A[0][1]…A[0][n]、A[1][1]、A[1][1]…A[1][n]…A[m][n]、A[m][1]…A[m][n]在PASCAL和C语言中数组按行优先顺序存储。2、&&列优先存储将数组元素按列向量排列,第i+1个列向量紧接在第i个列向量后面。【例】二维数组A[m][n]按列优先存储的线性序列为:A[0][0]、A[1][0]…A[m][0]、A[0][1]、A[1][1]…A[m][1]…A[m][1]、A[0][n]…A[m][n]ORTRAN语言中,数组按列优先顺序存储。
为您推荐:
扫描下载二维码第六章 数组
如果在程序中涉及的数据较多,处理的是一批或多批数据,就要用到数组的的概念。在Visual Basic中,不仅可以使用一般数据类型的数组,还可以使用控件数组。
6.1 数组的概念
6.1.1 数组与数组元素
若有100个互不关联的数据,可以分别把它们存放到100个变量中。但是如果这些数据是有内在联系的,是具有相同属性的(如100个学生的成绩),可以把这批数据看作一个有机的整体,称为数组(array),用一个统一的名字代表这批数据,而用序号或下标来区分各个数据。例如用s代表学生成绩这组数据,s就是数组名,用s1,s2,s3分别代表学生l、学生2、学生3的成绩,s右下角的数字l,2,3用来表示该数据在数中的序号,称为下标(subscript)或索引(index)。数组中的数据称为数组元素。
概括地说:数组是有序数据的集合。要寻找一个数组中的某一个元素必须给出两个要素,即数组名和下标。数组名和下标唯一地标识一个数组中的一个元素。
数组是有类型属性的,例如可以定义a是整型数组,b是单精度型数组等。这样同一数组中的每一个元素都属于同一数据类型。
在VB中,当声明数组的数据类型为Variant时,各个元素能够含不同类型的数据(对象、字符串、数值等)。
一个数组在内存中占用一片连续的存储单元。如果有一个整型数组a,假设数组的起始地址为2000,则该数组在内存中的存储情况如图6.1所示。
图中数组名a代表该数在内存中分配的存储空间的首地址,即2000。索引号(下标)表示指定元素到数组首地址的“单元距离”,即从数组的首地址开始,越过多少个数组元素才访问到指定的元素。在这里a是Integer 类型的数组,每一个元素占用两个字节。
引人数组就不需要在程序中定义大量的变量,大大减少程序中变量的数量,使程序精炼,而且数组含义清楚,使用方便,明确地反映了数据间的联系。许多好的算法都与数组有关。熟练地利用数组,可以大大地提高编程和解题的效率,加强了程序的可读性。
由于在程序中无法在数组名的右下角书写下标,因此在计算机高级语言中都用括号来表示下标,在VB中用圆括号来表示下标,如s(1),s(2),s(3)分别代表s1,s2,s3。
6.1.2 数组的下标与维数
1.数组的下标
由上面的分析可知,在数组中的一个元素相当于一个普通变量,用以存放一个数据项,由数组名和下标确定,下标必须用圆括号括起来。数组元素又称为下标变量。
下标可以是常数、变量、表达式或另一个数组的元素。下标值可以是正整数、0和负整数,如果带有小数部分将会自动地对它四舍五入取整。
例如:若x(1)=5,k=3,则y(x(1))就是y(5),y(x(1)+k)就是y(8)。又如x(1.7)将作为x(2)处理,x(-1.7)将作为x(-2)处理。
正因为数组元素的下标可以是变量,所以与简单变量相比,下标变量有不少方便之处。例如a(i)是数组a的一个元素,当i取不同的值时,它就表示不同的数组元素,如i=0,表示a(0),i=1,表示a(1),??等等,使用时只要有规则地改变下标值,就可以方便地使用a(i)引用数组a中的所有元素。
2.数组的维数
如果数组元素只有一个下标,则称这个数组为一维数组。如数组s有5个元素:s(0)、s(1)、s(2)、s(3)、s(4),依次保存5个学生的一门功课的成绩,则s为一维数组。一维数组中的各个元素又称为单下标变量。一维数组中的下标又称为索引(Index)。
如果一个导师带有4个研究生,每个学生一学期选修有5门功课,要存储所有学生各门功课的成绩,可以使用有两个下标的数组来表示,如第i个学生第j门功课的成绩可以用s(i,j)表示。其中i表示学生顺序号,称为行下标(i=0,1,2,3);j表示课程序号,称为列下标(j=0,1,2,3,4)。这4个研究生一学期的学习成绩可以用一个矩阵表示如下:
这样每个元素用两个下标的数组称为二维数组,其元素又称为双下标变量。
数组元素中下标的个数称为数组的维数。在VB中最多可以使用16位数组。
数组元素在内存中占用一片连续的存储空间,而分配空间的大小由数组维数及下标的最大值和小值确定。因此,又把数组下标的最大值称为下标的上界,下标的最小值称为下标的下界。
若一个数组定义之后,元素个数在程序运行过程中保持不变,这样的数组称为固定大小数组,简称固定数组;若一个数组定义之后,元素个数在程序运行过程中可以改变的,这样的数组称为动态数组。
6.2 数组的声明和应用
6.2.1 数组声明语句
Dim语句除用于定义变量的类型外,还可用于定义数组,确定数组的维数及每一维元素的个数,以便在内存分配相应的存储空间,存放数组中的数据。
使用Dim定义数组有两种方式。
⑴指定下标的上界
定义数组时,指定下标的最大值(上界),而下标的最小值(下界)为默认值。
一维数组的定义格式:
Dim 数组名(下标上界) As 类型名
二维数组的定义格式:
Dim 数组名(第一维的下标上界,第二维的下标上界) As 类型名
①这里只给出了下标的上界,而下标的下界默认从零开始。
②可以借助Option Base命令人为地选择下标从0开始或则从1开始。格式为: Option Base n
这里n只能是0或1。若n=1,则程序中定义的所有数组的各维下标都是从1开始(若n=0,则该语句是多余的,因为不说明,默认下标值从0开始)。
③定义数组下标的上、下界值不得超过Long数据类型能表示的范围。
Dim Sum(10) As Long
‘定义长整型一维数组,共11个元素,下标从0~10
Dim M(3,4) As Integer
‘定义整型4×5的二维数组,共20个元素
⑵指定下标的取值范围
定义数组时指定下标的上界、下界(-3)。
一维数组的定义格式:
Dim 数组名(下标下界
To 下标上界)
二维数组的定义格式:
Dim 数组名(下标下界 To 上界,第二维的下界 To 上界)
Dim a(-3 to 6) As Integer
‘定义整型一维数组,共10个元素,下标从-3~6
Dim M(1 To 10,1 To 10) As Double ‘定义10×10的二维数组,共100个元素
Dim D(1 To 3,1 To 10,1 To 5)
‘定义3×10×5的三维数组,共150个元素
数组一旦定义之后,即刻分配存储并初始化各元素,这与定义变量相同,数值型数组的各元素都初始化为0,字符型数组的各元素都初始化为空。
引用数组元素时,数组名、数组类型、数组维数、使用的下标(索引号)的范围都必须与数组声明一致。
例6-1 随机产生10个两位数,找出其最大值、最小值和平均值。
分析:在这里我们使用含有10元素的数组来存储产生的10个随机数,然后求出这10个元素中的最大值、最小值和平均值。
设计步骤如下:
⑴创建一个工程,在窗体上添加一个框架Frame1、4个标签Label1~Label4、3个文本框Text1~Text3、3个命令按钮Command1~Command3。程序用户界面如图6-2所示。
图6-2 求最大值、最小值和平均值
⑵编写程序代码。
在窗体模块的通用段声明数组,保证各个过程都能使用该数组。编写窗体的Load事件过程,设置控件的有关属性。代码如下:
Dim a(9) As Integer
Private Sub Form_Load()
Frame1.Caption = &10个随机数&
Label2.Caption = &最大值&
Label3.Caption = &最小值&
Label4.Caption = &平均值&
Text1.Text = &&
Text2.Text = &&
Text3.Text = &&
Text1.Locked = True
Text2.Locked = True
Text3.Locked = True
Command1.Caption = &重置&
Command2.Caption = &计算&
Command3.Caption = &关闭&
编写窗体的Activate事件过程,产生随机数,为数组各元素赋值。代码如下: Private Sub Form_Activate()
Dim p As String, i As Integer
Randomize Time
For i = 0 To 9
x = Int(Rnd * 90) + 10
For j = 0 To i - 1
If x = a(j) Then yes = 1: Exit Do ‘如与前面元素相同,重新产生随机数
Loop While yes = 1
p = p & Str(a(i)) & &,&
Label1.Caption = LTrim(Left(p, Len(p) - 1))
编写“重置”命令按钮Command1的Click事件过程,重新为数组元素赋值,并清除文本框显示的数据。代码如下:
Private Sub Command1_Click()
Form_Activate
Text1.Text = &&
Text2.Text = &&
Text3.Text = &&
编写“计算”命令按钮Command2的Click事件过程,求最大值、最小值及平均值。代码如下:
Private Sub Command2_Click()
Dim max As Integer, min As Integer, s
As Single, i As Integer
min = 100: max = 10: s = 0
For i = 0 To 9
If a(i) & max Then max = a(i)
If a(i) & min Then min = a(i)
s = s + a(i)
Text1.Text = max
Text2.Text = min
Text3.Text = s / 10
最后编写“关闭”命令按钮Command3的Click事件过程,退出程序。代码如下: Private Sub Command3_Click()}

我要回帖

更多关于 二维数组起始地址 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信