数组元素存储地址的计算

数组元素存储地址的计算
数组元素存储地址的计算

数组元素存储地址的计算 一维数组

设一维数组A[n]存放在n 个连续的存储单元中,每个数组元素占一个存储单元(不妨设为C 个连续字节). 如果数组元素A[0]的首地址是L ,则A[1]的首地址是L+C ,A[2]的首地址是L+2C ,… …,依次类推,对于01≤≤-i n 有:

C i A Loc i A Loc *])0[(])[(+=

二维数组

二维数组的每个元素含两个下标,如果将二维数组的第一个下标理解为行号,第二个下标理解为列号,然后按行列次序排列个元素,则二维数组呈阵列形状。例如

mn

m m n

n a a a a a a a a a A

2

1

222

2111211

=

它是一个行号为1~m ,列号为1~n 的二维数组元素阵列。 如何保存二维数组? 首先要确定一个顺序

22

21

20

121110

020100

a a a a a a a a a B = 22

21

20

121110020100a a a a a a a a a B = 22

21

20

121110

020100a a a a a a a a a B = 222120121110020100a a a a a a a a a

第0行 第1行 第2行

22

21

20

121110

020100

a a a a a a a a a B = 22

21

20

121110020100a

a

a a

a a a

a a B =

22

21

20

121110

020100a a a a a a a a a B =

2212

02

21

11

01

20

10

00

a a a a a a a a a

第0列 第1列 第2列

22

21

20

121110

020100

a a a a a a a a a B = 22

1202a a a a a B = B =

B B = 021201221100211020a a a a a a a a a

设count 为数组B 中元素的个数,则count=9 按行优先存储

按列优先存储

地址如何计算?

所谓按行优先顺序,就是将数组元素按行向量的顺序存储,第1 i

个行向量存储在第i个行向量之后。

下面我们计算二维数组A m n

[][]中任一元素A[i][j]的存储地址,设每个数组元素所占空间为C个连续字节。显然,A[i][j]是第i个行向量B[i]中的第j个元素。

在A[i][j]之前的元素个数为u,分别是A[0][0],A[0][1],A[0][2],…,A[0][n],A[1][0],A[1][1],A[1][2],…,A[1][n],…,A[i-1][0],A[i-1][1],A[i-1][2],…,A[i-1][n],A[i][0],A[i][1],A[i][2],…,A[i][j-1]

设每个数组元素所占空间为C个连续字节。

Loc(A[i][j])=Loc(A[0][0])+u*C

u=?

前i行(第0行到第i-1行)(每行n个元素)的元素个数+第i 行的元素个数(A[i][0]到A[i][j-1])

因此,u=i*n+j

Loc(A[i][j])=Loc(A[0][0])+u*C

=Loc(A[0][0])+(i*n+j)*C

按列优先存储

地址如何计算?

在A[i][j]之前的元素个数为v,分别是A[0][0],A[1][0],A[2][0],…,A[m][0],A[0][1],A[1][1],A[2][1],…,A[m][1],…,A[0][j-1],A[1][j-1],A[2][j-1],…,A[m][j-1],A[0][j],A[1][j],A[2][j],…,A[i-1][j]

设每个数组元素所占空间为C个连续字节。

Loc(A[i][j])=Loc(A[0][0])+v*C

v=?

前j列(第0列到第j-1列)(每列m个元素)的元素个数+第j 列的元素个数(A[0][j]到A[i-1][j])

因此,v=j*m+i

Loc (A[i][j])=Loc (A[0][0])+v*C

=Loc (A[0][0])+(j*m+i )*C

高维数组

按行优先:“左”下标优先,即第一(最左)下标的下标值较小的元素较先存储,第一个下标值相同者,按第二下标优先存储,对任意的k>1,对第1~(k-1)维相同者,先存储第k 维中下标值较小者。 按列优先:“右”下标优先(最后一维下标为最右),先存储第n 维下标值较小者,第n 维下标值相同者,先存储第n-1维下标值较小者。

三维数组D[3][3][4]的顺序存储次序是

元素表示为D[i][j][k] 其中,0≤i ≤2,0≤j ≤2,0≤k ≤3,

可以把它看作一维数组

B 1[3] = { D[0][3][4],D[1][3][4],D[2][3][4] }

D[0][0][0],D[0][0][1],D[0][0][2],D[0][0][3] D[0][1][0],D[0][1][1],D[0][1][2],D[0][1][3] D[0][2][0],D[0][2][1],D[0][2][2],D[0][2][3]

D[1][0][0],D[1][0][1],D[1][0][2],D[1][0][3] D[1][1][0],D[1][1][1],D[1][1][2],D[1][1][3] D[1][2][0],D[1][2][1],D[1][2][2],D[1][2][3]

D[2][0][0],D[2][0][1],D[2][0][2],D[2][0][3] D[2][1][0],D[2][1][1],D[2][1][2],D[2][1][3] D[2][2][0],D[2][2][1],D[2][2][2],D[2][2][3]

D[0][3][4]

i=0

D[1][3][4]

i=1

D[2][3][4]

i=2

For x=0 to 2 do For y=0 to 2 do For z=0 to 3 do D[i][j][k]的地址:

Loc (D[i][j][k])=Loc (D[0][0][0])+w*C 第一个下标的变化:0到i-1,共i*3*4个元素

第一个下标为i 时,第二个下标的变化:0到j-1,共j*4个元素 第一个下标为i ,第二个下标为j 时,第三个下标的变化:0到k-1,共k 个元素 w= i*3*4+j*4+k

Loc (D[i][j][k])=Loc (D[0][0][0])+w*C

=Loc (D[0][0][0])+(i*3*4+j*4+k )*C

For z=0 to 3 do For y=0 to 2 do For x=0 to 2 do

22

12

02

21

11

01

20

10

00

a a a a a a a a a

D[0][0][0],D[1][0][0],D[2][0][0] D[0][1][0],D[1][1][0],D[2][1][0] D[0][2][0],D[1][2][0],D[2][2][0]

D[0][0][1],D[1][0][1],D[2][0][1] D[0][1][1],D[1][1][1],D[2][1][1] D[0][2][1],D[1][2][1],D[2][2][1]

D[0][0][2],D[1][0][2],D[2][0][2] D[0][1][2],D[1][1][2],D[2][1][2] D[0][2][2],D[1][2][2],D[2][2][2]

D[0][0][3],D[1][0][3],D[2][0][3] D[0][1][3],D[1][1][3],D[2][1][3] D[0][2][3],D[1][2][3],D[2][2][3]

For z=0 to 3 do For y=0 to 2 do For x=0 to 2 do D[i][j][k]的地址:

Loc (D[i][j][k])=Loc (D[0][0][0])+w*C 第三个下标的变化:0到k-1,共k*3*3个元素

第三个下标为k 时,第二个下标的变化:0到j-1,共j*3个元素 第三个下标为k ,第二个下标为j 时,第一个下标的变化:0到i-1,共i 个元素 w= k*3*3+j*3+i

Loc (D[i][j][k])=Loc (D[0][0][0])+w*C

=Loc (D[0][0][0])+(k*3*3+j*3+i )*C

D[3][3][0] k=0

D[3][3][1] k=1

D[3][3][2] k=2

D[3][3][3] k=3

j=0 j=1 j=2 j=0 j=1 j=2 j=0 j=1 j=2 j=0 j=1 j=2

n 维数组][]][[21n m m m a For 1l =0 to 11-m

do

For 2

l =0 to

12-m

do

… … … …

For n

l =0 to

1-n m

do C

s Loc i i i Loc n *)0,,0,0(),,,(21+=

s = ?

1l 的变化:0~1i -1,共1i *2m *3m *…*n m =1i *∏=n

p p

m 2个元素

1l 等于1i 时,2

l 的变化:0~2i -1,共2i *3m *…*n m =2i *∏=n

p p m 3

个元素

1l 等于1i 时,

2l 等于2i 时,3l 的变化:

0~3i -1,共3i *4m *…*n m =3i *∏=n

p p m 4

个元素

… … … …

1l 等于1i 时,2

l 等于2i 时,…,1-n l 等于1-n i 时,n l 的变化:0~n i -1,

共n i 个元素 故

s=1i *∏=n

p p m 2

+2i *∏=n

p p m 3

+3i *∏=n

p p m 4

+…+1-n i *n m +n i

n n k n

k p p

k i m

i

+=

∑∏-=+=)*

(1

1

1

C s Loc i i i Loc n *)0,,0,0(),,,(21+=

C

i m

i Loc n n k n

k p p

k *})*

