[C语言]矩阵相乘填空:阅读下面程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 利用矩阵相乘公式,编程计算m×n阶矩阵A和n×m阶矩阵B之积。

阅读下面程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。
   利用矩阵相乘公式,编程计算m×n阶矩阵A和n×m阶矩阵B之积。

#include <stdio.h>
#define ROW 2
#define COL 3
/* 函数功能:计算矩阵相乘之积,结果存于二维数组c中 */
void MultiplyMatrix(int a[ROW][COL], int b[COL][ROW], int    ①   )
{
   int i, j, k;
   for(i = 0; i < ROW; i++)
   {
      for(j = 0; j < ROW; j++)
      {
         c[i][j] =    ②   ;
         for(k = 0; k < COL; k++)
         {
            c[i][j] =    ③   ;
         }
      }
   }
}
/* 函数功能:输出矩阵a中的元素 */
void PrintMatrix(int a[ROW][ROW])
{
   int i, j ;
   for(i = 0; i < ROW; i++)
   {
      for(j = 0; j < ROW; j++)
      {
         printf("%6d", a[i][j]);
      }
         ④   ;
   }
}
int main()
{
   int a[ROW][COL], b[COL][ROW], c[ROW][ROW], i, j;
   printf("Input 2*3 matrix a:\n");
   for(i = 0; i < ROW ;i++)
   {
      for(j = 0; j < COL; j++)
      {
         scanf("%d",    ⑤   );
      }
   }
   printf("Input 3*2 matrix b:\n");
   for(i = 0; i < COL; i++)
   {
      for(j = 0; j < ROW; j++)
      {
         scanf("%d",    ⑥   );
      }
   }
   MultiplyMatrix(   ⑦   );
   printf("Results:\n");
   PrintMatrix(c);
   return 0;
}

 ①空很简单,由MultiplyMatrix函数后部分的c矩阵可知,该空为函数参数,即结果矩阵

②可以填3个2项乘积之和,因为该函数为固定2x3矩阵与3x2矩阵乘积,但由于后面多了一层由参数K主导的迭代循环,且K<3,所以可知该函数求c矩阵各值的方法为叠加,所以②这里将值赋为0在以k主导的迭代里叠加

③ 叠加项索引的规律观察可得出,一个值横坐标不变,一个值纵坐标不变,两值剩下的一个坐标为k迭代参数,最后在总迭代下不变的纵坐标和横坐标依次增加,然后重新进行上述过程。

④由提示可知,该函数为输出a矩阵,则每输出三项则换行一次

 ⑤,⑥则为为a,b矩阵各位置赋值,所以分别为  a[i][j],b[i][j]

⑦由第一个函数可知,参数为第一个矩阵,第二个矩阵,结果矩阵 即:a,b,c

 综上,最终填完空的代码为:

#include <stdio.h>
#define ROW 2
#define COL 3
/* 函数功能:计算矩阵相乘之积,结果存于二维数组c中 */
void MultiplyMatrix(int a[ROW][COL], int b[COL][ROW], int c[ROW][ROW])
{
   int i, j, k;
   for(i = 0; i < ROW; i++)
   {
      for(j = 0; j < ROW; j++)
      {
         c[i][j] = 0;
         for(k = 0; k < COL; k++)
         {
            c[i][j] = c[i][j]+a[i][k]*b[k][j] ;
         }
      }
   }
}
/* 函数功能:输出矩阵a中的元素 */
void PrintMatrix(int a[ROW][ROW])
{
   int i, j ;
   for(i = 0; i < ROW; i++)
   {
      for(j = 0; j < ROW; j++)
      {
         printf("%6d", a[i][j]);
      }
        printf("\n")   ;
   }
}
int main()
{
   int a[ROW][COL], b[COL][ROW], c[ROW][ROW], i, j;
   printf("Input 2*3 matrix a:\n");
   for(i = 0; i < ROW ;i++)
   {
      for(j = 0; j < COL; j++)
      {
         scanf("%d", &a[i][j] );
      }
   }
   printf("Input 3*2 matrix b:\n");
   for(i = 0; i < COL; i++)
   {
      for(j = 0; j < ROW; j++)
      {
         scanf("%d", &b[i][j] );
      }
   }
   MultiplyMatrix( a,b,c );
   printf("Results:\n");
   PrintMatrix(c);
   return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值