数 据 结 构
课 程 设 计 说 明 书
目
录
1 问题描述 ............................................... 1
2 需求分析 ............................................... 1
3 总体设计 ............................................... 2
3.1 Matrix 结构的定义 ..................................2
3.2 系统流程图 ........................................ 3
4 详细设计 ............................................... 4
4.1 “菜单”界面 ...................................... 4
4.2 建立矩阵 .......................................... 4
4.3 显示矩阵 .......................................... 6
4.4 矩阵的转置 ........................................ 7
4.5 矩阵的加法运算 .................................... 8
4.6 矩阵的减法运算 .................................... 9
4.7 矩阵的乘法运算 .................................... 9
5 程序运行 .............................................. 11
5.1 输入矩阵 ......................................... 11
5.2 矩阵转置 ......................................... 11
5.3 矩阵加法 ......................................... 12
I
5.4 矩阵减法 ......................................... 12
5.5 矩阵乘法 ......................................... 12
5.6 退出及错误提示 ................................... 13
6 总结 .................................................. 13
参考文献 ................................................ 14
II
1 问题描述
(1) 题目内容:设计稀疏矩阵运算系统实现两个稀疏矩阵的加法、减法、乘法以
及转置操作。
(2) 基本要求:
1 存储结构选择三元组存储方式;
2 实现一个稀疏矩阵的转置运算;
3 实现两个稀疏矩阵的加法运算;
4 实现两个稀疏矩阵的减法运算;
5 实现两个稀疏矩阵的乘法运算。
(3) 设计目的:通过本次课程设计,了解稀疏矩阵的一些基本运算操作,并通过
相关的程序代码实现。
2 需求分析
经过本次的课程设计,我认为稀疏矩阵运算系统主要实现的功能如下:
(1) 建立矩阵:只有先建立了矩阵,才能够对矩阵进行运算操作,包括建立矩阵
A 和矩阵 B;
(2) 转置运算操作:对矩阵 A 或者矩阵 B 进行转置运算,输出相应的转置矩阵;
(3) 四则运算操作:该步骤由两个矩阵同时参与,对其进行加法运算(A+B)、减
法运算(A-B)以及乘法运算(A*B 和 B*A);
(4) 退出:当做完矩阵的运算操作之后,就可以点击它退出该界面。
在这次设计中用到了一些变量和函数,例如:void Display(Matrix M);int
Max(int i,int j);Matrix Zero(Matrix M)等,下面会做进一步详细的介绍。
1
3 总体设计
3.1 Matrix 结构的定义
struct Matrix{
int H;
//矩阵的行数
int L;
//矩阵的列数
int fly;
//矩阵中的非零元个数
int zhi[Maxsize][Maxsize];//非零元值[所在行][所在列]
};
操作集合:
(1) Matrix Enter(Matrix M); //建立矩阵 M
(2) void Display(Matrix M); //显示矩阵 M
(3) void Transpose(Matrix M);
//M 矩阵的转置
(4) void Add(Matrix M,Matrix N);
//求和运算 A+B
(5) void Sub(Matrix M,Matrix N);
//求差运算 A-B
(5) void Multi(Matrix M,Matrix N); //求积运算 A*B
(6) int Max(int i,int j);
//求最大值
(7) Matrix Zero(Matrix M);
//矩阵所有元素赋值为 0
2
3.2 系统流程图
该运算系统的系统流程图如图 1 所示:
稀疏矩阵运算系统
输入矩阵 A
输入矩阵 B
A + B
A-B
A * B
B *A
矩 阵
B 的
转 置
矩 阵
A 的
转 置
退 出
图 1 系统流程图
3
4 详细设计
4.1 “菜单”界面
进入稀疏矩阵运算系统后的“菜单”界面如图 2 所示。
图 2 “菜单”界面
4.2 建立矩阵
矩阵在建立之后才能够进行运算操作,建立矩阵 A 和矩阵 B,调用函数
Enter(M),首先根据所输入的矩阵 M 的行数 H 和列数 L,建立 H*L 的矩阵 M,
并且调用函数 Zero(M)将其所有元素均赋值为 0;其次再根据所输入矩阵 M
的非零元个数 fly 做循环控制变量,按提示输入非零元所在的行 h 和列 l 以
及非零元的值,如果输入的行 h 或者列 l 大于矩阵 M 的行 H 或列 L,则提示
输入错误;最后将非零元的值保存在矩阵 M 中的相应位置。程序如下:
Matrix Enter(Matrix M)
//建立矩阵
{
4
cout<<"请输入矩阵的行数和列数:";
cin>>M.H>>M.L;
cout<<"请输入矩阵的非零元个数:";
cin>>M.fly;
cout<(M.H*M.L))
{
}
cout<<"非零元个数多于矩阵元素总数,请重新输入!"<>M.fly;
M=Zero(M);
int h;
int l;
for(int n=1;n<=M.fly;n++)
//输入非零元所在的行、列和值
{
cout<<"请输入第"<>h>>l;
if(h>M.H||l>M.L) // 行列输入错误提示
{
}
cout<<"行列输入错误,请重新输入:"<>h>>l;
5
cout<<"请输入该非零元的值:";
cin>>M.zhi[h][l];
cout<