阅读下列程序说明和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);}

阅读下列程序说明和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[1..n][1..n]的下三角(含对角线)按行序存入一维数组B[1..n(n+1)/2]中,设A[i][j]对应位置B[k],则k=()。

● 已知对称矩阵 An*n(Ai,j=Aj,i)的主对角线元素全部为0,若用一维数组B 仅存储矩阵 A 的下三角区域的所有元素(不包括主对角线元素),则数组 B的大小为(40)。(40)A.n(n-1)B.n2/2C.n(n-1)/2D.n(n+1)/2

设矩阵A是一个对称矩阵(aij=aji,1≤i,j≤8),若每个矩阵元素占3个单元,将其上三角部分(包括对角线)按行序为主序存放在数组B中,B的首地址为1000,则矩阵元素a67的地址为(36)。A.1093B.1096C.1108D.1132

若将N阶对称矩阵A按照行序为主序方式将包括主对角线元素在内的下三角形的所有元素依次存放在一个一维数组B中,则该对称矩阵在B中占用了(40)—个数组元素。(40)A.N2B.N×(N-1)C.N×(N+1)/2D.N×(N-1)/2

阅读下列程序说明和C++程序,把应填入其中(n)处的字句,写在对应栏内。【说明】阅读下面几段C++程序回答相应问题。比较下面两段程序的优缺点。①for (i=0; i<N; i++ ){if (condition)//DoSomething…else//DoOtherthing…}②if (condition) {for (i =0; i<N; i++ )//DoSomething}else {for (i=0; i <N; i++ )//DoOtherthing…}

下列程序的功能是( )。 main() { static int s[3][3]={1,2,3,4,5,6,7,8,9,),m,n; for(m=0;m<3;m++) { for(n=0;n<=m;n++) printf("%d",s[m][n]);printf("\n'); } }A.输出3×3矩阵的下三角的元素B.输出3×3矩阵的上三角的元素C.输出3×3矩阵的对角线上的元素D.输出3×3矩阵的元素

●设下三角矩阵(上三角部分的元素值都为 0)A[0..n,0..n]如下所示,将该三角矩阵的所有非零元素(即行下标不小于列下标的元素)按行优先压缩存储在容量足够大的数组M[ ]中(下标从1 开始),则元素 A[I,j](O≤i≤n,j≤i)存储在数组M 的 (57) 中。

输入n*n的矩阵,判断其是否为对称阵,即判断其上三角阵与下三角阵对应元素是否都相等。

一个n阶上三角矩阵A按行优先顺序压缩存放在一维数组B,则B中元素个数是()。A.nB.n*nC.n(n+1)/2D.n(n+1)/2+1