({)0,,0(1

1

1

++=∑∏-=+=

数组元素存储地址的计算

数组元素存储地址的计算 一维数组 设一维数组A[n]存放在n 个连续的存储单元中,每个数组元素占一个存储单元(不妨设为C 个连续字节). 如果数组元素A[0]的首地址是L ,则A[1]的首地址是L+C ,A[2]的首地址是L+2C ,… …,依次类推,对于01≤≤-i n 有: C i A Loc i A Loc *])0[(])[(+= 二维数组 二维数组的每个元素含两个下标,如果将二维数组的第一个下标理解为行号,第二个下标理解为列号,然后按行列次序排列个元素,则二维数组呈阵列形状。例如 mn m m n n a a a a a a a a a A ΛΛΛ Λ21 222 2111211= 它是一个行号为1~m ,列号为1~n 的二维数组元素阵列。 如何保存二维数组? 首先要确定一个顺序 222120 121110 020100a a a a a a a a a B = 222120 121110020100a a a a a a a a a B = 22 2120 121110 020100a a a a a a a a a B = 2221 20 12 11 10 02 01 00 a a a a a a a a a 第0行 第1行 第2行

222120 121110 020100a a a a a a a a a B = 2221 20 121110020100a a a a a a a a a B = 22 2120 121110 020100a a a a a a a a a B = 2212 02 21 11 01 20 10 00 a a a a a a a a a 第0列 第1列 第2列 222120 121110 020100a a a a a a a a a B = 221202a a a a a B = B = B B 021******* 00 21 10 20 a a a a a a a a a 设count 为数组B 中元素的个数,则count=9 按行优先存储

C语言数组元素的查询

C语言数组元素的查询 在实际开发中,经常需要查询数组中的元素。例如,学校为每位同学分配了一个唯一的编号,现在有一个数组,保存了实验班所有同学的编号信息,如果有家?想知道他的孩子是否进入了实验班,只要提供孩子子的编号就可以,如果编号和数组中的某个元素相等,就进入了实验班,否则就没进入.不幸的是,C语言标准库没有提供与数组查询相关的函数,所以我们只能自己编写代码。 对无序数组的查询所谓无序数组,就是数组元素的排列没有规律。无序数组元素查询的思路也很简单,就是用循环遍历数组中的每个元素,把要查询的值挨个比比较一遍。请看下面的代码: #include #include int main(){ int nums[10] = {1, 10, 6, 296, 177, 23, 0, 100, 34, 999}; int i, num, subscript = -1; printf("Please input an integer: "); scanf("%d", &num); for(i=0; i<10; i++){ if(nums[i] == num){ subscript = i; break; }

} if(subscript<0){ printf("%d isn't in the array.\n", num); }else{ printf("%d is in the array, and it's subscript is %d.\n ", num, subscript); } system("pause"); return 0; } 运行结果: Please input an integer: 100 100 is in the array, and it's subscript is 7. 或者 Please input an integer: 28 28 isn't in the array. 这段代码的作用是让用户输入一个数字,判断该数字是否在数组中,如果在,就打印出下标。 第10~15行代码是关键,它会遍历数组中的每个元素,和用户输入的数字进行比较,如果相等就获取它的下标并跳出循环。

