2 lingshuijushi lingshuijushi 于 2013.11.12 15:18 提问

C语言调用函数实现矩阵自乘
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 : ']'

3个回答

u012730315
u012730315   2013.12.21 18:51

标准的[]里面应该是有值的
你试试这个编译应该不会出错,但是运行就不知道了

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;

}

u011421573
u011421573   2014.01.08 20:00

你好,如上面那面仁兄所回!
就是在调用函数的时候,只需要调用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;
}

代码格式已经改变了!

bdyz1016
bdyz1016   2013.11.12 22:01

SelfMul(A1,A2,3);

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!