两个n阶矩阵相乘c语言
时间: 2024-05-15 19:16:15 浏览: 163
C语言实现两个矩阵相乘
以下是两个n阶矩阵相乘的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("请输入矩阵的阶数n:");
scanf("%d", &n);
int **a, **b, **c; // 定义三个二维数组,存储矩阵
a = (int **)malloc(n * sizeof(int *));
b = (int **)malloc(n * sizeof(int *));
c = (int **)malloc(n * sizeof(int *));
for (int i = 0; i < n; i++) {
a[i] = (int *)malloc(n * sizeof(int));
b[i] = (int *)malloc(n * sizeof(int));
c[i] = (int *)malloc(n * sizeof(int));
}
printf("请输入第一个矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
printf("请输入第二个矩阵:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &b[i][j]);
}
}
printf("结果矩阵为:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
c[i][j] = 0;
for (int k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
printf("%d ", c[i][j]);
}
printf("\n");
}
// 释放内存
for (int i = 0; i < n; i++) {
free(a[i]);
free(b[i]);
free(c[i]);
}
free(a);
free(b);
free(c);
return 0;
}
```
代码解释:
1. 首先输入矩阵的阶数n。
2. 定义三个二维数组a、b、c,分别存储两个输入的矩阵和相乘的结果矩阵。
3. 通过循环输入两个矩阵的各个元素。
4. 通过三重循环计算两个矩阵相乘的结果,并输出结果矩阵。
5. 最后释放动态分配的内存。
注意事项:
1. 需要动态分配二维数组的内存,否则会出现错误。
2. 两个矩阵相乘的条件是第一个矩阵的列数等于第二个矩阵的行数,否则无法相乘。
3. 在计算结果矩阵的过程中,需要先将结果矩阵的元素全部初始化为0,否则会出现错误。
阅读全文