自定义2个矩阵,求解矩阵相乘的结果。(要求矩阵的元素通过给定的代码随机生成)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int **init_matrix(int r, int c, int rmax)
{
int **p = (int **)malloc(r * sizeof(int *));
for (int i = 0; i < r; i++)
{
p[i] = (int *)malloc(c * sizeof(int));
for (int j = 0; j < c; j++)
{
p[i][j] = rand() % rmax; // 生成rmax以内随机数
}
}
return p;
}
void free_matrix(int **m, int r)
{
for (int i = 0; i < r; i++)
{
free(m[i]);
}
free(m);
}
int main()
{
int m, n, p, q;
printf("请输入第一个矩阵的维数(m*n):");
scanf("%d %d", &m, &n);
printf("请输入第二个矩阵的维数(p*q):");
scanf("%d %d", &p, &q);
if (n != p)
{
printf("两个矩阵维数不匹配,无法进行矩阵乘法!\n");
return -1;
}
int **m1 = init_matrix(m, n, 100);
int **m2 = init_matrix(p, q, 100);
int m3[m][q];
memset(m3, 0, sizeof(m3));
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
for (int k = 0; k < q; k++)
{
m3[i][k] += m1[i][j] * m2[j][k];
}
}
}
for (int i = 0; i < m; i++)
{
for (int j = 0; j < q; j++)
{
printf("%d ", m3[i][j]);
}
printf("\n");
}
free_matrix(m1, m);
free_matrix(m2, p);
return 0;
}
矩阵相乘有条件,按照矩阵相乘规则乘就好了嘛