我试图在C ++中将两个2D数组相乘,但预期的输出不正确,以下是我的逻辑,我正在尝试 -
int A[l][m]; //creates A l*m matrix or a 2d array.
for(int i=0; i<l; i++) //This loops on the rows.
{
for(int j=0; j<m; j++) //This loops on the columns
{
A[i][j] = i+j; // Allocating values to A matrix
}
}
int B[m][n]; //creates B m*n matrix or a 2d array.
for(int i=0; i<m; i++) //This loops on the rows.
{
for(int j=0; j<n; j++) //This loops on the columns
{
B[i][j] = i+j+1; // Allocating values to B matrix
}
}
int C[l][n]; //creates C m*n matrix or a 2d array.
for(int i=0; i<l; i++) //This loops on the rows.
{
for(int j=0; j<n; j++) //This loops on the columns
{
for(int k=0; k<m; k++) //This loops on the columns
{
C[i][j] += A[i][k] * B[k][j]; // Allocating values to C matrix
//product[row][col] += aMatrix[row][inner] * bMatrix[inner][col];
}
cout << C[i][j] << " ";
}
cout << "\n";
}
如果我给l = 2,m = 2且n = 2我得到以下输出 -
-1077414723 3
15 8
哪个不对,有人可以告诉我这里有什么问题。
答案 0 :(得分:3)
您必须将C[i][j]
初始化为0.
或者您可以在0
处开始计算金额,然后在C[i][j]
后分配:{/ p>
//...
for(int j=0; j<n; j++) //This loops on the columns
{
int sum = 0;
for(int k=0; k<m; k++) //This loops on the columns
{
sum += A[i][k] * B[k][j]; // Allocating values to C matrix
//product[row][col] += aMatrix[row][inner] * bMatrix[inner][col];
}
C[i][j] = sum;
cout << C[i][j] << " ";
}
//...
答案 1 :(得分:0)
您有未定义的行为:声明了int C[l][n];
但从未初始化。
通常,memset
用于将内存归零,或者只是循环遍历元素并将它们设置为零(对于现代编译器,它也同样快)。
答案 2 :(得分:0)
您尚未将c [i] [j]初始化为0。 使用
int c[2][2]= {{0}};
这将初始化数组的第一个元素。但是,如果初始化数组的某些元素,那么未初始化的元素将设置为0.