声明:本代码能够实现用户任意输入m*n型的矩阵,并在符合条件下进行矩阵乘积运算。
一.矩阵乘积定义
矩阵乘积是两个矩阵相乘得到的新的矩阵。具体来说,如果A是一个m行k列的矩阵,B是一个k行n列的矩阵,那么它们的乘积C就是一个m行n列的矩阵,且C的第i行第j列的元素c(i,j)等于A的第i行的行向量与B的第j列的列向量的点积(内积)。
注:矩阵乘积存在的充要条件是,被乘矩阵的列数与乘数矩阵的行数相等。换言之,只有当第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时,才能进行矩阵乘法。
二.用C语言实现
1.定义矩阵
定义两个矩阵即定义两个二维数组,同时定义左矩阵的行数h1和列数l1,右矩阵的行数h2,列数l2。
两个矩阵分别为valueA,valueB。
int h1,l1,h2,l2;
int valueA[100][100];
int valueB[100][100];
2.输入具体矩阵
输入两个矩阵的行数和列数,并输入矩阵的所有数值。
矩阵的数值的输入采用for嵌套循环的方式。
printf("输入左矩阵的行数和列数:");
scanf("%d%d",&h1,&l1);
printf("请输入第一个矩阵:\n");
for (i=0;i<h1;i++)
{
for (j=0;j<l1;j++)
{
scanf("%d",&valueA[i][j]);
}
}
printf("\n输入右矩阵的行数和列数:");
scanf("%d%d",&h2,&l2);
printf("请输入第二个矩阵;\n");
for (int i=0;i<h2;i++)
{
for (int j=0;j<l2;j++)
{
scanf("%d",&valueB[i][j]);
}
}
(可忽略)3.矩阵的输出(用于检查)
将用户输入的矩阵进行输出操作,目的是检查输入的矩阵是否正确,更加直观。
printf("\n您输入的矩阵为: \n");
for (int i=0;i<h1;i++)
{
printf("\n");
for (int j=0;j<l1;j++)
{
printf("%5d",valueA[i][j]);
}
}
4.矩阵乘积
定义结果矩阵valueC,
在乘积运算时仍采用for循环的方式
代码如下:
int valueC[100][100]={{0}};
int a,b,c;
for(a=0;a<h1;a++)
{
for (b=0;b<l2;b++)
{
for (c=0;c<h2;c++)
valueC[a][b]+=valueA[a][c]*valueB[c][b];
}
}
注意:为了使矩阵的乘积有意义,要保证左矩阵的列数等于右矩阵的行数,因此采用if语句进行判断。
if(l1==h2)
{
}
三.全部代码
全部代码如下:
#include<stdio.h>
void main()
{
int i,j,h1,l1,h2,l2;
int valueA[100][100];
int valueB[100][100];
printf("输入左矩阵的行数和列数:");
scanf("%d%d",&h1,&l1);
printf("请输入第一个矩阵:\n");
for (i=0;i<h1;i++)
{
for (j=0;j<l1;j++)
{
scanf("%d",&valueA[i][j]);
}
}
printf("\n您输入的矩阵为: \n");
for (int i=0;i<h1;i++)
{
printf("\n");
for (int j=0;j<l1;j++)
{
printf("%5d",valueA[i][j]);
}
}
printf("\n输入右矩阵的行数和列数:");
scanf("%d%d",&h2,&l2);
printf("请输入第二个矩阵;\n");
for (int i=0;i<h2;i++)
{
for (int j=0;j<l2;j++)
{
scanf("%d",&valueB[i][j]);
}
}
printf("\n您输入的矩阵为: \n");
for (int i=0;i<h2;i++)
{
printf("\n");
for (int j=0;j<l2;j++)
{
printf("%5d",valueB[i][j]);
}
}
if(l1==h2)
{
int valueC[100][100]={{0}};
int a,b,c;
for(a=0;a<h1;a++)
{
for (b=0;b<l2;b++)
{
for (c=0;c<h2;c++)
valueC[a][b]+=valueA[a][c]*valueB[c][b];
}
}
printf("\n两个矩阵的乘积为:\n");
for (int i=0;i<h1;i++)
{
printf("\n");
for (int j=0;j<l2;j++)
{
printf("%5d",valueC[i][j]);
}
}
}
else{
printf("\n error!这两个矩阵无法进行乘积运算");
}
}
运行结果如下: