PTA4-1 数组和特殊矩阵的压缩存储

特别注意数组下标与元素地址的区别!

2-1 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()

A.13
B.33
C.18
D.40
答:B;
行序为主存储,在此存储下三角矩阵元素,前7行有:(1+7)*7/2=28个元素,第八行中,a(8,5)前面还有四个元素,所以a(8,5)地址为28+4+1=33

2-2设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为()
A.BA+141

B.BA+180

C.BA+222

D.BA+225
答:B;
A[5,8]以列为主,该元素处于第八列,前七列是满的每列8个元素,该元素处于第五行,他的前一个元素A[4,8]的结束地址就是所求的开始,最后,每个元素占3字节。所以有公式:(7*8+4)*3

2-3对于 C 语言的二维数组 int A[m][n],每个元素占 2 个字节,数组中元素 a[i,j]的存储位置可由( )式确定。
A. Loc[i, j]=A[m, n]+(n×i + j )×2
B. Loc[i, j]=Loc[0, 0]+[ (m+n)×i+j ]×2
C. Loc[i, j]=Loc[0, 0]+ (n×i+j)×2
D. Loc[i, j]= (n×i+j)×2
答:C;
首先确定在BC中选择,数组首地址下标为[0,0]前i-1行元素个数为i*n,再加上j同一行中前面的数字、每个元素两字节,有Loc[i, j]=Loc[0, 0]+ (n×i+j)×2。

2-4.数组 A[0…5, 0…6] 的每个元素占 5 个字节,将其按列优先次序存储在起始地址为 1000 的内存单元中,则元素 A[5, 5] 的地址是( )。
A. 1175 B. 1180 C. 1205 D. 1210
答:B;
A[0…5, 0…6]得知:数组六行七列。列优先,A[5, 5]在第六行第五列则前5列有6*5=30个元素,其在第五列的第六行位置+6,又因为每个元素占 5 个字节,所以:1000+(30+6)*5=1180。

2-5.数组 A[0…6, 0…5] 的每个元素占 5 个字节,将其按列优先次序存储在起始地址为 1000 的内存单元中,则元素 A[5, 5] 的地址是( )。
与第四题雷同。选B

  • List item

2-6.数组A中,每个元素的长度为3个字节,行下标i从1到8,列下标j从1到10,从首地址SA开始连续存放的存储器内,该数组按列存放,元素A[5][8]的起始地址为( )。
A.SA+141 B.SA+180
C.SA+222 D.SA+225
答:B;
行下标i从1到8,列下标j从1到10可知数组为8行10列的二维数组。A[5][8]为第5行第8列的元素,按列存放,每一列最多八个元素,前七列有78=56个元素,再加4,每个元素的长度为3个字节,所以SA+(78+4)*3=180.

2-7在一个二维数组A中,假设每个数组元素的长度为3个存储单元,行下标为0~ 8,列下标为0~9,从首地址SA开始连续存放。在这种情况下,元素A[8][5]的起始地址为( )

A.SA+141 B.SA+144 C.SA+222 D.SA+255
答:D;
行下标为0~ 8,列下标为0~9可知为9行10列的二维数组,默认行顺序存储,则有A[8][5]第9行第6列的元素,前8行有810个元素,同一行元素前面有5个元素,所以有SA+(810+5)*3=SA+255

  • List item

2-8.有一个n×n的对称矩阵A,将其下三角部分按行存放在一维数组B中,而A[0][0]存放于B[0]中,则第i+1行的对角元素A[i][i]存放于B中()

A.(i+3)i/2 B.(i+1)i/2 C.(2n-i+1)i/2 D.(2n-i-1)i/2
答:A;
有关矩阵转换计算的讲解:上三角、下三角中求数组地址–【下标的计算】
只存放下三角行列式,对于下三角行列式,i<=j。
等差数列相加的问题,第0行有1个元素,第1行有2个元素,那么第i行有i+1个元素,所以从第0行开始到第i行的对角元素,总共有:1+2+…+(i+1) = (i+1)(i+2)/2个元素.但是数列B的第一个元素的下标是0而不是1,所以下标的数值=元素个数-1,所以A[i][i]存放于B中(i+1)(i+2)/2-1 = i(i+3)/2处。

