在C语言中,可以使用动态分配内存的方法来创建动态矩阵,并通过遍历矩阵的行和列,进行矩阵相乘的操作。
以下是一个示例代码,用于实现两个动态矩阵的相乘:
#include <stdio.h>
#include <stdlib.h>
// 函数声明
int** createMatrix(int rows, int cols);
void multiplyMatrix(int** mat1, int** mat2, int** result, int rows1, int cols1, int cols2);
void printMatrix(int** mat, int rows, int cols);
void freeMatrix(int** mat, int rows);
int main() {
int rows1, cols1, rows2, cols2;
// 输入矩阵1和矩阵2的行列数
printf("Enter the number of rows for matrix 1: ");
scanf("%d", &rows1);
printf("Enter the number of columns for matrix 1: ");
scanf("%d", &cols1);
printf("Enter the number of rows for matrix 2: ");
scanf("%d", &rows2);
printf("Enter the number of columns for matrix 2: ");
scanf("%d", &cols2);
// 检查矩阵是否可以相乘
if (cols1 != rows2) {
printf("Error: Invalid matrix sizes for multiplication.");
return 0;
}
// 创建矩阵1,矩阵2和结果矩阵
int** matrix1 = createMatrix(rows1, cols1);
int** matrix2 = createMatrix(rows2, cols2);
int** result = createMatrix(rows1, cols2);
// 输入矩阵1的元素
printf("Enter the elements of matrix 1:\n");
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < cols1; j++) {
scanf("%d", &matrix1[i][j]);
}
}
// 输入矩阵2的元素
printf("Enter the elements of matrix 2:\n");
for (int i = 0; i < rows2; i++) {
for (int j = 0; j < cols2; j++) {
scanf("%d", &matrix2[i][j]);
}
}
// 执行矩阵相乘操作
multiplyMatrix(matrix1, matrix2, result, rows1, cols1, cols2);
// 打印结果矩阵
printf("Resultant matrix after multiplication:\n");
printMatrix(result, rows1, cols2);
// 释放内存
freeMatrix(matrix1, rows1);
freeMatrix(matrix2, rows2);
freeMatrix(result, rows1);
return 0;
}
// 创建动态矩阵
int** createMatrix(int rows, int cols) {
int** mat = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
mat[i] = (int*)malloc(cols * sizeof(int));
}
return mat;
}
// 执行矩阵相乘操作
void multiplyMatrix(int** mat1, int** mat2, int** result, int rows1, int cols1, int cols2) {
for (int i = 0; i < rows1; i++) {
for (int j = 0; j < cols2; j++) {
result[i][j] = 0;
for (int k = 0; k < cols1; k++) {
result[i][j] += mat1[i][k] * mat2[k][j];
}
}
}
}
// 打印矩阵
void printMatrix(int** mat, int rows, int cols) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", mat[i][j]);
}
printf("\n");
}
}
// 释放动态矩阵内存
void freeMatrix(int** mat, int rows) {
for (int i = 0; i < rows; i++) {
free(mat[i]);
}
free(mat);
}
此代码中,通过 createMatrix
函数动态分配了矩阵所需的内存空间,通过 multiplyMatrix
函数计算矩阵相乘的结果,通过 printMatrix
函数打印结果矩阵,通过 freeMatrix
函数释放动态分配的内存空间。
请注意,此示例仅实现了矩阵相乘的基本功能,你可以根据实际需求进行扩展和优化。同时,此示例没有提及腾讯云的相关产品,如需了解腾讯云的相关产品,请参考腾讯云官方文档。
领取专属 10元无门槛券
手把手带您无忧上云