Java数组测习题(带答案)

精心整理一填空题 1)数组的元素通过下标来访问,数组Array的长度为Array.length。 2)数组复制时,"="将一个数组的引用传递给另一个数组。 3)JVM将数组存储在栈(堆或栈)中。 4)数组的二分查找法运用的前提条件是数组已经排序。 5)Java中数组的下标的数据类型是整型。 6)数组最小的下标是0。 7) 8) 9) 10) 11) 12) 1. 2. 3. 4. 5. 6. 7. 8.A. 9. 10. 11.A 12.C.charstr[5]={"hi"}; D.charstr[100]=""; 13.数组在Java中储存在C中 14.A.栈 B.队列 C.堆 D.链表 15.下面程序的运行结果是____ main(){ inta[][]={{1,2,3},{4,5,6}}; }

A.3 B.4 C.5 D.6 16.下面程序的运行结果是_C___ 17.m ain(){ intx=30; int[]numbers=newint[x]; x=60; (numbers.length); } A.60 B.20 C.30 D.50 18. 19.m 20.c 21.i 22.w 23. 24.A 25.C 26. A. C.用 27. 28. A. 29. 30. A.char--'"u0000' B.Boolean--true C.float--0.0f D.int--0 31.关于数组作为方法的参数时,向方法传递的是A A.数组的引用 B.数组的栈地址 C.数组自身 D.数组的元素 32.关于数组复制,下列说法错误的是AC A."="可以实现数组复制 B.运用循环语句进行数组复制必须两个数组长度相同 C.arraycopy()方法没有给目标数组分配内存空间 D.数组复制是数组引用的传递

