用C语言实现任意矩阵的乘积(m*n型矩阵乘积)

声明:本代码能够实现用户任意输入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!这两个矩阵无法进行乘积运算");
    }
}

 

运行结果如下: 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值