niusouti.com

以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)例如,矩阵为:3 0 0 32 5 7 31 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;ifor(j=0;j<N;J++)sum=sum+ (7) ;for(j=0;jfor(i=1; (8) ;i++)sum=sum+arr[i*n+j];retu

题目

以下程序是一个函数,功能是求二阶矩阵(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);

}


相似考题
更多“以下程序是一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶 ”相关问题
  • 第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*/


    正确答案:(1)M.cols;(2)M.rows;(3)cpot[0]=0;(4)cpot[j-1]+num[j-1];(5)M.data[t].c
    (1)M.cols;(2)M.rows;(3)cpot[0]=0;(4)cpot[j-1]+num[j-1];(5)M.data[t].c

  • 第2题:

    海森矩阵是多元函数对自变量的二阶导数矩阵。()

    此题为判断题(对,错)。


    正确答案:正确

  • 第3题:

    给定程序中,函数fun的功能是:判定形参a所指的NxN(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1: 不是,函数返回值为O。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。

    例如,以下3×3的矩阵就是一个“幻方”:

    4 9 2

    3 5 7

    8 1 6

    请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

    注意:源程序存放在考生文件夹下的BLANKl.C中。

    不得增行或删行,也不得更改程序的结构!


    正确答案:(1)0 (2)11 (3)1
    (1)0 (2)11 (3)1 解析:本题中函数fun的功能是判定形参a所指的N×N的矩阵是否是”幻方”,“幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等,因此判断“幻方”对先求每行、每列、主对角及反对角元素和,然后判断是否都相等,都相等则是幻方,否则不是幻方。

  • 第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矩阵的元素


    正确答案:A
    解析:本题使用了一个双重for循环,外循环变量m的变化范围是0~2,而内循环变量n的变化范围从0~m,所以执行循环体时(m,n)的值依次为(0,0),(1,0),(1,1),(2,0),(2,1),(2,2),故输出的是3×3矩阵的下三角元素。所以应该选择A。

  • 第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中。

    不得增行或删行,也不得更改程序的结构!


    正确答案:(1)k (2)N-1 (3)temp
    (1)k (2)N-1 (3)temp 解析:本题中函数fun的功能是将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素行依次左移,原来左边的各列依次绕到右边,即把每列元素循环左移k个位置。

  • 第6题:

    给定程序MODll.C中函数fun的功能是:求出以下分数序列的前n项之和。和值通过函数值返回到main函数。

    例如,若n=5,则应输出:8.391667。

    请改正程序中的错误,使它能计算出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)double fun(int n) (2)s=s+(double)a/b;
    (1)double fun(int n) (2)s=s+(double)a/b; 解析:本题中函数的功能是求出分数序列的前n项之和。首先根据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然后求得数列的和。每一项的分母是前一项的分子,分子是前一项分子和分母的和。

  • 第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?()

    • A、每个行向量
    • B、每个列向量
    • C、每个行向量和列向量
    • D、全部矩阵元素

    正确答案:A

  • 第10题:

    给定一个m×n的数值矩阵A,如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个方法计算出m*n的矩阵A的所有马鞍点。


    正确答案: inti,j,k,m=4,n=5,max,min;
    int[,]array=newint[,]{{30,20,25,40,45},{80,19,70,90,11},{24,14,42,91,96},{32,17,82,72,38}};
    Console.Write("/n{0}行{1}列的数值矩阵为:");
    for(i=0;i{
    Console.WriteLine();
    for(j=0;j{
    Console.Write("{0}",array[i,j]);
    }
    }
    for(i=0;ifor(j=0;j{
    max=array[i,j];
    min=array[i,j];
    for(k=0;kfor(k=0;kmax)max=array[k,j];
    if(array[i,j]==max&&array[i,j]==min)
    {
    Console.WriteLine("/n马鞍点是第{0}行,第{1}列的{2}",i,j,array[i,j]);
    }
    }

  • 第11题:

    单选题
    设有一个M*N的矩阵已经存放在一个M行N列的数组x中,且有以下程序段:sum=0;for(i=0;i
    A

    矩阵两条对角线元素之和

    B

    矩阵所有不靠边元素之和

    C

    矩阵所有元素之和

    D

    矩阵所有靠边元素之和


    正确答案: A
    解析:
    程序执行过程为:第一个for循环实现对第一列和第N列求和。第二个for循环在上一个for循环结果上实现对第一行和第M行从第二个元素到第N-1个元素的求和,总体来说,就是矩阵所有靠边元素之和,答案选择D选项。

  • 第12题:

    问答题
    给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是“幻方”,若是,则函数返回值为1;若不是,则函数返回值为0。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。  例如,以下3×3的矩阵就是一个“幻方”:  4 9 2  3 5 7  8 1 6  请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。  注意:部分源程序给出如下。  不得增行或删行,也不得更改程序的结构!  试题程序:#include #define N 3int fun(int (*a)[N]){ int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i

    正确答案:

    ①0
    ②‖
    ③1
    解析:

      填空1:变量row存放每行的总和,变量colum存放每列的总和,应给row、colum赋初值为0,因此应该填0。
      填空2:if判断每行的总和是否与列的总和相等、每行的总和与对角线的总和是否相等,程序中,两个条件若有一个满足,即返回0,因此应该填写‖。
      填空3:矩阵是“幻方”,函数返回1。

  • 第13题:

    已知一个无向图的邻接矩阵表示,计算第i个顶点的度的方法是______。

    A、计算邻接矩阵中第i行的元素之和

    B、计算邻接矩阵中第i列的元素之和

    C、计算邻接矩阵中第i行的非零元个数

    D、计算邻接矩阵中第i列的非零元个数


    参考答案:ABCD

  • 第14题:

    给定程序MODll.C中fun函数的功能是:求出以下分数序列的前n项之和。

    和值通过函数值返回main函数。

    例如,若n=5,则应输出:8.391667。

    请改正程序中的错误,使它能得出正确的结果。

    注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


    正确答案:(1)double fun(int n)(2)c=a;a+=b;b=c;
    (1)double fun(int n)(2)c=a;a+=b;b=c; 解析:本题中函数的功能是求出分数序列的前n项之和。首先根据题干中给出的公式推出每一项之间的关系,求出每一项的表达式,然后求得数列的和。每一项的分母是前一项的分子,分子是前一项分子和分母的和。

  • 第15题:

    补充程序Ccon061.C,使其从键盘输入一个4行4列的二维整型数组表示4×4阶矩阵,并计算第1列元素之和。如输出:28


    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) 中。


    正确答案:A
    试题(57)分析本题考查数组存储的基础知识。按行方式存储时,元素A[i,j]之前的元素个数为(1+2+…+i+j),由于数组M的下标从1开始,因此,存储A[i,j]的是M[1+2+…+i+j+1],即M[i(i+1)/2+j+1]。参考答案(57)A

  • 第17题:

    下列给定程序中,函数proc()的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。 请修改函数proc()中的错误,使它能得出正确的结果。 注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。 试题程序:


    正确答案:
    (1)错误:for(i=0;j<3;j++)

  • 第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中。

    不得增行或删行,也不得更改程序的结构!


    正确答案:(1)[N] (2)i (3)i+1
    (1)[N] (2)i (3)i+1 解析:本题中函数fun的功能是按照指定的规律建立一个N×N的矩阵,可用循环来完成。

  • 第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题:

    设A是一个m×n矩阵,证明:矩阵A的行空间维数等于它的列空间维数。


    答案:
    解析:
    本题主要考查向量在空间中的应用。

    利用空间向量的基本性质和关系,结合线性相关的知识即可。

  • 第21题:

    有向图G用邻接矩阵A{1。。。。。n,1。。。。。n}存储,其第一列的所有元素之和等于顶点1的()。


    正确答案:入度

  • 第22题:

    问答题
    请根据以下各小题的要求设计C应用程序(包括界面和代码)。   请编写函数fun(),它的功能是:将3行4列矩阵x乘以4行3列矩阵y,结果放在3行3列矩阵xy中。矩阵相乘的基本方法是:矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。   注意:部分源程序给出如下。   请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。   试题程序如下: #include  #include  void fun(int a[3][4],int b[4][3],int ab[3][3]) { } main() {  int x[3][4] = {{1,0,1,1}, {2,1,0,1}, {1,2,0,3}};  int y[4][3] = {{1,1,1}, {0,0,0}, {2,1,1}, {1,1,3}};  int xy[3][3] = {0},i,j;  fun(x,y,xy);  printf(a × b = ab:(3,3):);  for(i=0;i<3;i++)  {   for(j=0;j<3;j++)    printf(%d,xy[i][j]);   printf();  } }

    正确答案:

    void fun(int a[3][4],int b[4][3],int ab[3][3])
    {
    int j,k,l;
    for(k=0;k<3;k++)
    for(l=0;l<3;l++)
    for(j=0;j<4;j++)
    ab[k][l]+=a[k][j]*b[j][l];
    }
    解析: 本题首先要明确矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘再相加的和。因此,每个元素的求解是循环控制来实现的,即ab[k][l]+=a[k][j]*b[j][l],矩阵ab的每个元素的表示可用一个二重循环,整个函数是一个三重循环的嵌套。

  • 第23题:

    问答题
    给定一个m×n的数值矩阵A,如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个方法计算出m*n的矩阵A的所有马鞍点。

    正确答案: inti,j,k,m=4,n=5,max,min;
    int[,]array=newint[,]{{30,20,25,40,45},{80,19,70,90,11},{24,14,42,91,96},{32,17,82,72,38}};
    Console.Write("/n{0}行{1}列的数值矩阵为:");
    for(i=0;i{
    Console.WriteLine();
    for(j=0;j{
    Console.Write("{0}",array[i,j]);
    }
    }
    for(i=0;ifor(j=0;j{
    max=array[i,j];
    min=array[i,j];
    for(k=0;kfor(k=0;kmax)max=array[k,j];
    if(array[i,j]==max&&array[i,j]==min)
    {
    Console.WriteLine("/n马鞍点是第{0}行,第{1}列的{2}",i,j,array[i,j]);
    }
    }
    解析: 暂无解析