矩阵乘法的C语言实现

矩阵的乘法:

对于满足以下条件的矩阵A,B,C:

\large A\in M_{m\times r}(\mathbb{C}),B\in M_{r\times n}(\mathbb{C}),C\in M_{m\times n}(\mathbb{C})

我们有:

\large A\times B=C

其中:

\large C_{ij}=\sum_{k=1}^{r}(A_{ik}\times B_{kj});\forall 1\leqslant i\leqslant m,1\leqslant j\leqslant n

要注意的是矩阵群没有乘法交换律

下面的代码是输入两个矩阵,输出他们的乘

#include <stdio.h>


int main(void)
{
	int mTemp, rTemp, nTemp;
	scanf("%d %d %d", &mTemp, &rTemp, &nTemp);
	const int m = mTemp, r = rTemp, n = nTemp;	//注意数组的声明要用常数
	double A[m][r], B[r][n], C[m][n];

	//输入A,B两个矩阵
	for (int i = 0; i <= m - 1; i++) {
		for (int j = 0; j <= r - 1; j++) {
			scanf("%lf", &A[i][j]);
			}
		}
	for (int i = 0; i <= r - 1; i++) {
		for (int j = 0; j <= n - 1; j++) {
			scanf("%lf", &B[i][j]);
			}
		}

	//将矩阵(二维数组)C 的所有元素全部初始化为零
	for (int i = 0; i <= m - 1; i++) {
		for (int j = 0; j <= n - 1; j++) {
			C[i][j] = 0;
			}
		}

	//矩阵乘法
	for (int i = 0; i <= m - 1; i++) {
		for (int j = 0; j <= n - 1; j++) {
			for (int k = 0; k <= r - 1; k++) {
				C[i][j] += A[i][k] * B[k][j];
				}
			}
		}
	
	//输出结果
	for (int i = 0; i <= m - 1; i++) {
		for (int j = 0; j <= n - 1; j++) {
			printf("%10.5f ", C[i][j]);
			}
			printf("\n");
		}

	return 0;
}

当我们要进行计算的时候,首先输入m, r, n,再输入矩阵A, 再输入矩阵B

比如,我想要计算一下这两组矩阵

\large \begin{pmatrix} 1 &2 &3 \\ 4 & 5 & 6\\ 7& 8 & 9\\ 10&11 & 12 \end{pmatrix}\times \begin{pmatrix} 1 &1.1 \\ 2 &2.2 \\ 3 &3.3 \\ 4& 4.4 \end{pmatrix}

我就要这样输入

输出结果:

发现精度都没用上,居然是整数,那就再算一组,来个复杂点的


输入:

输出:

猜你喜欢

转载自blog.csdn.net/weixin_42612337/article/details/83011745