设计要求:设计实现抽象数据类型“矩阵”,要求动态分配内存,基本操作包括:矩阵的初始化,输出矩阵的行数、输出矩阵的列数、输出矩阵中的Aij,矩阵的加法,矩阵的乘法,遍历矩阵。用C语言写一个
时间: 2024-10-13 11:01:03 浏览: 53
在C语言中,我们可以设计一个矩阵抽象数据类型(MAT)来满足上述需求。首先,我们需要定义结构体表示矩阵,并提供相关的函数来完成各种操作。这里是一个简单的示例:
```c
#include <stdlib.h>
#include <stdio.h>
// 定义矩阵结构体
typedef struct {
int rows;
int cols;
double** data; // 动态分配的二维数组
} Matrix;
// 初始化矩阵
Matrix* matrix_init(int rows, int cols) {
Matrix* mat = (Matrix*)malloc(sizeof(Matrix));
mat->rows = rows;
mat->cols = cols;
// 动态分配内存
mat->data = (double**)calloc(rows, sizeof(double *));
for (int i = 0; i < rows; i++) {
mat->data[i] = (double*)calloc(cols, sizeof(double));
}
return mat;
}
// 输出矩阵信息
void print_matrix_info(Matrix* mat) {
printf("矩阵的行数: %d\n", mat->rows);
printf("矩阵的列数: %d\n", mat->cols);
printf("矩阵元素:\n");
for (int i = 0; i < mat->rows; i++) {
for (int j = 0; j < mat->cols; j++) {
printf("%.2f ", mat->data[i][j]);
}
printf("\n");
}
}
// 矩阵加法
Matrix* matrix_add(Matrix* mat1, Matrix* mat2) {
if (mat1->rows != mat2->rows || mat1->cols != mat2->cols) {
printf("无法相加,矩阵维度不匹配.\n");
return NULL;
}
Matrix* result = matrix_init(mat1->rows, mat1->cols);
for (int i = 0; i < mat1->rows; i++) {
for (int j = 0; j < mat1->cols; j++) {
result->data[i][j] = mat1->data[i][j] + mat2->data[i][j];
}
}
return result;
}
// 简单版本的矩阵乘法,仅适用于两个方阵
Matrix* matrix_multiply(Matrix* mat1, Matrix* mat2) {
if (mat1->cols != mat2->rows) {
printf("无法相乘,矩阵维度不兼容.\n");
return NULL;
}
Matrix* result = matrix_init(mat1->rows, mat2->cols);
for (int i = 0; i < mat1->rows; i++) {
for (int j = 0; j < mat2->cols; j++) {
double sum = 0;
for (int k = 0; k < mat1->cols; k++) {
sum += mat1->data[i][k] * mat2->data[k][j];
}
result->data[i][j] = sum;
}
}
return result;
}
// 遍历矩阵
void traverse_matrix(Matrix* mat) {
for (int i = 0; i < mat->rows; i++) {
for (int j = 0; j < mat->cols; j++) {
printf("%.2f ", mat->data[i][j]);
}
printf("\n");
}
}
// 清理内存
void free_matrix(Matrix* mat) {
for (int i = 0; i < mat->rows; i++) {
free(mat->data[i]);
}
free(mat->data);
free(mat);
}
int main() {
Matrix* mat1 = matrix_init(3, 3);
// ... 其他操作 ...
// 示例使用
print_matrix_info(mat1);
Matrix* mat2 = matrix_init(3, 3); // 另一个矩阵...
Matrix* result = matrix_add(mat1, mat2);
print_matrix_info(result);
Matrix* product = matrix_multiply(mat1, mat2);
print_matrix_info(product);
// 清理内存
free_matrix(mat1);
free_matrix(mat2);
free_matrix(result);
free_matrix(product);
return 0;
}
```
阅读全文
相关推荐


















