阅读下面程序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。
利用矩阵相乘公式,编程计算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;
}