数组的定义

一维数组的定义方式 在C语言中使用数组必须先进行定义。 一维数组的定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如: int a[10]; 说明整型数组a,有10个元素。 float b[10],c[20]; 说明实型数组b,有10个元素,实型数组c,有20个元素。 char ch[20]; 说明字符数组ch,有20个元素。 (数组的定义和对变量的定义是一致的,可以连续在一行定义:float b[10],c[20];) 对于数组类型说明应注意以下几点: 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。 数组名的书写规则应符合标识符的书写规定。 数组名不能与其它变量名相同。 例如: main() { int a; float a[10]; …… } 是错误的。 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0],a[1],a[2],a[3],a[4]。 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 例如:

#define FD 5 main() { int a[3+2],b[7+FD]; …… } 是合法的。但是下述说明方式是错误的。 main() { int n=5; int a[n]; …… } 允许在同一个类型说明中,说明多个数组和多个变量。 例如: int a,b,c,d,k1[10],k2[20]; 注意:1定义数组长度的常量表达式的结果必须是整形常量(包括字符) 2 在执行C99标准的编译系统中,允许对数组进行动态定义,即C99规定了可变长数组的存在。 但是,目前执行C99标准的编译器尚不普遍,在C89中是不允许使用可变长数组的,main和被调用函数中都不可以使用(如VC++6.0) 二维数组的定义 前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C语言允许构造多维数组。多维数组元素有多

第5章 数组

