用c加加实现一个函数multi,其可以实现两个任意大小的矩阵相乘,通过主函数调用该函数,并输出结果
时间: 2024-05-05 19:21:59 浏览: 91
用C语言实现任意矩阵的相乘
4星 · 用户满意度95%
以下是一个可能的实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
void multi(int **a, int **b, int **c, int m, int n, int p) {
// a: m*n 的矩阵
// b: n*p 的矩阵
// c: m*p 的矩阵,存放结果
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
c[i][j] = 0;
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
int main() {
int m, n, p;
printf("请输入矩阵a的行数、列数和矩阵b的列数:");
scanf("%d %d %d", &m, &n, &p);
// 动态分配内存
int **a = (int **) malloc(m * sizeof(int *));
int **b = (int **) malloc(n * sizeof(int *));
int **c = (int **) malloc(m * sizeof(int *));
for (int i = 0; i < m; i++) {
a[i] = (int *) malloc(n * sizeof(int));
c[i] = (int *) malloc(p * sizeof(int));
}
for (int i = 0; i < n; i++) {
b[i] = (int *) malloc(p * sizeof(int));
}
// 输入矩阵a和矩阵b
printf("请输入矩阵a:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
printf("请输入矩阵b:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < p; j++) {
scanf("%d", &b[i][j]);
}
}
// 计算矩阵c
multi(a, b, c, m, n, p);
// 输出矩阵c
printf("矩阵c为:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
printf("%d ", c[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < m; i++) {
free(a[i]);
free(c[i]);
}
for (int i = 0; i < n; i++) {
free(b[i]);
}
free(a);
free(b);
free(c);
return 0;
}
```
使用方法:
1. 编译上述代码,得到可执行文件。
2. 运行可执行文件。
3. 输入矩阵a的行数、列数和矩阵b的列数。
4. 输入矩阵a和矩阵b。
5. 输出矩阵c。
阅读全文