第9题:
问答题
请根据以下各小题的要求设计C应用程序(包括界面和代码)。
请编写函数fun(),它的功能是:将3行4列矩阵x乘以4行3列矩阵y,结果放在3行3列矩阵xy中。矩阵相乘的基本方法是:矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘的和。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序如下:
#include
#include
void fun(int a[3][4],int b[4][3],int ab[3][3])
{
}
main()
{
int x[3][4] = {{1,0,1,1}, {2,1,0,1}, {1,2,0,3}};
int y[4][3] = {{1,1,1}, {0,0,0}, {2,1,1}, {1,1,3}};
int xy[3][3] = {0},i,j;
fun(x,y,xy);
printf(a × b = ab:(3,3):);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf(%d,xy[i][j]);
printf();
}
}
正确答案:
void fun(int a[3][4],int b[4][3],int ab[3][3])
{
int j,k,l;
for(k=0;k<3;k++)
for(l=0;l<3;l++)
for(j=0;j<4;j++)
ab[k][l]+=a[k][j]*b[j][l];
}
解析:
本题首先要明确矩阵xy中行列下标分别为i,j的元素的值,是矩阵x中第i行上4个元素与矩阵y第j列上4个元素对应相乘再相加的和。因此,每个元素的求解是循环控制来实现的,即ab[k][l]+=a[k][j]*b[j][l],矩阵ab的每个元素的表示可用一个二重循环,整个函数是一个三重循环的嵌套。