【发布时间】:2020-06-01 14:31:14
【问题描述】:
matrixMultiplier 函数的目的是将A * B 相乘,然后显示结果矩阵C,对于任意两个方阵A 和B。 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;
}
【问题讨论】:
-
int A[][10] = {{0}}是int A[1][10]- 这是您的代码可以使用的唯一矩阵大小。 -
外尺寸为
1。 -
尝试使用内存清理器运行,例如在 clang 中:
-fsanitize=memory -fno-omit-frame-pointer