—个二维数组可以存放—个矩阵。在程序开始有语句Option Base0,则下面定义的数组中正好可以存放—个4
A.Dim a(-2 To 0,2)As Integer
B.Dima(3,2)As Integer
C.Dim a(4,3)As Integer
D.Dim a(-1 To -4,-1 To -3)As Integer
A.Dim a(-2 To 0,2)As Integer
B.Dima(3,2)As Integer
C.Dim a(4,3)As Integer
D.Dim a(-1 To -4,-1 To -3)As Integer
下列程序定义了NXN的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]),该函数的功能是使数组右上半三角元素中的值全部置成0。例如a数组中的值为
a=4 5 6
1 7 9
3 2 6,
则返回主程序后a数组中的值应为
0 0 0
1 0 0
3 2 0
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
include<conio.h>
include<stdio.h>
include<stdlib.h>
define N 5
int fun(int a[ ][N])
{
}
main()
{
int a[N][N],i,j;
clrscr();
printf("*****The array*****\n");
for(i=0;i<N;i++)
/*产生—个随机的5*5矩阵*/
{for(j=0;j<N;j++)
{a[i][j]=rand()%10;
printf (“%4d”,a[i][j]);
}
printf(“\n”);
}
fun(a);
printf(“THE RESULT\n”);
for(i=0;i<N;i++)
{ for(j=0;i<N;j++)
printf(“%4d”,a[i][j]);
printf(“\n”);
}
}
●设有二维数组a[1..m,1..n](2<m<n),其第一个元素为a[1,1],最后一个元素为a[m,n],若数组元素以行为主序存放,每个元素占用k个存储单元(k>1),则元素a[2,2]的存储位置相对于数组空间首地址的偏移量为(35)。
A.(n+1)*k
B.n*k+l
C.(m+1)*k
D.m*k+l
阅读以下说明和流程图,将应填入(n)处的字句写在对应栏内。
【说明】
在一个矩阵中,如果其零元素的个数远远多于其非零元素的个数时,称这样的矩阵为稀疏矩阵。稀疏矩阵通常采用三元组数组表示。每个非零元素用一个三元组来表示,即非零元素的行号、列号和它的值。然后按某种顺序将全部非零元素的三元组存于一个数组中。例如,对于以下二维数组:
int x[3][4]={{1,0,0,0},{0,5,0,0),{0,0,7,2}};
可用以下数组a来表示:
int a[][3]={{3,4,4},{0,0,1},{1,1,5),{2,2,7},{2,3,2}};
其中三元数组a的第1行元素的值分别存储稀疏矩阵×的行数、列数和非零元素的个数。
下面的流程图描述了稀疏矩阵转换的过程。
【流程图】
阅读下列程序说明和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);
}
下列给定程序中,函数proc()的功能是:根据形参m(2≤m≤9)的值,在m行m列的二维数组中存放如下所示的数据,由main()函数输出。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
A.350
B.570
C.275
D.482
A.350
B.570
C.275
D.482