设下三角矩阵A: 如果以行序为主序将A的非零元素存储在一维数组B[n(n+1)/2]中,那么A的第i行第j列
设下三角矩阵A:
如果以行序为主序将A的非零元素存储在一维数组B[n(n+1)/2]中,那么A的第i行第j列的非零元素aij(i≥j)在数组B中的下标为______。
设下三角矩阵A:
如果以行序为主序将A的非零元素存储在一维数组B[n(n+1)/2]中,那么A的第i行第j列的非零元素aij(i≥j)在数组B中的下标为______。
A.13
B.33
C.18
D.40
设矩阵A(aij,1<=i,j<=10)的元素满足: aij<>0(i>:=j,1<=i,j<=10),aij=0(i<j,1<=i,j<=10)若将A的所有非0元素以行为主序存于首地址为2000的存储区域中,每个元素占4个单元,则元素A[59)的首地址为(48)
A.2340
B.2236
C.2220
D.2160
A.319
B.460
C.514
D.625
阅读下列程序说明和C程序,把应填入其中(n)处的字句,写在对应栏内。
【程序说明】
对角线下元素全为0的矩阵称为上三角矩阵,设对于一个n×n的上三角矩阵a,为节约存贮,只将它的上三角元素按行主序连续存放在数组b中。下面的函数trans在不引入工作数组的情况下,实现将a改为按列主序连续存放在数组b中。
设n=5,
b=(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
经调用trans函数后,b变为
b=(1,2,6,3,7,10,4,8,11,13,5,9,12,14,15)
函数tans对数组元素的存贮位置作调整。调整过程中存在若干个循环传送链:
b(i1)→b(i2)→b(ij)→b(i1)1≤j<n
例如,考察调整后的数组元素b(2)(值为6),与该元素相关的位置调整将形成下面的循环传送链:
b(2)→b(3)→b(6)→……→b(12)→b(9)→b(5)→b(2)
关键是确定循环传送链的下标i1,i2,…,ij,以及在考察调整后的元素b(k)(k;3,4,…)时能判定b(k)是已被传送过的某传送链上的元素。
函数ctr(k,n)计算调整后的数组b的第k个元素b(k)在原数组b中的位置,该位置作为函数ctr(k,n)的返回值。函数ctr根据k确定它在矩阵中的行号i和列号j(注意行号和列号均从 0算起),然后按矩阵存放原则计算出它在b中的位置。
【程序】
trans(b,n)
int n,b[]
{
int m,k,r,cc,rr;
int w;
m=(n+1)*n/2-4;
k=2;
while(m>0)
{
r=ctr(k,n);
if(r==k)
m--;
else
{
cc=k;rr=r;
while (1)
{
cc=rr,rr=ctr(cc,n);
}
if (2)
{
cc=k;rr=r;w=b[k];
while (3)
{
b[cc]=b[rr];m--;
cc=rr,rr=ctf(cc,n);
}
b[cc]-w; (4);
}
}
k++;
}
}
ctr(k,n )
int k,n
{
int i,j;
i=k;j=0;
while (5)
i - =++j ;
return(i*n+j-i*(i+1)/2);
}
已知二维数组A[m][n]采用行序为主方式存储,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的地址是______。
A.1221
B.1227
C.1239
D.1257
设数组a[5..20,3..16]的元素以行为主序存放,每个元素占用两个存储单元,则数组元素a[i,j](5≤i≤20,3≤j≤16)的地址计算公式为(108)。
A.a-146+28i+2j
B.a-116+28i+2j
C.a-144+28i+2i
D.a-118+28i+2j