1、基础实现
使用简单的嵌套循环来实现矩阵乘法。
#include <stdio.h>
#define ROW1 2
#define COL1 3
#define ROW2 3
#define COL2 2
void multiplyMatrices(int firstMatrix[ROW1][COL1], int secondMatrix[ROW2][COL2], int result[ROW1][COL2]) {
for (int i = 0; i < ROW1; ++i) {
for (int j = 0; j < COL2; ++j) {
result[i][j] = 0;
for (int k = 0; k < COL1; ++k) {
result[i][j] += firstMatrix[i][k] * secondMatrix[k][j];
}
}
}
}
void printMatrix(int matrix[ROW1][COL2]) {
for (int i = 0; i < ROW1; ++i) {
for (int j = 0; j < COL2; ++j) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int firstMatrix[ROW1][COL1] = {
{1, 2, 3},
{4, 5, 6}
};
int secondMatrix[ROW2][COL2] = {
{7, 8},
{9, 10},
{11, 12}
};
int result[ROW1][COL2];
multiplyMatrices(firstMatrix, secondMatrix, result);
printf("结果矩阵:\n");
printMatrix(result);
return 0;
}
2、使用动态内存分配
使用动态内存分配来处理任意大小的矩阵。
#include <stdio.h>
#include <stdlib.h>
void multiplyMatrices(int **firstMatrix, int **secondMatrix, int **result, int row1, int col1, int col2) {
for (int i = 0; i < row1; ++i) {
for (int j = 0; j < col2; ++j) {
result[i][j] = 0;
for (int k = 0; k < col1; ++k) {
result[i][j] += firstMatrix[i][k] * secondMatrix[k][j];
}
}
}
}
void printMatrix(int **matrix, int row, int col) {
for (int i = 0; i < row; ++i) {
for (int j = 0; j < col; ++j) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int row1 = 2, col1 = 3, row2 = 3, col2 = 2;
int **firstMatrix = (int **)malloc(row1 * sizeof(int *));
for (int i = 0; i < row1; i++)
firstMatrix[i] = (int *)malloc(col1 * sizeof(int));
int **secondMatrix = (int **)malloc(row2 * sizeof(int *));
for (int i = 0; i < row2; i++)
secondMatrix[i] = (int *)malloc(col2 * sizeof(int));
int **result = (int **)malloc(row1 * sizeof(int *));
for (int i = 0; i < row1; i++)
result[i] = (int *)malloc(col2 * sizeof(int));
// 初始化矩阵
int fm[2][3] = { {1, 2, 3}, {4, 5, 6} };
int sm[3][2] = { {7, 8}, {9, 10}, {11, 12} };
for (int i = 0; i < row1; i++)
for (int j = 0; j < col1; j++)
firstMatrix[i][j] = fm[i][j];
for (int i = 0; i < row2; i++)
for (int j = 0; j < col2; j++)
secondMatrix[i][j] = sm[i][j];
multiplyMatrices(firstMatrix, secondMatrix, result, row1, col1, col2);
printf("结果矩阵:\n");
printMatrix(result, row1, col2);
// 释放分配的内存
for (int i = 0; i < row1; i++)
free(firstMatrix[i]);
free(firstMatrix);
for (int i = 0; i < row2; i++)
free(secondMatrix[i]);
free(secondMatrix);
for (int i = 0; i < row1; i++)
free(result[i]);
free(result);
return 0;
}
3、使用函数指针传递矩阵
用函数指针传递矩阵参数,实现矩阵乘法。
#include <stdio.h>
void multiplyMatrices(int *firstMatrix, int *secondMatrix, int *result, int row1, int col1, int col2) {
for (int i = 0; i < row1; ++i) {
for (int j = 0; j < col2; ++j) {
*(result + i * col2 + j) = 0;
for (int k = 0; k < col1; ++k) {
*(result + i * col2 + j) += *(firstMatrix + i * col1 + k) * *(secondMatrix + k * col2 + j);
}
}
}
}
void printMatrix(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");
}
}
int main() {
int row1 = 2, col1 = 3, col2 = 2;
int firstMatrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int secondMatrix[3][2] = {
{7, 8},
{9, 10},
{11, 12}
};
int result[2][2];
multiplyMatrices((int *)firstMatrix, (int *)secondMatrix, (int *)result, row1, col1, col2);
printf("结果矩阵:\n");
printMatrix((int *)result, row1, col2);
return 0;
}