第 5 章数组 一、选择题 1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( B )。 A. 13 B. 33 C. 18 D. 40 2.有一个二维数组A[1:6,0:7]每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积是(①L)个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是(②J)。若按行存储,则A[2,4]的第一个字节的地址是(③C)。若按列存储,则A[5,7]的第一个字节的地址是(④I)。就一般情况而言,当(⑤C)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。供选择的答案: ①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120 G. 156 H. 234 I. 276 J. 282 K. 283 L. 288 ⑤: A.行与列的上界相同 B.行与列的下界相同 C.行与列的上、下界都相同 D.行的元素个数与列的元素个数相同 3.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( B )。 A. BA+141 B. BA+180 C. BA+222 D. BA+225 4.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=( B )。 A. 808 B. 818 C. 1010 D. 1020 5.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( A )。 A. 1175 B. 1180 C. 1205 D. 1210 6.有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后一个元素的第一个字节的地址是(①H )。若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是(②C )和(③E )。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是(④A )和(⑤F )。 ①-⑤:A.28 B.44 C.76 D.92 E.108 F.116 G.132 H.176 I.184 J.188 7.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为( B )。供选择的答案: A. 198 B. 195 C. 197 8.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。 (1)存放A至少需要( E )个字节; (2)A的第8列和第5行共占( A )个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素( B )的起始地址一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 E. 540 (2)A. 108 B. 114 C. 54 D. 60 E. 150 (3)A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9] 9.二维数组A的每个元素是由6个字符组成的串,其行下标i=0,1,…,8,列下标j=1,2,…,10。若A按行先存储,元素A[8,5]的起始地址与当A按列先存储时的元素( B )的起始地址相同。设每个字符占一个字节。 A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9] 10.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定a ij(i

C#2010 获取数组元素数与类型

C#2010 获取数组元素数与类型 在C#中,数组的元素数量是数组的一种只读属性,是无法进行修改的。在执行检索和遍历等操作时,经常需要获取数组的元素数量,并检测数组的元素数据类型。1.直接获取数组元素数 C#的System.Array类提供了两种方法以及两种属性,分别用于获取整数型和长整数型的数组元素数量。如果开发者需要获取整数型变量的数组元素数量,可以使用GetLength()方法或Length属性,其使用方法分别如下。 ArrayName.GetLength(); ArrayName.Length; 在上面的代码中,ArrayName表示数组的实例名称,其分别使用了GetLength()方法和Length属性获取数组的元素数量,这两种方式获取的数组元素数量是完全相同的。GetLength()方法返回的是一个int整型变量,而Length属性的值也是int整型变量。 如果数组的元素数量较多,则开发者还可以使用其他两种方式,获取长整型的数组元素数量,其分别需要使用GetLongLength()方法和LongLength属性,代码如下所示。 ArrayName.GetLongLength(); ArrayName.LongLength; GetLongLength()方法和LongLength属性的使用方法与之前介绍的两种方式完全相同,其区别仅仅是返回的数组元素数量数据类型为long长整型。 例如,定义一个数组并赋值,然后即可使用Length属性输出该数组的数组元素数量,代码如下。 string[] strArray = new string[3]; strArray[0] = "清华大学出版社"; strArray[1] = "北京"; strArray[2] = "中华人民共和国"; Console.WriteLine(strArray.Length);//输出3 2.获取多维或锯齿数组元素数 GetLength()等方法与Length等属性不仅可以获取简单的一维数组数组元素长度,也可以获取多维数组中的每一维,以及锯齿数组中每一个元素数组的元素数量。 需要注意的是,在获取多维数组的元素数时,Length属性和LongLength属性获取的并非每个维度的数组元素,仅能获取数组中所有的元素数量。例如,在下面的多维数组中,获取的就是数组所有的元素数,代码如下。 string[,] strArray = new string[3,2]; strArray[0,0] = "清华大学出版社";

Labview 第三章 数据类型:数组、簇和波形

第三章数据类型:数组、簇和波形 3.1概述 数组是同类型元素的集合。一个数组可以是一维或者多维, 如果必要,每维最多可有231-1个元素。可以通过数组索引访 问其中的每个元素。索引的范围是0到n –1,其中n是数组 中元素的个数。图3-1所显示的是由数值构成的一维数组。注 意第一个元素的索引号为0,第二个是1,依此类推。数组的元 素可以是数据、字符串等,但所有元素的数据类型必须一致。 图3-1数组示意图 簇(Cluster)是另一种数据类型,它的元素可以是不同类 型的数据。它类似于C语言中的stuct。使用簇可以把分布在流 程图中各个位置的数据元素组合起来,这样可以减少连线的拥挤 程度。减少子VI的连接端子的数量。 波形(Waveform)可以理解为一种簇的变形,它不能算是一种有普遍意义的数据类型,但非常实用。 3.2数组的创建及自动索引 3.2.1创建数组 一般说来,创建一个数组有两件事要做,首先要建一个数组的“壳”(shell),然后在这个壳中置入数组元素(数或字符串等)。 如果需要用一个数组作为程序的数据源,可以选择 Functions?Array?Array Constant,将它放置在流程图中。 然后再在数组框中放置数值常量、布尔数还是字符串常量。下图 显示了在数组框放入字符串常量数组的例子。左边是一个数组 壳,中间的图上已经置入了字符串元素,右边的图反映了数组的 第0个元素为:”ABC”,后两个元素均为空。 图3-1数组的创建

在前面板中创建数组的方法是,从Controls模板中选择 Array & Cluster,把数组放置在前面板中,然后选择一个对象 (例如数值常量)插入到数组框中。这样就创建了一个数值数组。 也可以直接在前面板中创建数组和相应的控制对象,然后将 它们复制或者拖曳到流程图中,创建对应的常数。 还有很多在流程图中创建和初始化数组的方法,有些功能函 数也可以生成数组。 3.2.2数组控制对象、常数对象和显示对象 通过把数组与数值、布尔数、字符串或者簇组合在一起,可以在前面板和流程图中创建任何一种控制对象、常数对象和显示对象。数组元素不能是数组、图表或者图形。如果您想查看一些数组的例子,请查看Examples\General\arrays.llb中的例子。 3.2.3自动索引 For循环和While循环可以自动地在数组的上下限范围内编索引和进行累计。这些功能称为自动索引。在启动自动索引功能以后,当把某个外部节点的任何一维元素连接到循环边框的某个输入通道时,该数组的各个元素就将按顺序一个一个地输入到循环中。循环会对一维数组中的标量元素,或者二维数组中的一维数组等编制索引。在输出通道也要执行同样的工作――数组元素按顺序进入一维数组,一维数组进入二维数组,依此类推。 在默认情况下,对于每个连接到For循环的数组都会执行 自动索引功能。可以禁止这个功能的执行,方法是用鼠标右键单 击通道(输入数组进入循环的位置),在快捷菜单中选择Disable Indexing。 练习3-1创建一个自动索引的数组 目的:使用For 循环的自动索引功能创建数组,并用一个图形(Graph)显示该数组。 前面板 图3-2练习3-1的面板 1.打开一个新的前面板。 2.选择Controls?Array & Cluster,在前面 板中放置一个数组。设置它的标签为Waveform Array。

C语言数组知识点总结

数组 定义:数组就是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如: int a[10]; 元素为a[0]----a[9]、 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以就是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9};正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但就是,既不赋初值,也不指定长度就是错误的。例如:int a[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4];可以瞧成就是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为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] 2、与一维数组一样元素下标可以就是就是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 int a[3][4]; a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}};可以瞧成就是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如: a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 可以写成a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; 或者a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