2-9.[2018真题]设有一个12×12的对称矩阵M,将其上三角部分的元素Mi,j(1≤i≤j≤12)按行优先存入C语言的一维数组N中,元素M6,6在N中的下标是( )
A.50 B.51 C.55 D.66
答:A;
有关矩阵转换计算的讲解:上三角、下三角中求数组地址–【下标的计算】
前i-1行元素个数为:sn = n(a1+an)/2 = (i-1){n+[n-(i-1)+1]}/2=(i-1)(2n-i+2)/2。
前5行:12+11+10+9+8=50
M[6,6]为第六行第一个元素,+1;所以第51个元素,下标-1=50。
注意:C语言数组的下标从0开始

2-10.[2020真题]将一个10×10对称矩阵 M的上三角部分的元素mi,j(1≤i≤j≤10)按列优先存入C语言的一维数组N中,元素m7,2在N中下标是( )
A.15
B.16
C.22
D.23
答:C;
列优先存储,第七列第2行,1-6列元素一共:1+2+3+4+5+6=21个,同一列为第2个元素;所以下标:21+2-1=22

  • List item
    2-11.[2016真题]有一个100阶的三对角矩阵M,其元素mi,j(1≤i,j≤100)按行优先依次压缩存入标从0开始的一维数组中N。 元素m30,30在N中的下标是( )
    A.86
    B.87
    C.88
    D.89
    答:B;
    三对角矩阵的压缩:三对角矩阵压缩计算
    行优先,a[k]–>k=2i+j-2; 302+30-2 下标0开始所以-1最后为87。
    除了第一行和最后一行是每行2个元素外,中间的每行都是三个元素。因此,m 30 , 30 m_{30,30}m
    30,30 ,就是2+3
    28+2 = 88
    这是从1开始编号的,那么从0开始编号就是87。

2-12.将三对角矩阵A[1…100][1…100]按行优先存入一维数组B[1…298]中,A中元素A[66][65]在数组B中的位置是( )
A.198
B.195
C.196
D.197
答:B
除了第一行和最后一行是每行2个元素外,中间的每行都是三个元素。
行优先,2+3*64+2-1=195,规定了B的下标从1 开始,所以不用减1.

2-13.对特殊矩阵采用压缩存储的主要目的是( )。
A.表达变得简单
B.对矩阵元素的存取变得简单
C.去掉矩阵中的多余元素
D.减少不必要的存储空间
答:D;
将相同元素压缩到一个元素中,在具有大量相同数据元素的情况下可以大幅减少不必要的存储空间,避免资源浪费。

引用于此
**2-14.对n阶对称矩阵压缩存储时,需要表长为( )的顺序表。
**
A.n/2
B.n*n/2
C.n(n+1)/2
D.n(n-1)/2
答:C;
称矩阵只需要存储上(下)三角形(含对角线)元素,由题易得答案为n(n+1)/2。

  • List item

2-15若将n阶上三角矩阵A按列优先级压缩存放在一维数组 B[1…n(n+1)/2+1]中,则存放到B[k]中的非零元素ai,j(1≤i,j≤n)的下标i、j与k的对应关系是( )
A.i*(i+1)/2+j
B.i*(i-1)/2+j-1
C.j*(j-1)/2+i
D.j*(j-1)/2+i-1
答:A;引用于此
列优先。

  • List item
    2-16若将n阶下三角矩阵A按列优先顺序压缩存放在一维数组 B[1…n(n+1)/2+1]中,则存放到B[k]中的非零元素ai,j(1≤i,j≤n)的下标j与k的对应关系是( )

A.
(j-1)(2n-j+1)/2+i-j

B.
(j-1)(2n-j+2)/2+i-j+1

C.
(j-1)(2n-j+2)/2+i-j

D.
(j-1)(2n-j+1)/2+i-j-1
答:D

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值