用c语言求矩阵的转置为何用数组名做参数,却传不到形参指针变量中,错误代码c2660 求高手

部分代码#include<stdio.h>
#define M 3
int i,j,n,c[M][M];
void main()
{
void zz(int *);
void xj(int *,int *);
void xc(int *,int *);
void sr(int *,int *);
int a[M][M],int b[M][M];
printf("输入矩阵a\n");
sr(a);
printf("输入矩阵b\n");
sr(b);
zz(a);
xj(a,b);
xc(a,b);
}
void sr(int* x)
{
printf("矩阵a的转置是\n");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&x[i][j]);
for(i=0;i<M;i++)
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%d",x[i][j]);
}

}
void xj(int* x,int * y)
{
printf("矩阵a与矩阵b相加\n");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
c[i][j]=x[i][j];
for(i=0;i<M;i++)
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%d",c[i][j]);
}

}

#include<stdio.h>
#define M 3
int i,j,n,c[M][M];
void main()
{
void zz(int *);
void xj(int *,int *);
void xc(int *,int *);
void sr(int *,int *);
int a[M][M],int b[M][M];
printf("输入矩阵a\n");
sr(a);
printf("输入矩阵b\n");
sr(b);
zz(a);
xj(a,b);
xc(a,b);
}
void sr(int* x)
{
printf("矩阵a的转置是\n");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&x[i][j]);
for(i=0;i<M;i++)
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%d",x[i][j]);
}

}
void xj(int* x,int * y)
{
printf("矩阵a与矩阵b相加\n");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
c[i][j]=x[i][j];
for(i=0;i<M;i++)
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%d",c[i][j]);
}

}

}

第1个回答  2012-09-05
因为你给的形参是二维数组(元素为一维数组的数组),但是函数的参数是指向int元素类型的指针,不是指向int数组类型的指针。所以应当将所有参数改成指向数组指针,比如将int * x 改成int (*x)[M];
#include<stdio.h>
#define M 3
int i,j,n,c[M][M];
void main()
{
void zz(int (*)[M]);
void xj(int (*)[M],int (*)[M]);
void xc(int (*)[M],int (*)[M]);
void sr(int (*)[M],int (*)[M]);
int a[M][M],int b[M][M];
printf("输入矩阵a\n");
sr(a);
printf("输入矩阵b\n");
sr(b);
zz(a);
xj(a,b);
xc(a,b);
}
void sr(int (*x)[M])
{
printf("矩阵a的转置是\n");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&x[i][j]);
for(i=0;i<M;i++)
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%d",x[i][j]);
}

}
void xj(int (*x)[M],int (*y)[M])
{
printf("矩阵a与矩阵b相加\n");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
c[i][j]=x[i][j];
for(i=0;i<M;i++)
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%d",c[i][j]);
}

}

}
第2个回答  推荐于2016-08-20
错误:
1. main函数返回类型固定为void
2. 上面程序定义的函数形参均为整形指针,而不是数组指针
3. 没有定义zz和xc函数,srxj函数重复,但却没有转置矩阵函数

修改后:
#include<stdio.h>
#define M 3
int i,j,n;
int main()
{
void zz(int a[][3]);
void xj(int x[][3],int y[][3]);
void xc(int a[][3],int b[][3]);
void sr(int x[][3]);
int a[M][M];int b[M][M];
printf("输入矩阵a\n");
sr(a);
//printf("输入矩阵b\n");
//sr(b);
xj(a,b);
getchar();
getchar();
}
void sr(int x[][3])
{
printf("矩阵a是:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
scanf("%d",&x[i][j]);
}
for(i=0;i<M;i++)
{
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%4d",x[i][j]);
}
}
}
void xj(int x[][3],int y[][3])
{
printf("\n矩阵a的转置矩阵b:\n");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
y[i][j]=x[j][i];
}
for(i=0;i<M;i++)
{
for(j=0;j<M;j++,n++)
{
if(n%M==0) printf("\n");
printf("%4d",y[i][j]);
}
}

}本回答被提问者采纳
相似回答