二级C语言 程序设计题

按题目要求编写完整功能代码,参考答案点击按钮展开

82程序设计题:两个矩阵相乘

编写函数 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。

← 上一题 下一题 →