欢迎来到天天文库
浏览记录
ID:47518101
大小:346.80 KB
页数:32页
时间:2020-01-12
《数据结构课程设计 特殊矩阵运算》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、特殊矩阵运算1.1程序功能简介对特殊矩阵能够在界面上以人们熟悉的方式显示,可以对特殊矩阵进行加法运算和减法运算,矩阵转置。按照要求使用了多种数据结构来求解问题,具体为二维数组和类似图的数据结构。由于题目要求使用多种数据结构,因此分开写了两段程序,均实现了上述要求的功能,以下将分开说明。先说明的是用二维数组实现的程序,后说明的是用图结构实现的程序。1.2关于输入、输出形式及数据范围1.2.1使用二维数组实现的程序输入、输出范围为:-73786976294838206000到73786976294838206000,足以解决绝大多数的矩阵运算问题。1.2.2输入的格式进入程序后首
2、先展现的是功能选择界面,如下图:此时可通过输入对应功能的数字来选择功能。在此程序中不同功能输入格式不同:选择功能1.矩阵转置时需要输入要进行转置操作的矩阵,首先输入矩阵的行数和列数,以逗号隔开,之后依次按矩阵形式输入矩阵即可,各数值之间以空格隔开。选择功能2.矩阵数乘时需要输入要进行数乘操作的矩阵,此输入格式同上,之后输入一个实数,即要进行数乘的数即可。功能3.矩阵加法与4.矩阵减法输入格式和5.矩阵32乘法相同,按上述操作输入两个矩阵即可,需要注意的是矩阵减法默认顺序为先输入的矩阵减去后输入的矩阵。当按照格式输入时可以实现以上功能,但输入错误数据时,例如进行行列数不同的矩阵
3、相加减时则会返回无法操作,请重新输入的提示。具体情况见下文测试部分。1.3.1使用图结构实现的稀疏矩阵运算器程序输入、输出范围同上。1.3.2输入的格式进入程序后首先展现的是功能选择界面,如下图:选择功能部分输入同上。在进行矩阵输入时采取三元组的形式,这是由于稀疏矩阵的多零元性质。首先输入矩阵的行数、列数、非零元个数,以空格隔开,输入完毕后确认,开始输入各个非零元。输入非零元时按“所在行下标所在列下标值”的形式输入,需要注意的是输入时只能从所在行小的开始按顺序输入,不能先输入行数大的数据再输入行数小的数据。2概要设计2.1用二维数组实现的程序的概要设计由于使用二维数组结构实现
4、上述功能较为简单,故全部运算仅由主函数执行,不单写出各个简单的函数。通过switch()实现对各个功能的选择。具体如下:Switch(1):进入矩阵转置功能;Switch(2):进入矩阵数乘功能;Switch(3):进入矩阵加法功能;Switch(4):进入矩阵减法功能;Switch(5):进入矩阵乘法功能;Switch(6):结束本程序;各功能中的矩阵都是以二维数组的形式进行存储与运算的,使用完整的32存储方式使矩阵运算在设计上更为便捷,而且面对更多不同运算时也不存在因结构限制而导致的功能缺失。相应的,因为存储了完整矩阵,且运算时都是完整矩阵的每个元素都参与,所以运行相对较
5、慢。2.2用图结构实现的程序的概要设计本模块要求设计函数建立稀疏矩阵并初始化,使用三元组结构。在创建稀疏矩阵时,需要设计三元组创建稀疏矩阵,在输入出现错误时,能够对错误进行判别处理,初始化稀疏矩阵都为空值。。在对稀疏矩阵进行初始化时,只输入非零元素的值和它所在的所在行及所在列。在对稀疏矩阵输出时,以矩阵的完整形式输出。本程序存储矩阵的形式是非零元与矩阵形状结合,更适应稀疏矩阵的性质,在存储空间和运算速度上都有较大优势,但在设计各个功能时较为复杂,控制矩阵在运算时的行列变换需要进行复杂的判断和双层for循环来赋零值或进行非零值的运算。整体结构由主函数调用各个功能函数,条理清晰,
6、具体如下:流程从运算器的图形界面输出开始,之后进行功能选择,此部分流程同上。当选择功能1.矩阵加法时先调用矩阵创建函数Creat()输入矩阵A,调用输出矩阵函数Print_SMatrix(),再重复以上流程输入矩阵B,此时进行判断两矩阵能否相加,再调用矩阵加法函数AddSMatrix(A,B,C,n)进行矩阵加法运算输出结果矩阵C,结束后调用三次Destory_SMatrix()函数销毁矩阵A、B、C,最后返回流程开始处进行下一项任务。功能2矩阵减法流程同功能1矩阵加法。功能3矩阵转置只需输入矩阵A即可进行下一步调用矩阵转置函数TransposeSMatrix(),再输出转置
7、后的矩阵B,销毁矩阵A、B后返回流程开始处进行下一项任务。功能4用来结束程序,在选择功能4后调用break函数跳出switch结束程序。3详细设计3.1二维数组结构的程序的详细设计算法1:矩阵的转置运算:首先是把将要运算的矩阵存放在数组中,矩阵的转置运算,就是把你将要进行运算的A矩阵的行ar和列ac,把A矩阵的行ar作为B矩阵的bc,A矩阵的列ac作为B矩阵的br,这样得到的新矩阵B的行br和列bc就是矩阵A的转置。算法如下:for(i=0;i
此文档下载收益归作者所有