我使用C语言编写了传统的矩阵乘法,但是结果不正确,虽然我没有看到任何明显的错误。我的输入文件如下:
3 2
2 2
2 2
2 2
2 3
1 1 1
1 1 1
第一行和第五行中的3 2和2 3表示后续矩阵中的行数和列数。结果应该是一个3x3的矩阵,全部为4。然而,这段代码返回:
4197299 4 4
4 4 4
-1912599044 32621 572
我倾向于认为这可能是我声明矩阵的方式有问题所致。我没有使用malloc,而是从输入文件中扫描行和列的值并直接实例化所需的矩阵。我对C语言非常陌生,因此动态内存分配的概念还不完全清晰。我可能完全错了,但我不确定。特别让我困惑的是,大约一半的矩阵返回了正确的值。以下是我的代码。
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char** argv){
int i, j, k, row1, col1, row2, col2, temp;
if(argc != 2){
printf("error\n");
exit(1);
}
FILE *file = fopen(argv[1], "r");
if(file == NULL){
printf("error\n");
exit(1);
}
//MATRIX 1
fscanf(file, " %d\t%d", &row1, &col1);
int matrix1[row1][col1];
for(i = 0; i<row1; i++){
for(j=0; j<col1; j++){
fscanf(file, "%d", &temp);
matrix1[i][j] = temp;
}
}
//MATRIX TWO
fscanf(file, " %d\t%d", &row2, &col2);
int matrix2[row2][col2];
int product[row1][col2]; //DECLARING PRODUCT MATRIX
for(i = 0; i<row2; i++){
for(j=0; j<col2; j++){
fscanf(file, "%d", &temp);
matrix2[i][j] = temp;
}
}
for(i = 0; i<row1; i++){
for(j = 0; j<col2; j++){
for(k = 0; k<col1; k++){
product[i][j] += matrix1[i][k]*matrix2[k][j]; //MULTIPLICATION STEP
}
}
}
for(i = 0; i<row1; i++){
for(j = 0; j<col2; j++){
printf("%d\t", product[i][j]); //PRINTING THE PRODUCT
}
printf("\n");
}
return 0;
}
scanf
的衍生版本(除了sscanf
,但只有在您100%确定输入格式正确时才能使用)。http://www.gidnetwork.com/b-59.html - hl037_