以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)
例如,矩阵为:
3 0 0 3
2 5 7 3
1 0 4 2
则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
add(int m,int n,int arr[])
{ int i,j,sum=0;
for(i=0;i
for(j=0;j<N;J++)
sum=sum+ (7) ;
for(j=0;j
for(i=1; (8) ;i++)
sum=sum+arr[i*n+j];
return(sum);
}
第1题:
阅读以下说明和C函数,将应填入(n)处的字句写在对应栏内。
[说明]
若一个矩阵中的非零元素数目很少且分布没有规律,则称之为稀疏矩阵。对m行n列的稀疏矩阵M,进行转置运算后得到n行m列的矩阵MT,如图3-1所示
为了压缩稀疏矩阵的存储空间,用三元组(即元素所在的行号、列号和元素值、表示稀疏矩阵中的一个非零元素,再用一维数组逐行存储稀疏矩阵中的所有非零元素也称为三元组顺序表)。例如,图3-1所示的矩阵M相应的三元组顺序表如表3-1所示。其转置矩阵MT的三元组顺序表如表3-2所示。
函数TransposeMatrix(Matrix M)的功能是对用三元组顺序表表示的稀疏矩阵M进行转置运算。
对M实施转置运算时,为了将M中的每个非零元素直接存入其转置矩阵MT三元组顺序表的相应位置,需先计算M中每一列非零元素的数目(即MT中每一行非零元素的数目),并记录在向量num中;然后根据以下关系,计算出矩阵M中每列的第一个非零元素在转置矩阵MT三元组顺序表中的位置:
cpot[0]=0
cpot[j]=cpot[j-1]+num[j-1]) /*j为列号*/
类型ElemType,Triple和Matrix定义如下:
typedef int ElemType;
typedef struct{ /*三元组类型*/
int r,c; /*矩阵元素的行号、列号*/
ElemType e; /*矩阵元素的值*/
}Triple;
typedef struct{ /*矩阵的元组三元组顺序表存储结构*/
int rows,cols,elements; /*矩阵的行数、列数和非零元素数目*/
Triple data[MAXSIZE];
}Matrix;
[C语言函数]
int TransposeMatrix(Matrix M)
{
int j,q,t;
int *num, *cpot;
Matrix MT; /*MT是M的转置矩阵*/
num=(int*)malloc(M.cols*sizeof(int));
cpot=(int*)malloc(M.cols*sizeof(int));
if(!num ||cpot)
return ERROR;
MT.rows=(1); /*设置转置矩阵MT行数、列数和非零元素数目*/
MT.cols=(2);
MT.elements=M.elements;
if(M.elements>0){
for (q=0 ; q<M. cols ; q++)
num[q]=0;
for (t=0; t<M.elements;++t) /*计算矩阵M中每一列非零元素数目*/
num [M.data[t].c]++;
/*计算矩阵M中每列第一个非零元素在其转置矩阵三元组顺序表中的位置*/
(3);
for(j=1;j<M.cols;j++)
cpot[j]=(4);
/*以下代码完成转置矩阵MT三元组顺序表元素的设置*/
for(t=0;t<M.elements;t++){
j=(5); /*取矩阵M的一个非零元素的列号存入j*/
/*q为该非零元素在转置矩阵MT三元组顺序表中的位置(下标)*/
q=cpot[j];
MT.data[q].r=M.data[t].c;
MT.data[q].c=M.data[t].r;
MT.data[q].e=M.data[t].e;
++cpot[j]; /*计算M中第j列的下一个非零元素的目的位置*/
}/*for*/
} /*if*/
free(num); free(cpot);
/*此处输出矩阵元素,代码省略*/
return OK;
}/*TransposeMatrix*/
第2题:
此题为判断题(对,错)。
第3题:
给定程序中,函数fun的功能是:判定形参a所指的NxN(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1: 不是,函数返回值为O。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如,以下3×3的矩阵就是一个“幻方”:
4 9 2
3 5 7
8 1 6
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANKl.C中。
不得增行或删行,也不得更改程序的结构!
第4题:
下列程序的功能是( )。 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矩阵的元素
第5题:
给定程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边。
例如,有下列矩阵:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
若k为2,程序执行结果为
3 4 5 1 2
3 4 5 1 2
3 4 5 1 2
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANKl.C中。
不得增行或删行,也不得更改程序的结构!
第6题:
给定程序MODll.C中函数fun的功能是:求出以下分数序列的前n项之和。和值通过函数值返回到main函数。
例如,若n=5,则应输出:8.391667。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
第7题:
试题三(共15分)
阅读以下说明和C 函数,将应填入(n) 处的字句写在答题纸的对应栏内。
[说明]
若一个矩阵中的非零元素数目很少且分布没有规律,则称之为稀疏矩阵。对于m行n 列的稀疏矩阵M,进行转置运算后得到n 行m列的矩阵MT,如图3-1 所示。
函数TransposeMatrix(Matrix M)的功能是对用三元组顺序表表示的稀疏矩阵M 进行转置运算。
对 M 实施转置运算时,为了将M 中的每个非零元素直接存入其转置矩阵MT 三元组顺序表的相应位置,需先计算M 中每一列非零元素的数目(即MT 中每一行非零元素的数目),并记录在向量num 中;然后根据以下关系,计算出矩阵M 中每列的第一个非零元素在转置矩阵MT 三元组顺序表中的位置:
cpot[0] = 0
cpot[j] = cpot[j-1] + num[j-1] /* j 为列号 */
类型ElemType、Triple 和Matrix 定义如下:
typedef int ElemType;
typedef struct { /* 三元组类型 */
int r,c; /* 矩阵元素的行号、列号*/
ElemType e; /* 矩阵元素的值*/
}Triple;
typedef struct { /* 矩阵的三元组顺序表存储结构 */
int rows,cols,elements; /* 矩阵的行数、列数和非零元素数目 */
Triple data[MAXSIZE];
}Matrix;
[C函数]
int TransposeMatrix(Matrix M)
{
int j,q,t;
int *num, *cpot;
Matrix MT; /* MT 是M的转置矩阵 */
num = (int *)malloc(M.cols*sizeof(int));
cpot = (int *)malloc(M.cols*sizeof(int));
if (!num || !cpot)
return ERROR;
MT.rows = (1) ; /* 设置转置矩阵MT行数、列数和非零元数目*/
MT.cols = (2) ;
MT.elements = M.elements;
if (M.elements > 0) {
for(q = 0; q < M.cols; q++)
num[q] = 0;
for(t = 0; t < M.elements; ++t) /* 计算矩阵M 中每一列非零元素数目*/
num[M.data[t].c]++;
/* 计算矩阵M中每列第一个非零元素在其转置矩阵三元组顺序表中的位置*/
(3) ;
for(j = 1;j < M.cols; j++)
cpot[j] = (4) ;
/* 以下代码完成转置矩阵MT三元组顺序表元素的设置 */
for(t = 0; t < M.elements;t++){
j = (5) ; /* 取矩阵M 的一个非零元素的列号存入j */
/* q 为该非零元素在转置矩阵MT 三元组顺序表中的位置(下标)*/
q = cpot[j];
MT.data[q].r = M.data[t].c;
MT.data[q].c = M.data[t].r;
MT.data[q].e = M.data[t].e;
++cpot[j]; /* 计算M 中第j列的下一个非零元素的目的位置 */
}/* for */
}/* if */
free(num); free(cpot);
/*此处输出矩阵元素,代码省略*/
return OK;
}/* TransposeMatrix */
第8题:
第9题:
在概率矩阵中,下列哪一项的各元素之和必等于1?()
第10题:
给定一个m×n的数值矩阵A,如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个方法计算出m*n的矩阵A的所有马鞍点。
第11题:
矩阵两条对角线元素之和
矩阵所有不靠边元素之和
矩阵所有元素之和
矩阵所有靠边元素之和
第12题:
第13题:
A、计算邻接矩阵中第i行的元素之和
B、计算邻接矩阵中第i列的元素之和
C、计算邻接矩阵中第i行的非零元个数
D、计算邻接矩阵中第i列的非零元个数
第14题:
给定程序MODll.C中fun函数的功能是:求出以下分数序列的前n项之和。
和值通过函数值返回main函数。
例如,若n=5,则应输出:8.391667。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
第15题:
Inti,/**/j/**/;
Sum=/**/0/**/;
/**/sum+=a[i][0];/**/
第16题:
●设下三角矩阵(上三角部分的元素值都为 0)A[0..n,0..n]如下所示,将该三角矩阵的所有非零元素(即行下标不小于列下标的元素)按行优先压缩存储在容量足够大的数组M[ ]中(下标从1 开始),则元素 A[I,j](O≤i≤n,j≤i)存储在数组M 的 (57) 中。
第17题:
下列给定程序中,函数proc()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。 请修改函数proc()中的错误,使它能得出正确的结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:
第18题:
给定程序中,函数fun的功能是建立一个NxN的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,…依次类推。例如,若N=5,生成的矩阵为:
1 1 1 1 1
1 2 2 2 1
1 2 3 2 1
l 2 2 2 1
1 1 1 1 1
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANKl.C中。
不得增行或删行,也不得更改程序的结构!
第19题:
试题二(共15分)
阅读以下说明和C函数,填充函数中的空缺,将解答填入答题纸的对应栏内。
【说明】
如果矩阵A中的元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。
一个矩阵可能存在多个马鞍点,也可能不存在马鞍点。下面的函数求解并输出一个矩阵中的所有马鞍点,最后返回该矩阵中马鞍点的个数。
【C函数】
Int findSaddle(int a[][N],int M),
{ /*a表示M行N列矩阵,N是宏定义符号常量量*/
int row,column,i,k;
int minElem;
int count=0;/*count用于记录矩阵中马鞍点的个数*/
for( row = 0;row< (1) ;row++) {
/*minElem用于表示第row行的最小元素值,其初值设为该行第0列的元素值*/
(2) ;
for( column = 1;column< (3) ;column++)
if( minElem> a[row][column]) {
minElem = a[row][column];
}
for(k=0;k<N;k++)
if(a[row][k]==minElem){
/术对第row行的每个最小元素,判断其是否为所在列的最大元素*/
for(i=0;i <M;i++)
if( (4) >minElem) break;
if(i>=(5) ){
printf("(%d,%d):%d\n",row,k,minElem);/*输出马鞍点*/
count++;
}/*if*/
}/*if*/
}/*for*/
return count,
}/*findSaddle*/
(1)M
(2) minElem= a[row][0]或其等价形式
(3)N
(4)a[i][k]或其等价形式
(5)M
第20题:
第21题:
有向图G用邻接矩阵A{1。。。。。n,1。。。。。n}存储,其第一列的所有元素之和等于顶点1的()。
第22题:
第23题: