矩阵的乘法运算 数据结构C语言实验代码
时间: 2024-03-13 19:38:53 浏览: 24
以下是矩阵乘法的C语言实验代码,采用矩阵的三元组顺序表存储结构:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int row; //行下标
int col; //列下标
int e; //元素值
} Triple;
typedef struct {
Triple data[MAXSIZE]; //三元组表
int m, n, len; //行,列,非零元个数
} TSMatrix;
//创建稀疏矩阵
void CreateMatrix(TSMatrix *M) {
printf("请输入矩阵的行数、列数和非零元素个数:\n");
scanf("%d%d%d", &M->m, &M->n, &M->len);
printf("请输入矩阵的三元组:\n");
for (int i = 0; i < M->len; i++) {
scanf("%d%d%d", &M->data[i].row, &M->data[i].col, &M->data[i].e);
}
}
//打印稀疏矩阵
void PrintMatrix(TSMatrix M) {
int k = 0;
for (int i = 1; i <= M.m; i++) {
for (int j = 1; j <= M.n; j++) {
if (i == M.data[k].row && j == M.data[k].col) {
printf("%d ", M.data[k].e);
k++;
} else {
printf("0 ");
}
}
printf("\n");
}
}
//矩阵乘法
void MatrixMultiply(TSMatrix M1, TSMatrix M2, TSMatrix *M3) {
if (M1.n != M2.m) {
printf("矩阵无法相乘!\n");
exit(0);
}
int k = 0;
for (int i = 1; i <= M1.m; i++) {
for (int j = 1; j <= M2.n; j++) {
int sum = 0;
for (int p = 1; p <= M1.n; p++) {
int q = 0, r = 0;
while (q < M1.len && r < M2.len) {
if (M1.data[q].row == i && M1.data[q].col == p && M2.data[r].row == p && M2.data[r].col == j) {
sum += M1.data[q].e * M2.data[r].e;
q++;
r++;
} else if (M1.data[q].row == i && M1.data[q].col == p) {
q++;
} else if (M2.data[r].row == p && M2.data[r].col == j) {
r++;
} else {
q++;
r++;
}
}
}
if (sum != 0) {
M3->data[k].row = i;
M3->data[k].col = j;
M3->data[k].e = sum;
k++;
}
}
}
M3->m = M1.m;
M3->n = M2.n;
M3->len = k;
}
int main() {
TSMatrix M1, M2, M3;
printf("请输入矩阵1:\n");
CreateMatrix(&M1);
printf("请输入矩阵2:\n");
CreateMatrix(&M2);
MatrixMultiply(M1, M2, &M3);
printf("矩阵1:\n");
PrintMatrix(M1);
printf("矩阵2:\n");
PrintMatrix(M2);
printf("矩阵1和矩阵2的乘积:\n");
PrintMatrix(M3);
return 0;
}
```