问题描述
- C语言调用函数实现矩阵自乘
-
各位前辈,小弟新学C语言,怎么也调试不过,不知道哪里出了问题,请问我该怎么调试?
调用void SelfMul(int A1[][3],int A2[][3],int n)实现3阶矩阵的乘法#include
//void SelfMul(int A1[][maxSize],int A2[][maxSize],int n)
void SelfMul(int A1[][3],int A2[][3],int n)
{
int s=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
A2[i][j]=0;
for(int k=0;k<n;k++)
A2[i][j]=A2[i][j]+A1[i][k]*A1[k][j];
printf("%d ",A2[i][j]);
if(++s%3==0)printf("n");
}
}
int main()
{
int A1[][3]={{0,1,0},{0,0,1},{1,1,0}};
int A2[3][3];
// int s=0;
SelfMul(A1[][3],A2[][3],3); //编译问题出错提示所在行
/*
for(int m=0;m<3;m++)
for(int b=0;b<3;b++)
{
printf("%d ",A2[m][b]);
if(++s%3==0)printf("n");
}
*/
return 0;
}编译不通过,提示error C2059: syntax error : ']'
解决方案
标准的[]里面应该是有值的
你试试这个编译应该不会出错,但是运行就不知道了
enter code here #include <stdio.h>
void SelfMul(int A1[][3],int A2[][3],int n);
void SelfMul(int A1[][3],int A2[][3],int n)
{
int s=0;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
A2[i][j]=0;
for(int k=0; k<n; k++)
A2[i][j]=A2[i][j]+A1[i][k]*A1[k][j];
printf("%d ",A2[i][j]);
if(++s%3==0)printf("n");
}
}
int main()
{
int A1[][3]= {{0,1,0},{0,0,1},{1,1,0}};
int A2[3][3];
int s = 0;
SelfMul(A1[3][3],A2[3][3],3);
for(int m=0; m<3; m++)
for(int b=0; b<3; b++)
{
printf("%d ",A2[m][b]);
if(++s%3==0)printf("n");
}
return 0;
}
解决方案二:
你好,如上面那面仁兄所回!
就是在调用函数的时候,只需要调用SelfMul(A1, A2, 3);就可以了
解释:
若传递进去的参数为A1[3][3],根据数组的规则,
那么这只是这个数组中的一个元素
而且已经越界了(数组下标从0开始)
而函数只希望传进一个n行3列的二给数组,
所以此时只需传递这两个二维数组的数组名就可以了!
其它并没有检查!
对您的建议,注意缩进和空格!
void SelfMul(int A1[][3], int A2[][3], int n)
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
A2[i][j] = 0;
for(int k = 0; k < n; k++)
A2[i][j] = A2[i][j] + A1[i][k] * A1[k][j];
printf("%d ", A2[i][j]);
}
printf("n");
}
}
int main()
{
int A1[][3]= {{0, 1, 0}, {0, 0, 1}, {1, 1, 0}};
int A2[3][3];
SelfMul(A1, A2, 3);
/*
for(int m = 0; m < 3; m++)
{
for(int b = 0; b < 3; b++)
{
printf("%d ", A2[m][b]);
}
printf("n");
}
*/
return 0;
}
代码格式已经改变了!
解决方案三:
SelfMul(A1,A2,3);