数据结构习题3(数组)

一、选择题 1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。供选择的答案: A. 198 B. 195 C. 197 2. 二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。从供选择的答案中选出应填入下列关于数组存储叙述中()内的正确答案。(1)存放A至少需要(E)个字节; (2)A的第8列和第5行共占(B)个字节; (3)若A按行存放,元素A[8,5]的起始地址与A按列存放时的元素( B )的起始地址一致。 供选择的答案: (1)A. 90 B. 180 C. 240 D. 270 E. 540 (2)A. 108 B. 114 C. 54 D. 60 E. 150 (3)A. A[8,5] B. A[3,10] C. A[5,8] D. A[0,9] 3. 设A是n*n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为( A )。 A. i(i-l)/2+j B. j(j-l)/2+i C. j(j-l)/2+i-1 D. i(i-l)/2+j-1 4. A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(B)。 A. i(i-1)/2+j B. j(j-1)/2+i C. i(j-i)/2+1 D. j(i-1)/2+1 5. 设二维数组A[1.. m,1..n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( A)。 A.(i-1)*n+j B.(i-1)*n+j-1 C. i*(j-1) D. j*m+i-1 6.有一个二维数组A,行下标的范围是0到8,列下标的范围是1到5,每个数组元素用相邻的4个字节存储。存储器按字节编址。假设存储数组元素A[0,1]的第一个字节的地址是0。 存储数组A的最后一个元素的第一个字节的地址是(⑧)。若按行存储,则A[3,5]和A[5,3]的第一个字节的地址分别是(③)和(⑤)。若按列存储,则A[7,1]和A[2,4]的第一个字节的地址分别是(①)和(⑥)。供选择的答案:A~E:①28 ②44 ③76 ④92 ⑤108 ⑥116 ⑦132 ⑧176 ⑨184 ⑩188 7.有一个二维数组A,行下标的范围是1到6,列下标的范围是0到7,每个数组元素用相邻的6个字节存储,存储器按字节编址。那么,这个数组的体积是((12))个字节。假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是((11))。若按行存储,则A[2,4]的第一个字节的地址是(③)。若按列存储,则A[5,7]的第一个字节的地址是(⑨)。供选择的答案A~D:①12 ②66 ③72 ④96 ⑤114 ⑥120 ⑦156 ⑧234 ⑨276 ⑩282 (11)283 (12)288 8. 设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如下图所示)按行序存放在一维数组B[ 1, n(n-1)/2 ]中,对下三角部分中任一元素ai,j(i≤j), 在一维数组B中下标k 的值是:(B) A.i(i-1)/2+j-1 B.i(i-1)/2+j C.i(i+1)/2+j-1 D.i(i+1)/2+j

什么是数组

什么是数组 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。 二、一维数组的定义 定义方式为:类型说明符数组名[常量表达式]; 其中:类型说明符是任一种基本数据类型或构造数据类型。 数组名是用户定义的合法标识符。 方括号中的常量表达式表示数据元素的个数,也称为数组的长度。 例如: int a[10];//整形常量 int b['A'];//字符常量,其实'A'就是65 int c[2*2];//整形常量表达式 三、一维数组的存储 定义数组时,系统将按照数组类型和个数分配一段连续的存储空间来存储数据元素。 注意:数组名是一个常量,代表的是数组的地址。 例如:int a[10];(a会等于&a[0])即第一个元素的地址就是整个数组的地址。 四、一维数组的初始化 1、int a[2]={1,2}; 2、int b[2]; b[0]=1; b[1]=2;

