按题目要求编写完整功能代码,参考答案点击按钮展开
编写函数 fun,计算 M×N 矩阵 a 与 N×K 矩阵 b 的乘积,存入 M×K 矩阵 c。例如 a=[[1,2],[3,4]], b=[[5,6],[7,8]],则 c=[[19,22],[43,50]]。
#include <stdio.h>
#define M 2
#define N 2
#define K 2
/* 函数功能:计算 M×N 矩阵 a 与 N×K 矩阵 b 的乘积,
结果存入 M×K 矩阵 c。请在下方编写 fun 函数体。 */
void fun(int a[][N], int b[][K], int c[][K])
{
/* 请在这里编写代码 */
}
int main()
{
int a[M][N] = {{1,2},{3,4}};
int b[N][K] = {{5,6},{7,8}};
int c[M][K], i, j;
fun(a, b, c);
for(i=0; i<M; i++)
{
for(j=0; j<K; j++) printf("%d ", c[i][j]);
printf("\n");
}
return 0;
}
void fun(int a[][N], int b[][K], int c[][K])
{
int i, j, k;
for(i=0; i<M; i++)
{
for(j=0; j<K; j++)
{
c[i][j] = 0;
for(k=0; k<N; k++)
{
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
考点:矩阵乘法 + 三重循环。c[i][j] = Σ a[i][k]*b[k][j](k 从 0 到 N-1)。三层循环:i 遍历 a 的行,j 遍历 b 的列,k 做内积累加。关键:c[i][j] 必须先清零再累加,否则是随机值。矩阵乘法要求 a 的列数 = b 的行数(都是 N),结果 c 是 M×K。