int main()
{
int n = 0;
int i = 0;
int j = 0;
int k = 0;
int **x;
int **y;
int **z;
printf("Enter size of matrix - (N x N):");
scanf("%d", &n);
x = malloc(n * sizeof(int *));
y = malloc(n * sizeof(int *));
z = malloc(n * sizeof(int *));
for(i = 0; i < n; i++)
{
x[i] = malloc(n * sizeof(int));
y[i] = malloc(n * sizeof(int));
z[i] = malloc(n * sizeof(int));
}
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
{
x[i][j] = (rand()% 10) + 1;
y[i][j] = (rand()% 10) + 1;
}
}
for(i = 0; i < n; i++)
{
printf("\n");
for(j = 0; j < n; j++)
{
printf("%2d ", x[i][j]);
printf("%2d ", y[i][j]);
}
}
for(i = 0; i < n; i++)
{
printf("\n\n");
for(j = 0; j < n; j++)
{
for(k = 0; k < n; k++)
{
z[i][j] += x[i][k] * y[k][j];
}
printf("%2d ", z[i][j]);
}
}
}
所以我试图进行矩阵乘法,其中2个矩阵总是2x2或3x3等。我想用随机值填充2个矩阵并进行乘法运算。我的问题是我存储答案的第三个矩阵产生了错误的值。例如,我的前两个matricies(2x2)保持值[4,7,4,6]和[8,6,7,3],我的输出是[76,48,70,45]真的它应该是[81,45,74,42]。不知道出了什么问题?
答案 0 :(得分:2)
使用malloc()
分配内存时,您获得的空间不会自动初始化。它可以包含任何值。您可以使用随机值填充x
和y
矩阵,但使用z
的元素,就像它们来自malloc()
一样。您希望在乘法的主要部分之前将它们设置为零。您可以通过首先使用calloc()
分配它们来实现,或者您可以在设置初始x
和y
值的同一循环嵌套中将它们设置为零。 / p>