3.3 KiB
3.3 KiB
C 程序:相乘两个矩阵
原文:https://overiq.com/c-examples/c-program-to-multiply-two-matrices/
最后更新于 2020 年 9 月 23 日
下面是一个 C 程序,用来相乘两个矩阵:
/******************************************
Program to multiply two matrices
******************************************/
#include<stdio.h> // include stdio.h
#define ROW1 2
#define COL1 2
#define ROW2 COL1
#define COL2 3
int main()
{
int i, j, arr1[ROW1][COL1],
arr2[ROW2][COL2],
arr3[ROW1][COL2];
printf("Enter first matrix (%d x %d): \n", ROW1, COL1);
// input first matrix
for(i = 0; i < ROW1; i++)
{
for(j = 0; j < COL1; j++)
{
scanf("%d", &arr1[i][j]);
}
}
printf("\nEnter second matrix (%d x %d): \n", ROW2, COL2);
// input second matrix
for(i = 0; i < ROW2; i++)
{
for(j = 0; j < COL2; j++)
{
scanf("%d", &arr2[i][j]);
}
}
printf("\narr1 * arr2 = ");
// multiply two matrices
for(i = 0; i < ROW1; i++)
{
for(j = 0; j < COL2; j++)
{
arr3[i][j] = 0;
for(int k = 0; k < COL1; k++)
{
arr3[i][j] += arr1[i][k] * arr2[k][j];
}
}
printf("\n");
}
// print the result
for(i = 0; i < ROW2; i++)
{
for(j = 0; j < COL2; j++)
{
printf("%d ", arr3[i][j]);
}
printf("\n");
}
// signal to operating system everything works fine
return 0;
}
预期输出:
Enter first matrix (2 x 2):
2 3
4 5
Enter second matrix (2 x 3):
6 4 2
7 8 9
arr1 * arr2 =
33 32 31
59 56 53
它是如何工作的
只有当第一个矩阵的列数等于第二个矩阵的行数时,两个矩阵才能相乘。
设,A为大小为2x3的矩阵,B为大小为3x2的矩阵,则,A * B由下式给出:
\左(\ begin { array } { CCC } a&b&c \ \ d&e&f \ end { array } \右)* \左(\ begin { array } { cc } g&h \ \ k&l \ \ o&p \ end { array } \右)= \左(\ begin { array } { cc } a * g+b * k+c * o&a * h+b * l+c * p \ \ d * g+o
一般来说,如果矩阵`A`的大小是`m x n`,`B`的大小是`n x p`,那么矩阵`A * B`的大小就是`m x p`。
以下是该程序的工作原理:
1. 第一个 for 循环(第 20-26 行)要求用户输入第一个矩阵。
2. 第二个 for 循环(第 31-37 行)要求用户输入第二个矩阵。
3. 第三个 for 循环(第 42-55 行)将矩阵相乘。
4. 第四个 for 循环(第 58-65 行)打印矩阵乘法的结果。
* * *
**推荐阅读:**
* [C 程序求数组中最大最小元素](/c-examples/c-program-to-find-the-maximum-and-minimum-element-in-the-array/)
* [反转数组元素的程序](/c-examples/c-program-to-reverse-the-elements-of-an-array/)
* [对数组元素求和的程序](/c-examples/c-program-to-sum-the-elements-of-an-array/)
* [C 程序求数组中奇偶元素的个数](/c-examples/c-program-to-find-the-count-of-even-and-odd-elements-in-the-array/)
* [C 程序添加两个加法矩阵](/c-examples/c-program-to-add-two-matrices/)
* * *
* * *