ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:92.36KB ,
资源ID:11065794      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11065794.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告n维矩阵乘法.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、数据结构课程设计报告n维矩阵乘法数据结构课程设计报告设计题目: n维矩阵乘法:A B1专 业 计算机科学与技术 班 级 计051本 学 生 林垂敏 学 号 29 指导教师 潘崇 起止时间 2007-2008 学年第 I 学期一、 具体任务功能:设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab1结果。分步实施:1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求:建立一个文件,可完成2维矩阵的情况;3.进一步要求:通过键盘输入维数n。有兴趣的同学可以自己扩充系统功能。要求:1.界面友好,函数功能要划分好2.总体设计应画一流程图3.

2、程序要加必要的注释4.要提供程序测试方案5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。二、 软件环境Microsoft Visual C+ 三、 问题的需求分析程序以二维数组作为矩阵的存储结构,通过键盘输入矩阵维数n,动态分配内存空间,创建n维矩阵。矩阵建立后再通过键盘输入矩阵的各个元素值;也可以通过文件读入矩阵的各项数据(维数及各元素值)。当要对矩阵作进一步操作(A*B或A*B(-1))时,先判断内存中是否已经有相关的数据存在,若还未有数据存在则提示用户先输入相关数据。当要对矩阵进行求逆时,先利用矩阵可逆的充要条件:|A| != 0 判断矩阵是否可逆,

3、若矩阵的行列式 |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 = n 基本操作: Swap(&a,&b); 初始条件:记录a,b已存在。 操作结果:交换记录a,b的值。 CreateMatrix(n)

4、; 操作结果:创建n维矩阵,返回该矩阵。 Input(&M); 初始条件:矩阵M已存在。 操作结果:从终端读入矩阵M的各个元素值。 Print(&M) 初始条件:矩阵M已存在。 操作结果:在终端显示矩阵M的各个元素值。 ReadFromFile(); 操作结果:从文件读入矩阵的相关数据。 Menu_Select(); 操作结果:返回菜单选项。 MultMatrix(&M1,&M2,&R); 初始条件:矩阵M1,M2,R已存在。 操作结果:矩阵M1,M2作乘法运算,结果放在R中。 DinV(&M,&V); 初始条件:矩阵M,V已存在。 操作结果:求矩阵M的逆矩阵,结果放入矩阵V中。 Matrix

5、Determ(&M,n); 初始条件:矩阵M已存在。 操作结果:求矩阵M的行列式的值。 ADT MatrixMulti2矩阵求逆算法设计思想算法采用高斯-约旦法(全选主元)求逆,主要思想如下:首先,对于k从0到n-1作如下几步:1 从第k行、第k列开始的右下角子阵中选取绝对值最大的元素,并记住此元素所在的行号与列号,再通过行交换和列交换将它交换到主元素位置上。这一步称为全选主元。2 主元求倒:M(k,k) = 1 / M(k,k)3 M(k,j) = M(k,j) * M(k,k);j = 0,1,n-1;j != k4 M(i,j) = M(i,j) M(i,k) * M(k,j);i,j

6、= 0,1,n-1;i,j!=k5 M(i,k) = - M(i,k) * M(k,k),i = 0,1,n-1;i != k最后,根据在全选主元过程中所记录的行、列交换的信息进行恢复,恢复原则如下:在全选主元过程中,先交换的行(列)后进行恢复;原来的行(列)交换用列(行)交换来恢复。 3.矩阵行列式求值运算算法设计思想利用行列式的性质:行列式等于它的任一行(列)各元素与其对应的代数余子式乘积,即 D = a(i,k)*A(i,k) ; k = 1,2,n;D = a(k,j)*A(k,j) ; k = 1,2,n; 再利用函数的递归调用法实现求其值。4各函数间的调用关系5.流程图五、 源代码

7、#include #include #include #include #include #include #define YES 1#define NO 0typedef float ElemType;ElemType *A; .3f通过键盘输入各项数据 |); puts(tt| 2. 显示矩阵A,B |); puts(tt| 3. 矩阵求逆,并显示逆矩阵 |); puts(tt| 4. 求矩阵运算A*B,并显示运算结果 |); puts(tt| 5. 求矩阵运算A*B(-1),并显示运算结果|); puts(tt| 6. 从文件读入矩阵A,B与维数n |); puts(tt| 0. 退出

