参考: 《C程序设计》(夏宝岚) P78 6.10 求两个矩阵的乘积矩阵。#include <stdio.h>int main(){ int a[100][100] = {{1, 0, 3, -1}, {2, 1, 0, 2}}; int b[100][100] = {{4, 1, 0}, {-1, 1, 3}, {2, 0, 1}, {1, 3, 4}}; int c[100][100] = {{0}}; int n = 2; /* 第一矩阵的行数 */ int m = 4; /* 第一矩阵的列数,即第二矩阵的行数 */ int p = 3; /* 乘积矩阵的列数 */ int i, j, k; for (i = 0; i < n; i++) { for (j = 0; j < p; j++) { c[i][j] = 0; for (k = 0; k < m; k++) c[i][j] = c[i][j] + a[i][k] * b[k][j]; printf("%5d", c[i][j]); } printf("\n"); } return 0;}运行结果:=================== 9 -2 -1 9 9 11===================★ 只有当一个矩阵(左矩阵)的列数等于第二个矩阵(右矩阵)的行数时, 两个矩阵才能相乘。得到的乘积矩阵行数为第一个矩阵的行数, 列数为第二个矩阵的列数。★ 矩阵的相乘规则如下: ┌ a11 a12 a13 ┐A =│ │ └ a21 a22 a23 ┘ ┌ b11 b12 ┐B =│ b21 b22 │ └ b31 b32 ┘ ┌ a11b11+a12b21+a13b31 a11b12+a12b22+a13b32 ┐AB =│ │ └ a21b11+a22b21+a23b31 a21b12+a22b22+a23b32 ┘上述程序中两个矩阵的维数分别为 n × m,m×p,所得乘积矩阵为 n×p 。若要交互输入原矩阵,则改写如下:#include <stdio.h>int main(){ int a[100][100], b[100][100], c[100][100]; int n, m, p; /* n×m, m×p */ int i, j, k; printf("Input value of n, m, p\n"); scanf("%d %d %d", &n, &m, &p); printf("\nA:\n"); for (i = 0; i < n; i++) /* 读取矩阵A的各元素 */ for (j = 0; j < m; j++) scanf("%d", &a[i][j]); printf("\nB:\n"); for (i = 0; i < m; i++) /* 读取矩阵A的各元素 */ for (j = 0; j < p; j++) scanf("%d", &b[i][j]); printf("\nAB:\n"); for (i = 0; i < n; i++) /* 求矩阵C的各元素 */ { for (j = 0; j < p; j++) { c[i][j] = 0; for (k = 0; k < m; k++) c[i][j] = c[i][j] + a[i][k] * b[k][j]; printf("%5d", c[i][j]); } printf("\n"); } return 0;}运行结果:=========================Input value of n, m, p2 4 3↙ A:1 0 3 -1↙2 1 0 2↙ B:4 1 0↙-1 1 3↙2 0 1↙1 3 4↙ AB: 9 -2 -1 9 9 11==========================★ 搞懂矩阵相乘的原理,就可以对以前的一个问题进行补充了, 详见 [047] 求传递闭包。

评论