c语言:输入一个2行3列的矩阵A和一个3行4列的矩阵B,计算两矩阵的乘积

如题所述

解题过程如下:

#include <stdio.h>;#include <stdlib.h>

#define L 2,#define M 3,#define N 4

}printf("\n");}return;}int main(void){double A[L][M] = {{0}};

double B[M][N] = {{0}};double C[L][N] = {{0}};int i = 0, j = 0, k = 0;

printf("\nGenerate A[%d][%d]:\n", L, M);

genArr(&A[0][0], L, M);

printMatrix(&A[0][0], L, M);

printf("\nGenerate B[%d][%d]:\n", M, N);

{for (k = 0; k < N; ++k)

{C[i][k] = 0;for (j = 0; j < M; ++j)

{C[i][k] += A[i][j] * B[j][k];}}}printf("\nCalc C[%d][%d]:\n", L, N);

printMatrix(&C[0][0], L, N);return 0;}


扩展资料

性质:

矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义  。

一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑地集中到了一起,所以有时候可以简便地表示一些复杂的模型,如电力系统网络模型。

当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

当提及“矩阵相乘”或者“矩阵乘法”的时候,并不是指代这些特殊的乘积形式,而是定义中所描述的矩阵乘法。在描述这些特殊乘积时,使用这些运算的专用名称和符号来避免表述歧义。

把给定的图转为邻接矩阵,即A(i,j)=1当且仅当存在一条边i->j。令C=A*A,那么C(i,j)=ΣA(i,k)*A(k,j),实际上就等于从点i到点j恰好经过2条边的路径数(枚举k为中转点)。

类似地,C*A的第i行第j列就表示从i到j经过3条边的路径数。同理,如果要求经过k步的路径数,只需要二分求出A^k即可。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-26
#include<stdio.h>
int main()
{
    int a[2][3];
    int b[3][4];
    int i,j,k,x,y,c[2][4];
printf("输入2*3 个数 以空格隔开:\n");
for(i=0;i<2;i++)
for(k=0;k<3;k++)
scanf("%d",&a[i][k]);
printf("输入3*4 个数 以空格隔开:\n");
for(i=0;i<3;i++)
for(k=0;k<4;k++)
scanf("%d",&b[i][k]);
for(i=0;i<2;i++){ //计算矩阵c的值 
for(j=0;j<4;j++){
c[i][j]=0;
for(k=0;k<3;k++){
c[i][j]+=a[i][k]*b[k][j];
}

}
}
              
    for(x=0;x<2;x++)
    {   
        for(y=0;y<4;y++)
            printf("%d\t",c[x][y]);
        printf("\n");
    }
    return 0;
}

本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网