数据结构实验一 —— 矩阵相乘算法
实验名称
矩阵相乘算法
实验内容
实现两个矩阵的相乘算法。
实验要求
- 输入要求:矩阵大小阶数及元素值可以在程序中固定。但最好不固定矩阵形式,从键盘输入矩阵阶数以及元素值。
- 输出要求:在屏幕上显示矩阵相乘的结果。
- 严格按照要求的文件命名方式进行命名,如个人文档命名:实验1-班级-学号-名字.doc。
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
问题描述
使用C语言编写代码实现两个矩阵的相乘算法,并将结果输出。
算法描述
代码
#define true 1
#define false 0
#include <malloc.h>
#include <stdio.h>
int IsAvailable(int line[], int column[]); //判断两个矩阵是否可相乘
void input(double *matrix, int line, int column); //输入矩阵
void output(double *matrix1, int line1, int column1, double *matrix2, int line2, int column2, double *matrix); //输出矩阵
int main()
{
int line[2], column[2];
do
{
printf("请输入矩阵A的行数和列数,输入完成后请换行以录入系统。\n");
scanf("%d%d", &line[0], &column[0]);
double *matrix1 = (double *)malloc(line[0] * column[0] * sizeof(double)); //利用一维数组模拟二维数组
printf("请输入矩阵A的元素,每行的元素以空格隔开,输入完每行数据后换行输入下一行\n");
input(matrix1, line[0], column[0]);
printf("请输入矩阵B的行数和列数,输入完成后请换行以录入系统。\n");
scanf("%d%d", &line[1], &column[1]);
double *matrix2 = (double *)malloc(line[1] * column[1] * sizeof(double)); //利用一维数组模拟二维数组
printf("请输入矩阵B的元素,每行的元素以空格隔开,输入完每行数据后换行输入下一行\n");
input(matrix2, line[1], column[1]);
if (IsAvailable(line, column) == false)
{
free(matrix1);
free(matrix2);
continue;
}
double *matrix = (double *)malloc(line[0] * column[1] * sizeof(double)); //矩阵乘积行数和矩阵A相同,列数和矩阵B相同
output(matrix1, line[0], column[0], matrix2, line[1], column[1], matrix);
free(matrix1);
free(matrix2);
free(matrix);
system("pause");
return 0;
} while (1);
}
int IsAvailable(int line[], int column[])
{
if (column[0] != line[1])
{
printf("矩阵A的列数不等于矩阵B的行数,无法进行相乘,请按任意键重新输入!\n");
system("pause");
return false;
}
else
return true;
}
void input(double *matrix, int line, int column)
{
for (int i = 0; i < line; ++i)
{
for (int j = 0; j < column; ++j)
{
scanf("%lf", &matrix[i * column + j]);
}
}
}
void output(double *matrix1, int line1, int column1, double *matrix2, int line2, int column2, double *matrix)
{
int line = line1;
int column = column2;
printf("矩阵A*矩阵B=\n");
for (int i = 0; i < line; ++i)
{
for (int j = 0; j < column; ++j)
{
matrix[i * column + j] = 0;
for (int k = 0; k < column1; ++k)
{
matrix[i * column + j] += matrix1[i * column1 + k] * matrix2[k * column2 + j];
}
printf("%lf ", matrix[i * column + j]);
}
printf("\n");
}
printf("程序执行完毕。\n");
}