C语言程序设计

单选题设有一个M*N的矩阵已经存放在一个M行N列的数组x中,且有以下程序段:sum=0;for(i=0;i A 矩阵两条对角线元素之和B 矩阵所有不靠边元素之和C 矩阵所有元素之和D 矩阵所有靠边元素之和

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

矩阵两条对角线元素之和

B

矩阵所有不靠边元素之和

C

矩阵所有元素之和

D

矩阵所有靠边元素之和

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

下列给定程序中,函数fun()的功能是求出数组中最小数和次最小数,并把最小数和a[0]中的数对调,次最小数和a[1]中的数对调。

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

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

试题程序:

include <conio.h>

include <stdio.h>

define N 20

void fun(int *a,int n)

{

int i, m,t,k;

/*************found**************/

for(i=O; i<n; i++)

{

m==i;

for(k=i; k<n; k++)

if(a[k]<a[m])

/*************found**************/

k=m;

t=a[i];

a[i]=a[m];

a[m]=t;

}

}

main()

{

int x,b[N]={11,5,12,0,3,6,9,7,10,8},

n=10,i;

clrscr();

for(i=0; i<n; i++)

printf("%d",b[i]);

printf("\n");

fun(b,n);

for(i=0; i<n; i++)

printf("%d",b[i]);

printf("\n");

}


正确答案:(1) 错误: for(i=0;in;i++) 正确:for(i=0;i2;i++) (2) 错误:k=m; 正确:m=k;
(1) 错误: for(i=0;in;i++) 正确:for(i=0;i2;i++) (2) 错误:k=m; 正确:m=k; 解析:错误1:由于题目要求将最小数和次最小数分别与a[0]和a[1]中的数对调,因此这层循环只需循环两次。错误2:赋值语句的执行方向是从右向左,即把右边的值赋给左边的变量。

第2题:

以下程序中,select 函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标。请填空。

#define N 3

#define M 3

select(int a[N][M],int *n)

{int i,j,row=1,colum=1;

for(i=0;i

for(j=0;j

if(a[i][j]>a[row][colum]){row=i;colum=j;}

*n= 【16】 ;

return 【17】 ;

}

main()

{int a[N][M]={9,11,23,6,1,15,9,17,20},max,n;

max=select(a,&n);

printf("max=%d,line=%d\n",max,n);

}


正确答案:
row;a[row][colum]

第3题:

以下程序中函数 f 的功能是在数组 x 的 n 个数 ( 假定 n 个数互不相同 ) 中找出最大最小数 , 将其中最小

的数与第一个数对换 , 把最大的数与最后一个数对换 . 请填空 .

#include <stdio.h>

viod f(int x[],int n)

{ int p0,p1,i,j,t,m;

i=j=x[0]; p0=p1=0;

for(m=0;m<n;m++)

{ if(x[m]>i) {i=x[m]; p0=m;}

else if(x[m]<j) {j=x[m]; p1=m;}

}

t=x[p0]; x[p0]=x[n-1]; x[n-1]=t;

t=x[p1]; x[p1]= _[14]_______ ; _[15]_______ =t;

}

main()

{ int a[10],u;

for(u=0;u<10;u++) scanf("%d",&a[u]);

f(a,10);

for(u=0;u<10;u++) printf("%d",a[u]);

printf("\n");

}


正确答案:

第4题:

请编一个函数void fun( int tt[M][N], int pp[N], tt指向一个M行N列的二维数组,求出二维数组每列中最大元素,并依次放入pp所指的一维数组中。二维数组中的数已在主函数中给出。

注意:部分源程序给出如下。

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

试题程序:

include <conio.h>

include <stdio.h>

define M 3

define N 4

void fun(int tt[M][N],int pp[N])

{

}

main()

{

int t[M] [N]={{68,32,54,12},{14,24,88,

58},{42, 22, 44, 56}};

int p[N],i,j,k;

clrscr();

printf("The riginal data is:\n");

for(i=0;i<M;i++)

{

for(j=0;j<N;j++)

printf("%6d",t[i][j]);

printf("\n");

}

fun(t,p);

printf("\nThe result is:\n");

for(k=0;k<N;k++)

printf("%4d",p[k]);

printf("\n");

}


正确答案:void fun(int tt[M][N]int pp[N]) { int iimax; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } }
void fun(int tt[M][N],int pp[N]) { int i,i,max; for(j=0;jN;j++) { max=tt[0][j]; /*假设各列中的第一个元素最大*/ for(i=0;iM;i++) if(tt[i][j]>max) /*如果各列中的其他元素比最大值大,则将这个更大的元素看作当前该列中最大元素*/ max=tt[i][j]; pp[j]=max; /*将各列的最大值依次放入pp数组中*/ } } 解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。

第5题:

下面程序段的时间复杂度是()。s=0;for(i=0;ifor(j=0;js+=B[i][j];sum=s;

A、O(m2)

B、O(n2)

C、O(m*n)

D、O(m+n)


参考答案:B

第6题:

以下程序中的select()函数功能是:在N行M列的二维数组中选出一个最大值作为函数值返回,并通过形参传回此最大值的行下标。请填空完成此程序。

include<iostream>

define N 3

define M 3

using namespace std;

int select(int a[N][M],int *n)

{

int i,j,row=0,colum=0;

for(i=0;i<N;i++)

for(i=0;j<M;j++)

if(a[i][j]>a[row][colum])

{

row=i;

colum=j;

}

*n=【 】;

return 【 】;

}

int main()

{

int a[N][M]={9,11,23,6,1,15,9,17,20};

int max,n;

max=select(a,&n);

cout<<"max="<<max<<"line="<<n<<end1;

return 0;

}


正确答案:row a[row][colum]
row a[row][colum] 解析:通过对题意的分析不难看出:在select()函数中,变量row的作用是用来标记最大元素的行下标值,colum的作用是用来记下最大元素的列下标:函数select()通过循环求得数组的最大值的行下标、列下标并分别存放在变量row和colum中。根据题意,应把行下标赋值给形参指针变量n,这样就通过地址传递的方式改变了主调函数中的实参,即把最大值的行下标传回到主调函数中。然后把最大值a[row][colum]作为函数返回值。

第7题:

已知有一维数组A[0...m*n-1],若要对应为m行、n列的矩阵,则下面的对应关系______可将元素A[k](0≤k<m*n)表示成矩阵的第i行、第j列的元素(0≤i<m,0≤j<n)。

A.i=k/n,j=k%m

B.i=k/m,j=k%m

C.i=k/n,j=k%n

D.i=k/m,j=k%n


正确答案:C
解析:本题其实是求一个一维数组A[m*n)向二维数组B[m][n]的转化问题。最原始的方法就是把A数组的前n个元素放到B数组的第一行中,A数组的第n个元素放到B数组的第二行中,依次类推,A数组的最后n个元素放到B数组的最后一行中。
  要求A[k]在B数组中的位置,首先确定A[k]处在哪一行,根据上面的存放方法,显然,应该是k/n行。然后再确定处在k/n行的哪一列,显然是k%n。

第8题:

以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。#define N 3#define M 3select(int a[N][M],int *n){int i,j,row=0,colum=0;for(i=0;i<N;i++)for(j=0;j<M;j++)if(a[i][j]>a[row][colum]){row=i;colum=j;}*n=;return();}


正确答案:row a[row][colum]
函数通过两个循环来实现功能,对每一行每一列进行搜索,发现有比a[row][colum]大的数,就将row,colum赋给行和列下标,n为一个指针,通过改变n的值可以达到改变实参的值的目的,最后返回最大值。

第9题:

下列给定程序中,函数fun()的功能是:输出M行N列整数方阵,然后求两条对角线上的各元素的平方和,返回此和数。

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

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

试题程序:

include <conio.h>

include <stdio.h>

define M 5

int fun(int n,int XX[][M])

{

int i,j,sum=O;

printf("\nThe %d x %d matrix:\n",M,M);

for(i=0;i<N;i++)

{

for(j=0;j<M;j++)

/*************found*************/

printf("%4d",XX[i j]);

/*************found*************/

printf('\n');

}

for(i=0;i<n;i++)

sum+=xx[i][i]*XX[i][i]+XX[i][n-i-1]

*XX[i][n-i-1];

return(sum);

}

main()

{

int aa[M][M)={{3,12,4,24,35},

{11,3, 3,7, 56},{61,27,58,49,24},

{17,28,7,36,85},{15,33,5,24,9}};

clrscr();

printf("\nThe result of all elements on 2

diagnals iS%d",fun(M,aa));

}


正确答案:(1)错误:printf("%4d"xx[ij]); 正确:printf("%4d"xx[i][j]): (2) 错误:printf('\n'); 正确:printr("\n");
(1)错误:printf("%4d",xx[ij]); 正确:printf("%4d",xx[i][j]): (2) 错误:printf('\n'); 正确:printr("\n"); 解析:错误1:此处考查的是对二维数组的引用方法。错误2:此处考查的是输出语句的语法,括号中应该用双引号,而不是单引号。

第10题:

给定程序MODllC中函数fun的功能是:输出M行M列整数方阵,然后求两条对角线上各元素之和,返回此和数。

inClude<coMo.h>

inClude<stdio.h>

dehne M 5

/************fOUnd************/

int fun(int n,int xx[][])

{int i,j,sum=0;

printf("\n The%dx%d matrix:\n"M,M);

for(i=0;i<M;i++)

{ for(j=0;j<M;j++)

/************found************/

printf("%f",xx[i][j]);

printf("\n");

}

for(i=0;i<n;i++)

sum+=xx[i][i]+XX[i][[n-i-1];

return(sum);

}

main( )

{int aa[M][M]={{1,2,3,4,5),{4,3,2,1,0),

{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

clrscr( );

printf("\n The sum Of all elements On 2 diagnals is %d."fun(M,aa));

}


正确答案:int fun(int nint xx[][]) 改为 int fun(int nint xx[][M)) printf("%fxx[i][j]); 改为 printf("%d"xx[i][j]);
int fun(int n,int xx[][]) 改为 int fun(int n,int xx[][M)) printf("%f,xx[i][j]); 改为 printf("%d,"xx[i][j]); 解析:二维数组作为函数形参时,二维长度不可缺省,只能省略一维的长度。在格式输出函数中,血型数据输出时对应的控制符是%d.

更多相关问题