8、|); puts(tt*); printf(tt请选择(0-6):); c=getchar(); while(c6); return (c-0);void ReadFromFile() /从指定文件读入矩阵的维数及矩阵各元素的值 int i,j; FILE *fp; if(fp=fopen(,r)=NULL) puts(无法打开文件!); system(pause); exit(0); fscanf(fp,%d,&n); /读入矩阵维数 A=CreateMatrix(n); /创建矩阵A B V R B=CreateMatrix(n); V=CreateMatrix(n); R=CreateM

9、atrix(n); for(i=0;in;i+) /读入矩阵A for(j=0;jn;j+) fscanf(fp,%f,&Aij); for(i=0;in;i+) /读入矩阵A for(j=0;j0) break; else printf(nt输入有误,请重新输入!n); puts(); system(pause); A=CreateMatrix(n); B=CreateMatrix(n); V=CreateMatrix(n); R=CreateMatrix(n); Input(A); Input(B); break; case 2: system(cls); if(flag=-1) puts

10、(nnt不存在任何矩阵数据,请先输入数据); system(pause); break; puts(n); printf(tA = ); Print(A); puts(n); printf(tB = ); Print(B); puts(); system(pause); break; case 3: system(cls); if(flag=-1) puts(nnt不存在任何矩阵数据,请先输入数据); system(pause); break; for(;) printf(nnt输入需要求逆的矩阵(A/B):); h=getchar(); c=getchar(); /h=getchar();

11、if(c=A|c=a) i=DinV(A,V); if(i=-1) puts(nnt矩阵A的行列式等于0,不可逆!); system(pause); break; printf(tA = ); Print(A); puts(n); printf(A(-1) = ); Print(V); puts(); system(pause); break; else if(c=B|c=b) i=DinV(B,V); if(i=-1) puts(nnt矩阵B的行列式等于0,不可逆!); system(pause); break; printf(tB = ); Print(B); puts(n); print

12、f(B(-1) = ); Print(V); puts(); system(pause); break; else puts(nnt输入有误,请重新输入!n); break; case 4: system(cls); if(flag=-1) puts(nnt不存在任何矩阵数据,请先输入数据); system(pause); break; MultMatrix(A,B,R); printf(nntA*B = ); Print(R); puts(); system(pause); break; case 5: system(cls); if(flag=-1) puts(nnt不存在任何矩阵数据,请

13、先输入数据); system(pause); break; i=DinV(B,V); if(i=-1) puts(nnt矩阵B的行列式等于0,不可逆!); system(pause); break; MultMatrix(A,V,R); printf(nnA*B(-1) = ); Print(R); puts(); system(pause); break; case 6: system(cls); ReadFromFile(); puts(); system(pause); break; case 0: puts(tt正常退出); exit(0); break; return 0;六、 运行

14、结果 1主界面: 2输入6,回车,从文本文件中读入矩阵数据: 3回车,回到主菜单界面;输入2回车,显示从文件读入的矩阵数据:4回车,回到主菜单界面;输入3回车,对指定矩阵求逆:(由于这里矩阵A是不可逆的,因此仅以矩阵B为例)5回车,回到主菜单界面;输入4回车,求矩阵运算A*B:6回车回到主菜单界面,输入5回车,求A*B(-1)的值:7回车回到主菜单界面,输入0回车,退出程序;如果需要自定矩阵维数及各元素值,请利用主菜单里的1号功能自行输入数据,再进行以上几种运算操作。七、 收获及体会通过这次课程设计,让我再次复习了线性代数里矩阵的相关知识,比如n维矩阵的求逆、矩阵可逆的充分必要条件(|A| !

15、= 0)、矩阵与矩阵的乘法运算、行列式求值方法等。同样的,还让我复习了大量C语言里有关数组的一些重要概念,比如多维数组的动态分配问题、数组与指针的关系等。记得在这个学期新开设的单片机基础课上,吴涛老师曾多次强调,让我们一定要经常锻炼自己的编程能力,他常对我们说:“编程是思维的体操。”尽管我在这方面的能力和实力非常得有限,也远远不及班上的其他同学,但我通过这次课程设计充分体会到了这句话的精华。电脑程序作为人体大脑思维的延伸,程序的功能也会因为大脑思维的不断完善而变得更加强大,所以我决定今后要加强在这方面的锻炼和学习,以此来激励自己不断前进!八、 参考文献数据结构(C语言版) 严蔚敏,吴伟民 编著 清华大学出版社C语言程序设计 洪维恩 编著 中国铁道出版社C语言程序设计教程 谭浩强 张基温 唐永炎 编著 高等教育出版社工程数学线性代数 第四版 同济大学应用数学系 编 高等教育出版社计051本 林垂敏2007-12-13

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1