数据结构课程设计报告n维矩阵乘法.pdf
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5 0人已下载
| 下载 | 加入VIP,免费下载 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 矩阵 乘法
- 资源描述:
-
1、数据结构课程设计报告 n 维矩阵乘法数据结构 课程设计报告 设计题目:n 维矩阵乘法:A B1 专 业 计算机科学与技术 班 级 计本 学 生 学 号 指导教师 起止时间 2007.X.3-2007.X.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 MatrixMulti 数据对象: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”);通过键盘输入需对哪个矩阵求逆,求出相应该的逆阵,并显示求得的逆阵 system(“pa
4、use”);若矩阵不可逆则返回主菜单 case 4:R=A*B 并显示矩阵 R system(“pause”);case 5:是 否 是 R=A*B(-1)显示矩阵 R system(“pause”);若 B 不可逆,则返回主菜单 case 6:从指定文件中读入矩阵数据 case 0:exit(0);结果 否 五、源代码#include#include#include#include#include#include#define YES 1#define NO 0 typedeffloat ElemType;ElemType*A;/矩阵 A ElemType*B;/矩阵 B ElemType*
5、R;/矩阵 R,用于存放运算结果 ElemType*V;/矩阵 V,存放逆矩阵 intn=0;/矩阵维数 int flag=-1;/标记 void swap(ElemType*a,ElemType*b)/交换记录 a,b 的值 ElemType c;c=*a;*a=*b;*b=c;ElemType*CreateMatrix(int n)/创建 n 维矩阵,返回该矩阵 int i,j;ElemType*M;M=(ElemType*)malloc(sizeof(ElemType*)*n);if(M=NULL)exit(1);for(i=0;in;i+)*(M+i)=(ElemType*)mallo
6、c(sizeof(ElemType)*n);for(j=0;jn;j+)*(*(M+i)+j)=0;return M;ElemType MatrixDeterm(ElemType*M,int n)/*递归法求 n 维矩阵行列式的值,返回运算结果*/int i,j,k,l,s;ElemType*T1;ElemType*T2;T1=CreateMatrix(n);T2=CreateMatrix(n);ElemType u;ElemType value=0;/运算结果 for(i=0;in;i+)for(j=0;jn;j+)T1ij=Mij;T2ij=Mij;if(n=2)/若为 2 维矩阵,则直接
7、运算并返回运算结果 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=value+u*(int)pow(-1,j)*MatrixDeterm(T2,n-1);/*行列式等于某一行的各个元素与其代数余子式的乘积之和*/returnvalue;int DinV(ElemType*M,ElemType
8、*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=MatrixDeterm(M,n);/返回矩阵 A 的行列式值if(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
9、);/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;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
10、;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(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,&V
展开阅读全文
课堂库(九科星学科网)所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。


2019届人教A版数学必修二同步课后篇巩固探究:2-1-1 平面 WORD版含解析.docx
辽宁省北票市高级中学高中语文 种树郭橐驼传课件 新人教版选修《中国现代诗歌散文欣赏》.ppt