3、int a[]={1,2}; //相当于第一种,元素个数为2 4、int c[4]={1,2};//相当于c[0]=1;c[1]=2;c[3]=0;c[4]=0; 五、一维数组与函数参数 void test(int b[]) { b[0]=2; } void main(){ int a[5]={10,10}; printf("%d\n",a[0]); test(a); printf("%d\n",a[0]); } 输出结果为 10 2 如果一维数组的名称作为函数实参,传递的是整个数组,即形参数组和实参数组完全等同,是存放在同一个存储空间的同个一数组。这样形参数组修改时,实参数组也同时被修改了。形参数组的元素个数可以省略。

数组知识点归纳

◆◆◆一、理解一维数组的定义和应用,了解二维数组和控件数组; 1、数组的概念:数组并不是一种数据类型,而是一组相同类型数据的集合。 用一个统一的名字(数组名)代表逻辑上相关的一批数据,每个元素用下标变量来区分;下标变量代表元素在数组中的位置。 (1)数组必须“先声明后使用”,声明一个数组就是声明其数组名、类型、维数和数组的大小。 (2)其表示形式:A(1),A(10) X(1,1), X1(1,10), X(2,10) Y(0,0,0), Y(1,2,5) (3)Visual Basic中的数组分类: 按数组的大小(元素个数)是否可以改变来分为: 定长数组、动态(可变长)数组。 按元素的数据类型可分为: 数值型数组、字符串数组、逻辑数组、 日期型数组、变体数组等、对象数组。 按数组的维数可分为: 一维数组、二维数组、多维数组(最多可以达到60维) (4)数组元素的引用 格式:数组名(下标[, 下标]……) 其中,下标可以是常量、变量或表达式,但表达式的值必须介于定义数组时指定的下标的下界和上界之间,否则将导致“下标越界”的错误。 例如: A(1)=A(2)+B(1)+7 ′取数组元素运算 A(i)=B(i) ′下标使用变量 B(i+1)=A(i+2) ′下标使用表达式 C(3,4)=100 ′下标使用常量

2、数组的定义 [Dim / Private / Public] 数组名( [下界To] 上界,…) [As 数据类型] 例如:Dim Counter(1To 14) As Integer …14个元素的局部数组。 Private Sume (1 To 20) As Double …20个元素的模块级数组。 说明: (1)数组名的命名规则与变量的命名相同,但在同一过程中数组名不能和简单变量名同名,否则会出错。 (2)下标的最大值和最小值分别称为数组的上界和下界。数组元素在上、下界内是连续的。 如:Dim A(-5 To 20) As Integer 定义一个数组名为A,下界为-5,上界为20的一维数组,数据类型为整型,共有26个元素,即A(-5),A(-4),A(-3)…A(20)。 (3)缺省<下界>为0,若希望下标从1开始,可在模块的通用部分使用Option Base语句将缺省<下界>设为1,其使用语法格式是: Option Base n ①Option Base n语句用于指定数组的默认下界,参数n只能取0或1 ②Option Base语句只能用于窗体或模块的通用部分,不能出现在过程中,并且必须放在数组定义前。 例如: Option Base 1 ' 将数组声明中缺省<下界>下标设为1 (4)如果省略As子句,则数组的类型为变体类型。 (5)数组中各元素在内存占一片连续的存储空间。 A(0) A(1) A(2 ) A(n) …. 一维数组在内存中存放的顺序

c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论

c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论 //由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,本程序用来讨论有此带来的 //相关问题,以及解决问题方法,即给调用函数传递数组的元素个数的几种有效方法并实现它 #include #include using namespace std; void PutArray1(int *p,int length) { for(int ix=0;ix

} void PutArray5(vectorverc) { vector::iterator begin_iter=verc.begin(); vector::iterator end_iter=verc.end(); int size=verc.size (); cout<<"使用两个迭代器来输出int向量"<<"\n"<::iterator iter=begin_iter ;iter!=end_iter;iter++) cout<<*iter<<"\t"; cout< verc1(a,a+10); vector verc2(b,b+8); cout<<"数组a[10]调用函数PutArray1的结果为:\n"<

《第5章 数组和自定义类型》习题

