【发布时间】:2021-08-14 10:41:48
【问题描述】:
我用 C 语言编写了一个用于矩阵乘法的代码。没有错误,但没有出现所需的输出,我的代码的哪一部分是错误的或者我错过了什么。
#include <stdio.h>
#include <stdlib.h>
int main() {
int r1, c1, r2, c2;
int a[r1][c1];
int b[r2][c2];
int c[r1][c2];
int i, j;
printf("enter row1 and col1:\n");
scanf("%d%d", &r1, &c1);
printf("enter row2 and col2:\n");
scanf("%d%d", &r2, &c2);
if (c1 == r2) {
printf("enter element of 1st matrix:");
for (i = 0; i < r1; i++) {
for (j = 0; j < c1; j++) {
scanf("%d", &a[i][j]);
}
}
printf("\n-----------------");
printf("enter element of 2nd matrix:");
for (i = 0; i < r2; i++) {
for (j = 0; j < c2; j++) {
scanf("%d", &b[i][j]);
}
}
printf("the resultant matrix is:\n");
for (i = 0; i < r1; i++) {
for (j = 0; j < c2; j++) {
c[i][j] += a[i][j] * b[j][i];
}
}
for (i = 0; i < r1; i++) {
for (j = 0; j < c2; j++) {
printf("%d\t", c[i][j]);
}
printf("\n\n");
}
}
return 0;
}
【问题讨论】:
-
这里:
int r1,c1,r2,c2; int a[r1][c1];此时r1和c1的值是多少?数组的大小是多少? -
如果您使用 gcc 或 clang,请使用
-Wall -Wextra -Werror进行编译。如果您使用的是微软的编译器,请使用/W4 /WX进行编译。 -
您不能(以可移植的方式)对矩阵进行维度标注,其中行和列来自动态表达式(如变量名),而是来自常量值(例如 28)。更多关于如果你使用的变量没有被初始化(这意味着它们可以有任何值)不要在公共场合说没有错误,因为你赌的是有一个(在这种情况下至少三个)