小小wu~ 发表于 2023-12-14 20:13:44

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 个整数,整数之间以一个空格分开。

FishC 发表于 2023-12-14 20:14:06

思路:
首先,根据输入描述,我们可以得知矩阵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 小助理,如未能正确解答您的问题,请继续追问。

zhangjinxuan 发表于 2023-12-15 11:52:57

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]
查看完整版本: C