根据矩阵乘法的定义,只有A的列数与B的行数相同才能相乘,相乘所得的新矩阵C的行数等于A的行数,列数等于B的列数。
即:若A为mxn阶矩阵,B为nxs阶矩阵,则C=AB为mxs阶矩阵。
[
1
2
3
2
5
1
]
[
1
1
2
3
3
1
4
2
1
1
2
4
]
=
[
10
6
16
19
18
8
26
20
]
\begin{bmatrix}1 & 2 & 3\\2 & 5 & 1\end{bmatrix}\begin{bmatrix}1 & 1 & 2 & 3\\3 & 1 & 4 & 2\\1 & 1 & 2 & 4\end{bmatrix}=\begin{bmatrix}10 & 6 & 16 & 19\\18 & 8 & 26 & 20\end{bmatrix}
[122531]⎣⎡131111242324⎦⎤=[10186816261920]
#include<stdio.h>
main()
{
int A[2][3] = {{1,2,3}, {2,5,1}}; //A为2x3矩阵
int B[3][4] = {{1,1,2,3}, {3,1,4,2}, {1,1,2,4}}; //B为3x4矩阵
int C[2][4]; //B为2x4矩阵
int i,k,j;
for(i = 0; i < 2; i++) //i控制矩阵C的行
{
for(j = 0; j < 4; j++) //j控制矩阵C的列
{
int sum = 0;
for(k = 0; k < 3; k++) //k控制矩阵A的行,也就是B的列
sum = sum + A[i][k] * B[k][j];
C[i][j] = sum;
}
}
//打印A矩阵
printf("A矩阵为:\n");
for(i = 0; i < 2; i++)
{
for(k = 0; k < 3; k++)
printf("%d ", A[i][k]);
printf("\n");
}
//打印B矩阵
printf("B矩阵为:\n");
for(k = 0; k < 3; k++)
{
for(j = 0; j < 4; j++)
printf("%d ", B[k][j]);
printf("\n");
}
//打印矩阵C
printf("C矩阵为:\n");
for(i = 0; i < 2; i++)
{
for(j = 0; j < 4; j++)
printf("%d ", C[i][j]);
printf("\n");
}
}