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即可。
#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;
}