|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//有没有大佬可以来一个二维数组的矩阵相乘?代码尽量简单一点
1. 实现矩阵相乘算法。
设 A 为 m * p 的矩阵,B 为 p * n 的矩阵,那么称 m * n 的矩阵 C 为矩阵 A 与 B 的乘积,记作 C = AB,其中矩阵 C 中的第 i 行第 j 列元素可以表示为:
注意:当矩阵 A 的列数等于矩阵 B 的行数时,A 与 B 可以相乘。
矩阵 C 的行数等于矩阵 A 的行数,C 的列数等于 B 的列数。
乘积 C 的第 m 行第 n 列的元素等于矩阵 A 的第 m 行的元素与矩阵 B 的第 n 列对应元素乘积之和。
题目要求:已知矩阵 A 和矩阵 B,计算出矩阵 C 并如下图格式打印。
- // A 为 m * p 的矩阵,B 为 p * n 的矩阵,那么称 m * n 的矩阵 C 为矩阵 A 与 B 的乘积
- #include<stdio.h>
- #include<stdlib.h>
- #define M 4
- #define P 5
- #define N 6
- void main()
- {
- int i, j, k;
- //二维数组A和B求乘积,积放在数组C中
- int A[M][P], B[P][N], C[M][N] = { 0 };
- //输入二维数组A的元素的值
- printf("请输入矩阵A的元素:");
- for (i = 0;i < M;i++)
- {
- for (j = 0;j < P;j++)
- {
- scanf("%d", &A[i][j]);
- }
- }
- printf("\n");
- //打印二维数组A的元素
- printf("矩阵A如下:\n");
- for (i = 0;i < M;i++)
- {
- for (j = 0;j < P;j++)
- {
- printf("%3d", A[i][j]);
- }
- printf("\n");
- }
- printf("\n");
-
- //输入二维数组B的元素的值
- printf("请输入矩阵B的元素:");
- for (i = 0;i < P;i++)
- {
- for (j = 0;j < N;j++)
- {
- scanf("%d", &B[i][j]);
- }
- }
- printf("\n");
- //打印二维数组B的元素
- printf("矩阵B如下:\n");
- for (i = 0;i < P;i++)
- {
- for (j = 0;j < N;j++)
- {
- printf("%3d", B[i][j]);
- }
- printf("\n");
- }
- //数组相乘
- printf("\n矩阵A乘以矩阵B结果为:\n");
- for (i = 0;i < M;i++)
- {
- for (j = 0;j < N;j++)
- {
- for (k = 0;k < P;k++)
- {
- C[i][j] = C[i][j] + A[i][k] * B[k][j];
- }
- }
- }
- printf("\n");
- //数组C中的值分行显示
- for (i = 0;i < M;i++)
- {
- for (j = 0;j < N;j++)
- {
- printf("%5d", C[i][j]);
- }
- printf("\n");
- }
- system("pause");
- printf("\n");
- }
复制代码
|
|