将两个2Darrays相乘

所以我有一个问题将两个2darrays相乘。 我非常确定矩阵A和矩阵B正确存储,它们在程序运行时正确显示。 当我尝试将2个数组相乘时,我得到了很多1和0的长字符串。 什么可能是问题的任何想法?

这是我的代码:

#include  #include #include  #include  /* Routines called. */ int loadMatrixFromFile(char *filename, int *data); void showMatrix(int *data, int len); int makeIdent(int matrixB[5][5], int length); int matrixA[5][5]; int matrixB[5][5]; int matrixC[5][5]; void multiplyMatrices(int matrixA[5][5], int matrixB[5][5],int matrixC[5][5]); int main(){ int len, data[1000]; len = loadMatrixFromFile("Numbers.txt", data); showMatrix(data, len); makeIdent(matrixB,len); multiplyMatrices(matrixA, matrixB, matrixC); } int makeIdent(int matrixB[5][5], int len) { int i,j; printf("Matrix B = \n"); for(i=0;i<5;i++){ for(j=0;j<5;j++){ if(i==j){ matrixB[i][j]=1; printf("%d ",matrixB[i][j]); } else{ matrixB[i][j]=0; printf("%d ",matrixB[i][j]); } } printf("\n"); } return matrixB[i][j]; printf("\n"); } int loadMatrixFromFile(char *filename, int *data) { FILE *in; int len; int j; in = fopen(filename, "r"); if (in == NULL) { printf("Could not find file: %s \n", filename); } else { printf("Reading numbers...\n"); fscanf(in, "%d", &len); printf("reading %d numbers from file %s ....\n", len, filename); for(j=0;j<len;j++) { fscanf(in, "%d", data + j); } fclose(in); } for(int i = 0; i<5; i++){ for(int j = 0; j < 5; j++){ matrixA[i][j] = *data; } } return len; } void showMatrix(int *data, int len) { int j; int count = 0; printf("Showing %d numbers from data array....\n", len); printf("Matrix A = \n"); for(j=0;j<len;j++) { printf("%d ", *(data + j)); count++; if(count % 5 == 0){ printf("\n"); } } printf("\n"); } void multiplyMatrices(int matrixA[5][5], int matrixB[5][5],int matrixC[5][5]){ int i, n, j; printf("\n"); printf("Matrix A x Matrix B = \n"); for (i = 0; i<5; i++){ for (n = 0; n<5; n++){ for (j = 0; j<5; j++){ matrixC[i][n] += matrixA[i][j]*matrixB[j][n]; printf("%d ",matrixC[i][n]); } } } } 

以下是文本文件看起来如何从中拉出数组A:

 25 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 

这里似乎有些不对劲:

matrixA[i][j] = *data;

你应该用

matrixA[i][j] = *(data + i*5 + j);

另外,尝试打印:

printf("%d ",matrixC[i][n]);

在第二个循环n (在最里面的循环j )。