1、I 数 据 结 构数 据 结 构 课 程 设 计 说 明 书课 程 设 计 说 明 书 目目 录录 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 II 5.4 矩阵减法. 12 5.5 矩阵乘法. 12 5.6 退出及错误提示 .
2、13 6 总结 . 13 参考文献 . 14 1 1 1 问题描述问题描述 (1) 题目内容:设计稀疏矩阵运算系统实现两个稀疏矩阵的加法、减法、乘法以 及转置操作。 (2) 基本要求: 存储结构选择三元组存储方式; 实现一个稀疏矩阵的转置运算; 实现两个稀疏矩阵的加法运算; 实现两个稀疏矩阵的减法运算; 实现两个稀疏矩阵的乘法运算。 (3) 设计目的:通过本次课程设计,了解稀疏矩阵的一些基本运算操作,并通过 相关的程序代码实现。 2 2 需求分析需求分析 经过本次的课程设计,我认为稀疏矩阵运算系统主要实现的功能如下: (1) 建立矩阵:只有先建立了矩阵,才能够对矩阵进行运算操作,包括建立矩阵
3、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)等,下面会做进一步详细的介绍。 2 3 3 总体设计总体设计 3.1 Matrix 结构的定义 struct Matrix in
4、t H; /矩阵的行数 int L; /矩阵的列数 int fly; /矩阵中的非零元个数 int zhiMaxsizeMaxsize;/非零元值所在行所在列 ; 操作集合: (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(
5、Matrix M,Matrix N); /求积运算 A*B (6) int Max(int i,int j); /求最大值 (7) Matrix Zero(Matrix M); /矩阵所有元素赋值为 0 3 3.2 系统流程图 该运算系统的系统流程图如图 1 所示: 图 1 系统流程图 稀疏矩阵运算系统 输入矩阵 A 输入矩阵 B 矩 阵 A 的 转 置 矩 阵 A的 转置 A + B 矩 阵 B的 转 置 矩 阵 A的 转置 AB A * B B *A 退 出 4 4 4 详细设计详细设计 4.1 “菜单”界面 进入稀疏矩阵运算系统后的“菜单”界面如图 2 所示。 图 2 “菜单”界面 4.
6、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) /建立矩阵 5 coutM.L; coutM.fly; M=Zero(M); int h; int l; for(int n=1;nhl; if(hM.H|lM.L) / 行列输入错误提示 couthl; 6 coutM.zhihl; coutendl; return M; 注:该函数中调用的 Zero()函数的功能为将矩阵 M 根