矩阵乘积的C语言实现
矩阵乘法是线性代数中的基本运算,在C语言中可以通过嵌套循环来实现,下面我将提供一个完整的矩阵乘法实现,包括详细的解释。

(图片来源网络,侵删)
基本概念
两个矩阵A(m×n)和B(n×p)相乘,结果矩阵C(m×p)的每个元素C[i][j]计算公式为:
C[i][j] = Σ (A[i][k] * B[k][j]) for k = 0 to n-1
C语言实现
#include <stdio.h>
// 函数声明
void matrixMultiply(int A[][100], int B[][100], int C[][100], int m, int n, int p);
void printMatrix(int matrix[][100], int rows, int cols);
int main() {
int m, n, p;
// 输入矩阵A的维度
printf("请输入矩阵A的行数和列数(m n): ");
scanf("%d %d", &m, &n);
// 输入矩阵B的维度
printf("请输入矩阵B的列数(p): ");
scanf("%d", &p);
int A[100][100], B[100][100], C[100][100];
// 输入矩阵A
printf("请输入矩阵A的元素(%d×%d):\n", m, n);
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &A[i][j]);
}
}
// 输入矩阵B
printf("请输入矩阵B的元素(%d×%d):\n", n, p);
for (int i = 0; i < n; i++) {
for (int j = 0; j < p; j++) {
scanf("%d", &B[i][j]);
}
}
// 计算矩阵乘积
matrixMultiply(A, B, C, m, n, p);
// 输出结果矩阵C
printf("\n矩阵乘积C = A × B:\n");
printMatrix(C, m, p);
return 0;
}
// 矩阵乘法函数
void matrixMultiply(int A[][100], int B[][100], int C[][100], int m, int n, int 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];
}
}
}
}
// 打印矩阵函数
void printMatrix(int matrix[][100], int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d\t", matrix[i][j]);
}
printf("\n");
}
}
代码说明
-
输入处理:
- 程序首先要求用户输入两个矩阵的维度
- 然后逐个输入矩阵A和矩阵B的元素
-
矩阵乘法计算:
matrixMultiply函数实现了三重嵌套循环来计算矩阵乘积- 最外层循环遍历结果矩阵的行
- 中间层循环遍历结果矩阵的列
- 最内层循环执行实际的点积计算
-
结果输出:
(图片来源网络,侵删)printMatrix函数用于格式化输出矩阵- 结果矩阵C的维度为m×p
优化考虑
-
内存优化:
- 对于非常大的矩阵,可以考虑动态内存分配
- 可以使用一维数组模拟二维数组以减少内存开销
-
性能优化:
- 可以尝试循环展开或并行化计算
- 对于稀疏矩阵,可以使用特殊的数据结构存储非零元素
-
错误处理:
- 可以添加维度检查,确保矩阵A的列数等于矩阵B的行数
- 可以添加输入验证,防止无效输入
示例运行
假设输入:
请输入矩阵A的行数和列数(m n): 2 3
请输入矩阵B的列数(p): 2
请输入矩阵A的元素(2×3):
1 2 3
4 5 6
请输入矩阵B的元素(3×2):
7 8
9 10
11 12
输出:
矩阵乘积C = A × B:
58 64
139 154
这个实现涵盖了矩阵乘法的基本功能,可以根据具体需求进行扩展和优化。
