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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了