c语言从键盘输入两个n阶方阵,请输出这两个方阵乘运算后的方阵
时间: 2024-11-03 10:19:15 浏览: 18
在 C 语言中,实现两个 n 级方阵相乘,你需要首先创建一个临时数组来存储结果,并利用嵌套循环计算每一个元素。由于乘法不是原地操作,需要额外的空间。以下是一个基本示例,假设用户通过键盘输入整数矩阵:
```c
#include <stdio.h>
#include <stdlib.h> // 需要使用 malloc 和 free 动态分配内存
// 定义矩阵结构体
typedef struct {
int size;
int **data;
} Matrix;
// 创建矩阵函数
Matrix* create_matrix(int size) {
Matrix *matrix = (Matrix*)malloc(sizeof(Matrix));
matrix->size = size;
matrix->data = (int**)malloc(size * sizeof(int *));
for (int i = 0; i < size; i++) {
matrix->data[i] = (int*)malloc(size * sizeof(int));
}
return matrix;
}
// 输入矩阵函数
void input_matrix(Matrix *matrix) {
int size;
scanf("%d", &size);
matrix->size = size;
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
scanf("%d", &matrix->data[i][j]);
}
}
}
// 计算并输出矩阵乘法的结果
void multiply_matrices(Matrix *matrix1, Matrix *matrix2, Matrix *result) {
if (matrix1->size != matrix2->size || matrix1->size == 0) {
printf("Error: Matrices cannot be multiplied.\n");
return;
}
result->size = matrix1->size;
result->data = create_matrix(result->size);
for (int i = 0; i < result->size; i++) {
for (int j = 0; j < result->size; j++) {
int sum = 0;
for (int k = 0; k < matrix1->size; k++) {
sum += matrix1->data[i][k] * matrix2->data[k][j];
}
result->data[i][j] = sum;
}
}
printf("Resultant matrix:\n");
display_matrix(result);
}
// 输出矩阵函数
void display_matrix(Matrix *matrix) {
for (int i = 0; i < matrix->size; i++) {
for (int j = 0; j < matrix->size; j++) {
printf("%d ", matrix->data[i][j]);
}
printf("\n");
}
}
// 主函数
int main() {
Matrix matrix1, matrix2, result;
input_matrix(&matrix1);
input_matrix(&matrix2);
multiply_matrices(&matrix1, &matrix2, &result);
free_matrix(&result); // 清理临时结果矩阵空间
free_matrix(&matrix1);
free_matrix(&matrix2);
return 0;
}
// 辅助函数:释放矩阵数据
void free_matrix(Matrix *matrix) {
if (matrix && matrix->data) {
for (int i = 0; i < matrix->size; i++) {
free(matrix->data[i]);
}
free(matrix->data);
free(matrix);
}
}
//
阅读全文