C语言实现矩阵相乘:动态数组应用
C语言实现矩阵相乘:动态数组应用
题目描述
使用C语言编写程序,实现矩阵相乘运算。输入矩阵、输出矩阵、矩阵相乘的功能均需各写成一个函数!!!设第1个矩阵为a,行数和列数分别为n、p;第2个矩阵为b行数和列数分别为p,m,它们的乘积矩阵为c,行数和列数分别为n、m。c的i行j列的元素c(i,j)的计算规则为: c(i,j)=a(i,1)*b(1,j)+a(i,2)*b(2,j)+...+a(i,p)*b(p,j), i=1,...,n;j=1,...,m
输入格式
第1行输入三个整数分别表示n、p、m 后面按行输入第1个矩阵和第2个矩阵。
输出格式
乘积矩阵,按行输出,行中数据用一个空格隔开,末尾无空格。
注意
数组的大小,根据输入的n、p、m动态申请!!! 注意适时释放。
输入输出样例
输入
4 3 2
5 2 4
3 8 2
6 0 4
0 1 6
2 4
1 3
3 2
输出
24 34
20 40
24 32
19 15
解题思路
这道题目需要我们实现矩阵的输入、输出、矩阵的乘法。 矩阵的乘法很容易实现,但是我们需要动态申请数组空间。
解题步骤
- 读入n、p、m
- 申请a,b,c矩阵空间,注意这里使用动态数组
- 读入矩阵a,b
- 矩阵c的计算
- 输出矩阵c
- 释放动态数组空间
代码如下
#include <stdio.h>
#include <stdlib.h>
void input_matrix(int **matrix, int row, int col) {
*matrix = (int *)malloc(row * col * sizeof(int));
if (*matrix == NULL) {
printf("内存分配失败!");
exit(1);
}
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
scanf("%d", (*matrix + i * col + j));
}
}
}
void output_matrix(int *matrix, int row, int col) {
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
printf("%d ", *(matrix + i * col + j));
}
printf("\n");
}
}
void matrix_multiply(int *a, int *b, int **c, int n, int p, int m) {
*c = (int *)malloc(n * m * sizeof(int));
if (*c == NULL) {
printf("内存分配失败!");
exit(1);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
(*c + i * m + j) = 0;
for (int k = 0; k < p; k++) {
(*c + i * m + j) += *(a + i * p + k) * *(b + k * m + j);
}
}
}
}
int main() {
int n, p, m;
int *a, *b, *c;
scanf("%d %d %d", &n, &p, &m);
input_matrix(&a, n, p);
input_matrix(&b, p, m);
matrix_multiply(a, b, &c, n, p, m);
output_matrix(c, n, m);
free(a);
free(b);
free(c);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/nwHh 著作权归作者所有。请勿转载和采集!