0
点赞
收藏
分享

微信扫一扫

二维数组------矩阵

Hyggelook 2022-03-11 阅读 75

1.二维数组名作为实参,函数首部的声明

(1)行指针
fun(double (*a)[N])
(2)省略行下标
fun(double a[][N])
(3)
fun(double a[M][N])

2.求矩阵行列的最大值和最小值

(1)行最大值

for(i=0;i<n;i++)
{
max=a[i][0];
for(j=0;j<n;j++)
{
if(a[i][j]>max) max=a[i][j];
}
b[k++]=max;
}

(2)列最大

for(j=0;j<n;j++)
{
max=a[0][j];
for(i=0;i<n;i++)
{
if(a[i][j]>max) max=a[i][j];
}
b[k++]=max;
}

(3)举例

//每列中的最大值
void fun(int tt[M][N],int pp[N])
{
int i,j,k,max;
for(j=0;j<N;j++)
{
max=tt[0][j];
for(i=0;i<M;i++)
{
if(tt[i][j]>max) max=tt[i][j];
}
pp[k++]=max;
}
}

3.矩阵周边元素下标的特点

 注释:i=0 || i=N-1 || j=0 || j=N-1

//N*N二维数组,求周边元素的平均值
double fun(int w[][N])
{
int i,j,count=0;
double s=0.0;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==0||i==N-1||j==0||j==N-1)
{
s+=w[i][j];
count++;
}
}
}
return s/count;
}

4.二维数组的行与列

(1)按行或列存放数组元素

//按行存放
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
b[k++]=a[i][j];
}
}

//按列存放
for(j=0;j<N;j++)
{
for(i=0;i<M;i++)
{
b[k++]=a[i][j];
}
}

(2)举例

//按列存放
void fun(int (*s)[10],int *b,int *n,int mm, int nn)
{
int i,j,k;
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[k++]=s[i][j];
*n=k;
}

(3)行列的移动

//按列移动
for(k=0;k<2;k++)//移动两列
{
for(i=0;i<M;i++)
{
t=a[i][0];
for(j=0;j<N-1;j++)
a[i][j]=a[i][j+1];
a[i][M]=t;
}
}

6.对角线元素

注释:

主对角线元素:i=j;        a[i][j]

反对角线元素:i+j=n-1;或者j=n-i-1;        a[i][n-1-i]

右上半角元素:i<j;

左下半角元素:i>j; 

//使数组左下半角元素中的值乘以3
void fun(int a[][N],int n)
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i>=j)
a[i][j]=a[i][j]*n;
}

5.矩阵的转置

for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
if(i<j)
{
t=a[i][j];
a[i]][j]=a[j][i];
a[j][i]=t;
}
}
}
void fun(int array[3][3])
{
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(i<j)
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
}
举报

相关推荐

0 条评论