此代码在C中将两个矩阵相乘有什么问题?

问题描述 投票:1回答:1

我只知道一些C。matrixMultiplier函数的目的是将A * B相乘,然后显示任意两个平方矩阵A和B的结果矩阵C。A和B我限制为10 * 10。当询问用户要添加的矩阵的大小时,尽管A和B为10 * 10,该功能仅适用于A和B中的子矩阵,直到用户指定的尺寸,例如3 * 3。我已经测试过将3 * 3恒等矩阵自身相乘,这并没有给出正确的答案。任何帮助,将不胜感激!

    #include <stdio.h>
void matrixMultiplier(int A[][10], int B[][10], int C[][10], int n) {
 int i, j, k;
 for (i = 0; i < n; i++) {
   for (k = 0; k < n; k++) {
     C[i][k] = 0;               /* Initialize output matrix to zero */
   }
 }
 for (i = 0; i < n; i++) {
   for (k = 0; k < n; k++) {
     for (j = 0; j < n; j++) {
       C[i][k] += A[i][j] * B[j][k];
     }
   }
 }
 printf("\n");
 for (i = 0; i < n; i++) {
   for (k = 0; k < n; k++) {
     printf("%4d", C[i][k]);
   }
   printf("\n");
 }
}

int main(void) {
 int A[][10] = {{0}};
 int B[][10] = {{0}};
 int C[][10] = {{0}}; /* Initialize output matrix to zero */
 int i, j;
 int n;
 printf("Enter square matrix dimension: ");
 scanf("%d", &n);
 for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++) {
     printf("Assign a value: ");
     scanf("%d", &A[i][j]);
   }
   printf("New row.\n");
 }
 for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++) {
     printf("%4d", A[i][j]);
   }
   printf("\n");
 }
 for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++) {
     printf("Assign a value: ");
     scanf("%d", &B[i][j]);
   }
   printf("New row.\n");
 }
 for (i = 0; i < n; i++) {
   for (j = 0; j < n; j++) {
     printf("%4d", B[i][j]);
   }
     printf("\n");
 }
   matrixMultiplier(A, B, C, n);
   return 0;
}
c matrix-multiplication
1个回答
0
投票
int A[10][10] = {{0}}; int B[10][10] = {{0}}; int C[10][10] = {{0}}; /* Initialize output matrix to zero */

或动态分配数组。

[正如其他评论者所注意到的,C中的int A[][10] = {{0}};基本等于int A[1][10] = {{0}};,因此仅正确设置了第一行。 
© www.soinside.com 2019 - 2024. All rights reserved.