数据结构课程设计报告n维矩阵乘法.doc





《数据结构课程设计报告n维矩阵乘法.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计报告n维矩阵乘法.doc(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构课程设计报告n维矩阵乘法数据结构 课程设计报告 设计题目: n维矩阵乘法:A B1 专 业 计算机科学与技术 班 级 计本 学 生 学 号 指导教师 起止时间 20_7._.3-20_7._.11 学年第 I 学期 一、 具体任务 功能: 设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab1结果。 分步实施: 1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数; 2.完成最低要求:建立一个文件,可完成2维矩阵的情况; 3.进一步要求:通过键盘输入维数n。有兴趣的同学可以自己扩充系统功能。 要求: 1.界面友好,函数功能要划分好 2.总体设
2、计应画一流程图 3.程序要加必要的注释 4.要提供程序测试方案 5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。 二、 软件环境 Microsoft Visual C+ 6.0 三、 问题的需求分析 程序以二维数组作为矩阵的存储结构,通过键盘输入矩阵维数n,动态分配内存空间,创建n维矩阵。矩阵建立后再通过键盘输入矩阵的各个元素值;也可以通过文件读入矩阵的各项数据(维数及各元素值)。 当要对矩阵作进一步操作(A_B或A_B(-1))时,先判断内存中是否已经有相关的数据存在,若还未有数据存在则提示用户先输入相关数据。 当要对矩阵进行求逆时,先利用矩阵可逆的充要
3、条件:|A| != 0 判断矩阵是否可逆,若矩阵的行列式 |A| = = 0 则提示该矩阵为不可逆的;若 |A| !=0 则求其逆矩阵,并在终端显示其逆矩阵。 四、 算法设计思想及流程图 1抽象数据类型 ADT Matri_Multi 数据对象:D = a(I,j)|i = 1,2,3,n;j = 1,2,n;a(i,j)ElemSet,n为矩阵维数 数据关系: R = Row,Col Row = | 1 = i = n , 1 = j = n-1 Col = | 1 = i = n-1 , 1 = j 0 ? 是 输入矩阵维数n 输入矩阵A,B 输出矩阵维数n system(“pause”)
4、; 通过键盘输入需对哪个矩阵求逆,求出相应该的逆阵,并显示求得的逆阵system(“pause”);若矩阵不可逆则返回主菜单 case 4: R=A_B并显示矩阵R system(“pause”); case 5: 是 否 是 R=A_B(-1)显示矩阵R system(“pause”);若B不可逆,则返回主菜单 case 6: 从指定文件中读入矩阵数据 case 0: e_it(0); 结果 否 五、 源代码 #include #include #include #include #include #include #define YES 1 #define NO 0 typedef flo
5、at ElemType; ElemType _A; /矩阵A ElemType _B; /矩阵B ElemType _R; /矩阵R,用于存放运算结果 ElemType _V; /矩阵V,存放逆矩阵 int n=0; /矩阵维数 int flag=-1; /标记 void swap(ElemType _a,ElemType _b) /交换记录a,b的值 ElemType c; c=_a; _a=_b; _b=c; ElemType _CreateMatri_(int n) /创建n维矩阵,返回该矩阵 int i,j; ElemType _M; M = (ElemType _)malloc(si
6、zeof(ElemType _)_n); if(M = NULL) e_it(1); for(i=0;in;i+) _(M+i) = (ElemType _)malloc(sizeof(ElemType)_n); for(j=0;jn;j+) _(_(M+i)+j) = 0; return M; ElemType Matri_Determ(ElemType _M,int n) /_递归法求n维矩阵行列式的值,返回运算结果_/ int i,j,k,l,s; ElemType _T1; ElemType _T2; T1=CreateMatri_(n); T2=CreateMatri_(n); El
7、emType u; ElemType value=0; /运算结果 for(i=0;in;i+) for(j=0;jn;j+) T1ij=Mij; T2ij=Mij; if(n=2) /若为2维矩阵,则直接运算并返回运算结果 value=T200_T211-T201_T210; return value; else for(j=0;jn;j+) /将矩阵的行列式以第一行展开 u=T10j; for(i=1,l=0;in;i+) /求矩阵行列式的余子式M(0,j) for(k=0,s=0;kn;k+) if(k=j) continue; else T2ls=T1ik; s+; l+; value
8、=value+u_(int)pow(-1,j)_Matri_Determ(T2,n-1); /_行列式等于某一行的各个元素与其代数余子式的乘积之和_/ return value; int DinV(ElemType _M,ElemType _V) /_全选主元法求矩阵M的逆矩阵,结果存入矩阵V中_/ int i,j,k; ElemType d; ElemType u; int _JS,_IS; JS=(int _)malloc(sizeof(int)_n); IS=(int _)malloc(sizeof(int)_n); u=Matri_Determ(M,n); /返回矩阵A的行列式值 if
9、(u=0) return -1; for(i=0;in;i+) for(j=0;jn;j+) Vij=Mij; for(k=0;kn;k+) d=0; for(i=k;in;i+) /找出矩阵M从Mkk开始绝对值最大的元素 for(j=k;jd) d=fabs(Vij); /d记录绝对值最大的元素的值 /_把绝对值最大的元素在数组中的行、列坐标分别存入ISK,JSK_/ ISk=i; JSk=j; if(d+1.0 = 1.0) return 0; /所有元素都为0 if(ISk != k) /_若绝对值最大的元素不在第k行,则将矩阵ISK行的元素与k行的元素相交换_/ for(j=0;jn;
10、j+) swap(&;Vkj,&;VISkj); if(JSk!=k) /_若绝对值最大的元素不在第k列,则将矩阵JSK列的元素与k列的元素相交换_/ for(i=0;in;i+) swap(&;Vik,&;ViJSk); Vkk=1/Vkk; /绝对值最大的元素求倒 for(j=0;jn;j+) /_矩阵M第k行除元素Mkk本身外都乘以Mkk_/ if(j!=k) Vkj=Vkj_Vkk; for(i=0;in;i+) /_矩阵除第k行的所有元素与第k列的所有元素外,都拿本身减去Mik_Mkj, 其中i,j为元素本身在矩阵的位置坐标_/ if(i!=k) for(j=0;jn;j+) if(
11、j!=k) Vij=Vij-Vik_Vkj; for(i=0;i=0;k-) /_根据上面记录的行ISk,列JSk信息恢复元素_/ for(j=0;jn;j+) if(JSk!=k) swap(&;Vkj,&;VJSkj); for(i=0;in;i+) if(ISk!=k) swap(&;Vik,&;ViISk); free(IS); free(JS); return 0; void MultMatri_(ElemType _M1,ElemType _M2,ElemType _R) /_矩阵M1乘M2 结果存入矩阵R_/ int i,j,k; for(i=0;in;i+) for(j=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 矩阵 乘法

限制150内