c语言实现矩阵相乘

一、问题描述。

用动态二维数组的知识进行矩阵相乘。

二、设计思路。

1、申请两个动态二维数组。

2、输入两个矩阵的行数和列数。

3、如果满足前一个矩阵的列数等于第二个矩阵的行数,就让前一个矩阵的x行的第y个元素乘以后一个矩阵的x列的第y的元素。

4、以矩阵的形式输出。

三、程序流程图。

 

 

四、代码实现。

#include <stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int Ra, Ca, Rb, Cb;
int *p = NULL, *q = NULL, *y = NULL;
scanf("%d%d", &Ra, &Ca);
p = (int *)malloc((Ra*Ca)*sizeof(int));
if (p == NULL)
{
printf("没有足够空间!\n");
exit(1);
}
else
{
for (int i = 0; i < Ra; i++)
{
for (int j = 0; j < Ca; j++)
{
scanf("%d", p + i*Ca + j);
}
}
}
scanf("%d%d", &Rb, &Cb);
q = (int *)malloc((Rb*Cb)*sizeof(int));
if (q == NULL)
{
printf("没有足够空间!\n");
exit(1);
}
else
{
for (int i = 0; i < Rb; i++)
{
for (int j = 0; j < Cb; j++)
{
scanf("%d", q + i*Cb + j);
}
}
}
if (Ca != Rb)
{
printf("Error: %d != %d", Ca, Rb);
}
else
{
y = (int *)calloc((Ra*Cb), sizeof(int));
if (y == NULL)
{
printf("没有足够空间!\n");
exit(1);
}
else
{
printf("%d %d", Ra, Cb);
printf("\n");
for (int i = 0; i < Ra; i++)
{
for (int j = 0; j < Cb; j++)
{
for (int k = 0; k < Ca; k++)
{
*(y + i*Cb + j) += *(p + i*Ca + k)* *(q + k*Cb + j);
}
if (j < Cb - 1)
{
printf("%d ", *(y + i*Cb + j));
}
else if (j == Cb - 1)
{
printf("%d", *(y + i*Cb + j));
}
}
printf("\n");
}
}
}
free(q);
free(p);
free(y);
return 0;
}

 

posted @ 2023-04-14 17:53  liuxuechao  阅读(844)  评论(0编辑  收藏  举报