niusouti.com

分别用地址法(通过数组名计算元素地址)、指针法改写第9周的作业程序,来实现对二维数组的访问和操作: 编写一个主程序,生成一个菜单界面,当输入1时,调用矩阵赋值函数,为5*5的矩阵赋初值;当输入2时,调用矩阵转置函数,对该矩阵进行转置操作;当输入3时,将该矩阵上三角所有元素值变成0;当输入4时,求该矩阵对角线所有元素的平均值;当输入5时,将该矩阵下对角线元素变成1,当输入0时,退出程序。

题目

分别用地址法(通过数组名计算元素地址)、指针法改写第9周的作业程序,来实现对二维数组的访问和操作: 编写一个主程序,生成一个菜单界面,当输入1时,调用矩阵赋值函数,为5*5的矩阵赋初值;当输入2时,调用矩阵转置函数,对该矩阵进行转置操作;当输入3时,将该矩阵上三角所有元素值变成0;当输入4时,求该矩阵对角线所有元素的平均值;当输入5时,将该矩阵下对角线元素变成1,当输入0时,退出程序。


相似考题
参考答案和解析
正确
更多“分别用地址法(通过数组名计算元素地址)、指针法改写第9周的作业程序,来实现对二维数组的访问和操作: 编写一个主程序,生成一个菜单界面,当输入1时,调用矩阵赋值函数,为5*5的矩阵赋初值;当输入2时,调用矩阵转置函数,对该矩阵进行转置操作;当输入3时,将该矩阵上三角所有元素值变成0;当输入4时,求该矩阵对角线所有元素的平均值;当输入5时,将该矩阵下对角线元素变成1,当输入0时,退出程序。”相关问题
  • 第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题:

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

    A.1093

    B.1096

    C.1108

    D.1132


    正确答案:A
    解析:本题考查矩阵在数组中存储位置的计算。已知条件告诉我们,矩阵A是一个对称矩阵,现在要将其上三角部分(包括对角线)按行序为主序存放在数组B中,再由1≤i,j≤8可以知道该矩阵是8列的矩阵,那么其上三角部分从上到下每行的元素个数从8个依次递减,矩阵元素a67表示矩阵中第6行第7列的元素,这个元素在上三角部分中,是第6行中第2个元素,而这个元素的前面应该存储了31个元素(8+7+6+5+4+1=31),又由于每个矩阵元素占3个单元,所以矩阵元素a67的地址为1000+31×3=1093。

  • 第3题:

    下列程序的功能是( )。 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。

  • 第4题:

    请编写程序fun,函数的功能是:实现B=A+Aˊ,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

    例如,输入下面的矩阵: 其转置矩阵为:

    1 2 3 1 4 7

    4 5 6 2 5 8

    7 8 9 3 6 9

    程序输出:

    2 6 10

    6 10 14

    10 14 18

    注意:部分源程序在文件PROGl.C中。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


    正确答案:
    解析:该程序功能是实现B=A+Aˊ,即把矩阵A加上A的转置。其中,所谓矩阵的转置,是把行中的数据与列中的数据进行对调。解题过程中首先求得已给的矩阵的转置,然后在循环过程中对矩阵与该矩阵的转置对应元素求和。

  • 第5题:

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

    }


    正确答案:
    3.(7) arr[i*n+j](或者arr[i*10+j])

     (8) i<M-1(或者I<=M-2)

  • 第6题:

    编写函数文件myfunction.m,求任意矩阵的均方根值,且当矩阵aa=[1,2,3;3,4,5]时,完成在MATLAB COMMAND窗口下的调用。


    正确答案: function rs=myfunction(a)
    [m,n]=size(a)
    sum=0
    for i=1:m
    for j=1:n
    sum=sum+a(i,j)
    end
    end
    rs=sqrt(sum/m/n)
    在命令窗中输入 aa = [ 1,2 ,3; 3,4,5 ] ,然后执行 rs=myfunction(aa) 即可。

  • 第7题:

    当调用函数时,实参是一个数组名,则向函数传送的是()。

    • A、数组的长度
    • B、数组首地址
    • C、数组每一个元素的地址
    • D、数组每个元素的值

    正确答案:D

  • 第8题:

    若一个n阶矩阵A中的元素满足:Aij=Aji(0<=I,j<=n-1)则称A为()矩阵;若主对角线上方(或下方)的所有元素均为零时,称该矩阵为()。


    正确答案:上;三角矩阵

  • 第9题:

    给定一个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]);
    }
    }

  • 第10题:

    问答题
    编写函数文件myfunction.m,求任意矩阵的均方根值,且当矩阵aa=[1,2,3;3,4,5]时,完成在MATLAB COMMAND窗口下的调用。

    正确答案: function rs=myfunction(a)
    [m,n]=size(a)
    sum=0
    for i=1:m
    for j=1:n
    sum=sum+a(i,j)
    end
    end
    rs=sqrt(sum/m/n)
    在命令窗中输入 aa = [ 1,2 ,3; 3,4,5 ] ,然后执行 rs=myfunction(aa) 即可。
    解析: 暂无解析

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

    单选题
    当调用函数时,实参是一个数组名,则向函数传送的是()。
    A

    数组的长度

    B

    数组首地址

    C

    数组每一个元素的地址

    D

    数组每个元素的值


    正确答案: C
    解析: 暂无解析

  • 第13题:

    已知对称矩阵An*n(Ai,j=Aj,i)的主对角线元素全部为O,若用一维数组B仅存储矩阵A的下三角区域的所有元素(不包括主对角线元素),则数组B的大小为( )。

    A.n(n-1)

    B.n2/2

    C.n(n-1)/2

    D.n(n+1)/2


    正确答案:C
    解析:以4阶对称矩阵为例说明。如果一个4阶对称矩阵及其下三角区域分别如下图所示,那么它的下三角区域(不包括对角线)的元素个数为1+2+3。

    依此类推,对于n阶对称矩阵,其下三角区域的元素个数为l+2+3+…n-1。

  • 第14题:

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


    Inti,/**/j/**/;
    Sum=/**/0/**/;
    /**/sum+=a[i][0];/**/

  • 第15题:

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


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

  • 第16题:

    试题三(共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 */


    正确答案:

  • 第17题:

    编写一个函数fun(),首先从键盘上输入一个4行4列的一个实数矩阵到一个二维数组a[4][4]中,接着求出主对角线上元素之和,最后返回求和结果。

  • 第18题:

    输入矩阵A=[123;7-58;9-1-7],使用全下标方式用A(2,2) 取出元素“-5 ”,使用单下标方式用()取出元素“-5 ”。


    正确答案:A(5)

  • 第19题:

    将10阶的上三角矩阵(非0元素分布在矩阵右上部)按照行优先顺序压缩存储到一维数组A中,则原矩阵中第5行第5列的非0元素在一维数组A中位于第()个元素位置。


    正确答案:35

  • 第20题:

    设有n阶对称矩阵A,用数组s进行压缩存储,当i≥j时,A的数组元素aij相应于数组s的数组元素的下标为()。(数组元素的下标从1开始)


    正确答案:i(i-1)/2+j

  • 第21题:

    问答题
    请补充fun函数,该函数的功能是:计算N×N维矩阵元素的方差,结果由函数返回。维数在主函数中输入。
      例如:

    正确答案:

    ①int a[][N]
    ②s/(n*n)
    ③sqrt(f)
    解析:
    根据题目中的方差公式,先要计算矩阵元素的平均值,再求矩阵元素与平均值差的平方的平均值,最后调用库函数求方差。
      填空1:根据函数中各变量的使用情况及实参的类型,这里应该是对二维数组a的定义,因为二维数组做形参,可以省略第一维的长度,但不能省略第二维的长度,所以此处应填int a[][N]。
      填空2:这里求矩阵元素的平均值,注意元素的个数应该是n*n。
      填空3:此处应该调用库函数sqrt()求平方根。

  • 第22题:

    单选题
    已知一个有向图的邻接矩阵表示,要删除所有从第i个结点发出的边,应()。
    A

    将邻接矩阵的第i行删除

    B

    将邻接矩阵的第i行元素全部置为0

    C

    将邻接矩阵的第i列删除

    D

    将邻接矩阵的第i列元素全部置为0


    正确答案: D
    解析: 暂无解析

  • 第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]);
    }
    }
    解析: 暂无解析

  • 第24题:

    填空题
    若一个n阶矩阵A中的元素满足:Aij=Aji(0<=I,j<=n-1)则称A为()矩阵;若主对角线上方(或下方)的所有元素均为零时,称该矩阵为()。

    正确答案: 上,三角矩阵
    解析: 暂无解析