#include <stdio.h>
#include <stdlib.h>
// 矩阵乘法函数
void multiplyMatrices(int m, int n, int p, int** A, int** B, int** C) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
C[i][j] = 0; // 初始化结果矩阵的元素为0
for (int k = 0; k < n; k++) {
C[i][j] += A[i][k] * B[k][j]; // 进行矩阵乘法
}
}
}
}
// 分配二维数组内存
int** allocateMatrix(int rows, int cols) {
int** matrix = (int**)malloc(rows * sizeof(int*));
if (matrix == NULL) {
fprintf(stderr, "Memory allocation failed\n");
exit(EXIT_FAILURE);
}
for (int i = 0; i < rows; i++) {
matrix[i] = (int*)malloc(cols * sizeof(int));
if (matrix[i] == NULL) {
fprintf(stderr, "Memory allocation failed\n");
// 释放已经分配的内存
for (int j = 0; j < i; j++) {
free(matrix[j]);
}
free(matrix);
exit(EXIT_FAILURE);
}
}
return matrix;
}
// 释放二维数组内存
void freeMatrix(int** matrix, int rows) {
for (int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
}
int main() {
int m = 2, n = 3, p = 2;
// 分配内存给矩阵
int** A = allocateMatrix(m, n);
int** B = allocateMatrix(n, p);
int** C = allocateMatrix(m, p);
// 初始化矩阵 A
int A_values[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
A[i][j] = A_values[i][j];
}
}
// 初始化矩阵 B
int B_values[3][2] = {
{7, 8},
{9, 10},
{11, 12}
};
for (int i = 0; i < n; i++) {
for (int j = 0; j < p; j++) {
B[i][j] = B_values[i][j];
}
}
// 调用矩阵乘法函数
multiplyMatrices(m, n, p, A, B, C);
// 打印结果矩阵
printf("Resultant matrix:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < p; j++) {
printf("%d ", C[i][j]);
}
printf("\n");
}
// 释放矩阵内存
freeMatrix(A, m);
freeMatrix(B, n);
freeMatrix(C, m);
return 0;
}
C语言矩阵乘法
最新推荐文章于 2024-10-04 10:12:43 发布