目 录
1 课题描述................................................................... 1 2 设计要求................................................................... 2
2.1设计要求 ............................................................. 2 2.2各模块程序的伪码算法 ................................................. 2 2.2各模块之间的调用关系图 ............................................... 2 3 模块内的核心算法及流程图 ................................................... 3
3.1构建任意矩阵 ......................................................... 3
3.1.1构建矩阵代码 ................................................... 4 3.2判断矩阵是否对称 ..................................................... 4
3.2.1判断矩阵是否对称代码 ........................................... 6 3.3 对对称矩阵进行压缩存储 ............................................... 6
3.3.1 对对称矩阵进行压缩存储代码 ..................................... 8 3.4 将存储后的矩阵按照数学形式输出 ....................................... 8
3.4.1 将存储后的矩阵按照数学形式输出的代码 .......................... 10
4 详细代码.................................................................. 11 5 程序测试.................................................................. 16
5.1 合法输入 ............................................................ 16
5.1.1 菜单 .......................................................... 16 5.1.2构建任意矩阵 .................................................. 16 5.1.3 成功构建矩阵对其进行判断是否为对称矩阵 ........................ 17 5.1.4 对对称矩阵进行压缩存储 ........................................ 18 5.1.5 按照数学形式输出所压缩的矩阵 .................................. 19 5.1.6 退出程序 ...................................................... 20 5.2 非法输入 ............................................................ 20
5.2.1 非法操作菜单 .................................................. 20 5.2.2 n值的非法输入 ................................................ 21
总结 ....................................................................... 22 参考资料.................................................................... 23
1 课题描述
矩阵是很多科学与工程计算问题中研究的数学对象。在此,人们感兴趣的不是矩阵本身,而是如何存储矩阵的元,从而使矩阵的各种运算能有效的进行。
通常,用高级语言编制程序时,都是用二维数组来存储矩阵元。有的程序设计语言中还提供了各种矩阵运算,用户使用时都很方便,然而,在数值分析中经常出现一些阶数很高的矩阵,同时在矩阵中有许多值相同的元素或者是零元素。有时为了节省存储空间,可以对这类矩阵进行压缩存储。
压缩矩阵:为多个值相同的元止分配一个存储空间;对零元不分配空间。 开发工具:Visual C++6.0
1
2 设计要求
2.1设计要求
本次课程设计采用结构化程序设计方法,从整体到模块、逐步细化,模块化设计、结构化编码的算法只适合特殊矩阵中的对称矩阵,面对一般矩阵,不进行压缩存储。存储时采用的顺序存储结构主要为数组,包括一维数组和二维数组。程序中定义了一个结构体Array s,其成员为两个数组,具体设计过程如下: 2.2各模块程序的伪码算法
(1)构建矩阵:
CreatMatrix(Array &s);
操作结果:创建任意n*n矩阵。 (2)判断矩阵是否对称: JudgeMatrix(Array &s); 初始条件:矩阵M存在。
操作结果:判断M是否为对称矩阵,若不是,则重新构建,最终得到对称矩阵。 (3)压缩存储:
CompMatrix(Array &s);
初始条件:矩阵M为对称矩阵。
操作结果:将M压缩存储到一维数组中。 (4)输出所压缩的对称矩阵: OutputMatrix(Array &s);
初始条件:矩阵M已被压缩存储到一维数组中。 操作结果:将M按照数学形式输出。
2.2各模块之间的调用关系图
各模块之间的调用关系如图2.1所示。 main CreatMatrix JudgeMatrix CompMatrix OutputMatrix CreatMatrix
图2.1 各模块之间的调用关系
2
3 模块内的核心算法及流程图
3.1构建任意矩阵
在构建任意n*n矩阵这个模块中,利用了二维数组来接收所构建矩阵的元。
CreatMatrix()函数:在构建矩阵时,首先要得到n值,将n值带入构建矩阵中,而输入部分用for循环控制输入格式及元素个数,输入前已规定建立任意矩阵并且元素个数为n*n个,接收时以二维数组的形式来存储从键盘输入的任意元素。输出所构建的矩阵时仍用for循环来输出。
输入流程图如图3.1所示,输出流程图如图3.2所示,其中n为行下表或列下标。
开始 开始 输入n值 i=1 行下标初始化为1 n是非零自然数 N 判断非法输入
n<0或者n为字符 判断i值与 Y i<=n 行下标 输入矩阵 系统提示 N n值的关系 i=1 行下标初始化为1 j=1 列下标初始化为1
N i<=n 判断i值与行下标n值的关系 Y j<=n 判断 j值 j=1 列下标初始化为1 N 与列下标 n值的关系 Y j<=n 判断j值与列下标 输出元素 N Y n值的关系 s.M[i][j] Y 存入元素 j++ j++
i++ i++
结束 结束 图3.1输入流程图 图3.2输出流程图
3