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;
}
}
}