C语言实现矩阵的乘法

矩阵乘法作为算法题我觉得对我来说是比较难想的,而且作为没学线性代数的我来说,这简直就是场灾难,在我研究了书上及网上的有关资料后,我觉得自己应该差不多可以理解矩阵乘法的要领了,希望可以帮助大家:其实矩阵的运算包括许多种,有加减乘除法等等。矩阵加法就是相同位置的数字加一下。在这里插入图片描述
矩阵减法也类似。在这里插入图片描述矩阵乘以一个常数,就是所有位置都乘以这个数。但是,等到矩阵乘以矩阵的时候,一切就不一样了。C语言实现矩阵的乘法_第1张图片首先让我们了解下矩阵乘法:矩阵乘法(英语:matrix multiplication)是一种根据两个矩阵得到第三个矩阵的二元运算,第三个矩阵即前两者的乘积,称为矩阵积*

它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义*

这个结果是怎么算出来的呢,来看下面这个题:
C语言实现矩阵的乘法_第2张图片

下面听我慢慢的分析一下:咱们先将第一个矩阵设为A,第二个为B,最后乘积得到的矩阵为C。

A中的第一行各个元素分别与B中第一列各个元素相乘得到的和即为C中的第一个元素(2×1+1×1=3)
A中的第一行各个元素分别与B中第二列各个元素相乘得到的和即为C中的第二个元素(2×2+1×0=4)
A中第一行已经计算完毕,现在应该为第二行了,C中也变为了第二行。
A中的第二行各个元素分别与B中第一列各个元素相乘得到的和即为C中的第三个元素(4×1+3×1=7)A中的第二行各个元素分别与B中第二列各个元素相乘得到的和即为C中的第四个元素(4×2+3×0=8)

嗯~这就是矩阵乘法的概念了,遇到复杂的矩阵乘法也是采用此方法。但是,重要的问题来了,如何用C语言实现呢,其实我一开始就是了解了这个思路,让我写也是不会写的,要有多个循环嵌套。但是呢,只要努力想,成功总会来的。冲冲冲!

#includei
nt main(void)
{
  int a[10][10],b[10][10]; 
  int c[10][10]={0};//一定要记得初始化,不然系统会给你分配垃圾数据的哦!
   int e,f; //定义矩阵a的行列数  int g,h;//定义矩阵b的行列数               
   int i,j,k;
   scanf("%d %d",&e,&f);   
   for(i=0;i<e;i++)  for(j=0;j<f;j++)   
   scanf("%d",&a[i][j]);//输入a中各元素       
    scanf("%d %d",&g,&h);   
     for(i=0;i<g;i++)  for(j=0;j<h;j++)   
     scanf("%d",&b[i][j]);//输入b中各元素     
     if(f!=g) 
     printf("不可计算");//判断是否满足矩阵相乘的条件(a的列数与b的行数相等)   
     else 
     { 
      for(i=0;i<e;i++)//遍历c矩阵各行,其行数与a的行数相等    	                
      for(j=0;j<h;j++)//遍历c矩阵i行各列    
       for(k=0;k<f;k++)//用k循环累加和计算c[i][j]      
       c[i][j]+=a[i][k]*b[k][j];//遍历a矩阵各行与b矩阵各列  }      
       for(i=0;i<e;i++)
       {  
       for(j=0;j<h;j++)   
       printf("%d\n",c[i][j]);  
       } 
   } 

这就是矩阵乘法的代码了,需要我们认真思考才可以想到的哦,fighting!!!

你可能感兴趣的:(C语言,C语言,矩阵乘法)