《第5章数组和自定义类型》习题 (含第6章内容) 一、填空题 1.在数组定义之前,可以使用语句确定数组的下界值1。 2.如果没有定义数组的数据类型,其缺省类型是。 3.数组按大小是否可变分为和两类。 4.往往循环对应一维数组的操作,循环对应二维数组的操作。 5.为了保留动态数组中原有的数据不丢失,可以使用带进行动态定义。 6.如用Array(1,2,3,4,5)给数组赋值,其数组的类型应该是类型。 7.用Dim A(-3 to5)语句定义的数组的元素个数是。 8.控件共用一个的控件名字称控件数组,控件数组的下标也称。 9.建立控件数组的方法有和两种。 10.建立Sub过程和Function过程的方法有和两种。 11.语句可以中途退出Sub过程,语句可以中途退出Function 过程。 12.Function过程的调用方式为和。 13.Sub过程的调用方式为和。 14.“虚实结合”的参数传弟有和两种形式。 15.在通用声明中给出Option Base 1语句,则数组a包含个元素。 Dim a(3, -2 To 1, 5) 二、选择题 1.数组声明为Dim A(3,-2 to 2,5),则数组A包含()个元素。 A、200 B、120 C、75 D、60 2.VB子程序过程、函数过程的特点说明不正确的是()。 A、VB中有实现子程序的过程、返回结果的函数过程,用户可以选择有参数 或无参数进行设计,定义实现有参过程或无参过程 B、VB中的子程序过程、函数过程,都可以通过“形参 >实参”,从而实现 调有环境与被调用环境中的数据交流。 C、VB中函数过程不仅可以呈表达式的形式调用,也可以语句方式调用。 D、函数过程的返回值的类型可以是简单类型、定长字符串类型,定义是不可缺省。 3.VB语言中关于过程或函数的形参用法说明不正确的是()。 A、ByVal类别的形参,是按参数的值进行传递 B、在传址调用时,实参可以是变量,也可以是常量 C、一般调用时,所给定的实参需与形参的顺序及类型相容或相同。 D、形参的类型可以用已知或用户已定义的类型来指定,也可以不指定。 4.关于VB数组的使用说明不正确的是()。 A、固定数组通常用于存储个数范围可以确定的数据 B、动态数组常用于存储数据类型不断变化的数据 C、在设计数组时,其数组元素类型可以是数值类型、字符串类型或用户定义 的类型 D、动态数组可以用Array(数据1,数据2…,数据n)对其进行初始化 5.以下描述正确的是()。

最新C语言数组知识点总结

数组 定义:数组是有序的并且具有相同类型的数据的集合。 一维数组 1、一般形式:类型说明符数组名[常量表达式];例如:int a[10]; 元素为a[0]----a[9]. 2、常量表达式中不允许包含变量,可以包含常量或符号常量。 3、数组元素下标可以是任何整型常量、整型变量或任何整型表达式。 4、可以对数组元素赋值,数组元素也可以参与运算,与简单变量一样使用。 5、使用数值型数组时,不可以一次引用整个数组,只能逐个引用元素。 6、需要整体赋值时只可以在定义的同时整体赋值。如 int a[10]={0,1,2,3,4,5,6,7,8,9};正确。 int a[10]; a[10]={0,1,2,3,4,5,6,7,8,9};错误。 7、可以只给一部分元素赋值。例如: int a[10]={5,8,7,6};后面没有赋值的元素值默认为0。 8、对全部数组元素赋值时可以不指定数组长度,例如: int a[10]={0,1,2,3,4,5,6,7,8,9};可以写成int a[]={0,1,2,3,4,5,6,7,8,9}; 但是,既不赋初值,也不指定长度是错误的。例如:int a[];错误。 二维数组 1、一般形式:类型说明符数组名[常量表达式1][常量表达式2];例如: int a[3][4];可以看成是包含3个一维数组,每个一维数组里包含4个元素。一共3*4=12个元素。 所有元素为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] 2、与一维数组一样元素下标可以是是任何整型常量、整型变量或任何整型表达式。 3、需要整体赋值时只可以在定义的同时整体赋值。例如: int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};正确。 int a[3][4];a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};错误。 4、可以把所有数据写在一个花括号内。例如: int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};正确。 5、可以只对部分元素赋值。例如: int a[3][4]={{1},{5},{9}};其余未赋值的元素默认为0。 int a[3][4]={{1},{5,6}};可以看成是int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}}; 6、对全部数组元素赋值时可以省略第一维长度,第二维不可以省略。例如:

相关文档
最新文档