C
题目描述计算两个矩阵的乘法。n×m 阶的矩阵A乘以m×k 阶的矩阵B得到的矩阵C是n×k 阶的,且C=A×B+A×B+……+A×B (C 表示 C 矩阵中第 i 行第 j 列元素)。
输入描述
第一行为 n, m, k,表示 A 矩阵是n行m列,B矩阵是m行k列,n,m,k 均小于100;
然后先后输入A和B两个矩阵,A矩阵n行m列,B矩阵m行k列,矩阵中每个元素的绝对值不会大于 1000。
输出描述
输出矩阵 C,一共 n 行,每行 k 个整数,整数之间以一个空格分开。 思路:
首先,根据输入描述,我们可以得知矩阵A的行数是n,列数是m,矩阵B的行数是m,列数是k。
然后,我们需要创建一个n行k列的矩阵C来保存结果。
接下来,遍历A的每一行和B的每一列,将对应位置的元素相乘并累加到C的对应位置上。
最后,输出矩阵C。
代码实现如下:
#include <stdio.h>
void matrix_multiply(int n, int m, int k, int A, int B, int C) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
C = 0; // 初始化C矩阵的对应位置为0
for (int x = 0; x < m; x++) {
C += A * B; // 累加乘积结果到C矩阵的对应位置上
}
}
}
}
int main() {
int n, m, k;
scanf("%d %d %d", &n, &m, &k);
int A;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &A);
}
}
int B;
for (int i = 0; i < m; i++) {
for (int j = 0; j < k; j++) {
scanf("%d", &B);
}
}
int C;
matrix_multiply(n, m, k, A, B, C);
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
printf("%d ", C);
}
printf("\n");
}
return 0;
}
这样,我们就可以计算出两个矩阵的乘积并输出结果了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 C过不了编译啊,C++才行。仅供参考:
#include <stdio.h>
struct Info {
long long data;
int n, m;
void init() {
memset(data, 0, sizeof(data));
n = m = 0;
}
Info operator * (const Info &b) const {
Info res;
memset(res.data, 0, sizeof(res.data));
res.n = n;
res.m = b.m;
for (int i = 1; i <= res.n; i++)
for (int j = 1; j <= res.m; j++)
for (int k = 1; k <= b.n; k++)
res.data += data * b.data;
return res;
}
};
Info a, b, c;
int main() {
a.init(); b.init(); c.init();
scanf("%d%d%d", &a.n, &a.m, &b.m);
b.n = a.m;
for (int i = 1; i <= a.n; ++i) {
for (int j = 1; j <= a.m; ++j) {
scanf("%lld", &a.data);
}
}
for (int i = 1; i <= b.n; ++i) {
for (int j = 1; j <= b.m; ++j) {
scanf("%lld", &b.data);
}
}
c = a * b;
for (int i = 1; i <= c.n; ++i) {
for (int j = 1; j <= c.m; ++j) printf("%lld ", c.data);
puts("");
}
}
页:
[1]