




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构 课程设计报告 设计题目:n (灵) 维矩阵乘法:A B 一1 专业计算机科学与技术 班级计051本 学生林垂敏 学 号 29 指导教师潘崇 起止时间 2007-2008 学年第_I_学期 一、具体任务 功能: 设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a, b的内容,并 输出两个矩阵,输出ab1结果。 分步实施: 1. 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数; 2. 完成最低要求:建立一个文件,可完成 2维矩阵的情况; 3. 进一步要求:通过键盘输入维数 n。有兴趣的同学可以自己扩充系统 功能。 要求: 1. 界面友好,函数功能要划分好 2. 总体设计应画一
2、流程图 3. 程序要加必要的注释 4. 要提供程序测试方案 5. 程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运 行的程序是没有价值的。 二、软件环境 Microsoft Visual C+ 三、问题的需求分析 程序以二维数组作为矩阵的存储结构,通过键盘输入矩阵维数n,动态 分配内存空间,创建n维矩阵。矩阵建立后再通过键盘输入矩阵的各个元素 值;也可以通过文件读入矩阵的各项数据(维数及各元素值)。 当要对矩阵作进一步操作(A*B或A*BA(-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 基本操作: Sw ap( 初始条件:记录a,b已存在。 操作结果:交换记录a,b的值。 Cre
4、ateMatrix( n); 操作结果:创建n维矩阵,返回该矩阵。 In put( 初始条件:矩阵M已存在。 操作结果:从终端读入矩阵 M的各个元素值 Prin t( 操作结果:从文件读入矩阵的相关数据。 Men u_Select(); 操作结果:返回菜单选项。 MultMatrix( 初始条件:矩阵M1, M2 R已存在。 操作结果:矩阵M1, M2作乘法运算,结果放在R中 Di nV( 初始条件:矩阵M V已存在。 操作结果:求矩阵M的逆矩阵,结果放入矩阵V中。 MatrixDeterm( 初始条件:矩阵M已存在。 操作结果:求矩阵M的行列式的值。 ADT MatrixMulti 2 矩阵
5、求逆算法设计思想 算法采用高斯-约旦法(全选主元)求逆,主要思想如下: 首先,对于k从0到n-1作如下几步: 从第k行、第k列开始的右下角子阵中选取绝对值最大的元素, 并记住此元素所在的行号与列号,再通过行交换和列交换将它交 换到主元素位置上。这一步称为全选主元。 主元求倒:M(k, k) = 1 / M(k,k) M(k,j)= =M(k,j) * M( k,k); j = 0,1,- ,n-1;j != k M(i,j) =M(i,j) - M(i,k) * M(k,j) ; i,j =0,1,n-1;i,j!=k M(i,k)= =-M(i,k) * M( k,k) ,i = 0,1 ,
6、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.流程图 五、源代码 #in elude #in elude #in elude #in
7、elude #in elude #in elude #defi ne YES 1 #defi ne NO 0 ElemType *A; .3f 通过键盘输入各项数据门; puts(tt| 2. 显示矩阵A,B|); puts(tt| 3. 矩阵求逆,并显示逆矩阵); puts(tt| 4. 求矩阵运算A*B,并显示运算结果 1); puts(tt| 5. 求矩阵运算A*BA(-1),并显示运算结果|); puts(tt| 6. 从文件读入矩阵A,B与维数n 1); puts(tt| 0. 退出门; typedef float ElemType; puts(tt* * * ); printf(t
8、t请选择(0-6):); c=getchar(); while(cv0|c6); return (c-0); void ReadFromFile() /从指定文件读入矩阵的维数及矩阵各元素的值 int i,j; FILE *fp; if(fp=fope n(,T)=NULL) puts(无法打开文件!); system(pause); exit(O); 读入矩阵维数 创建矩阵A BVR fscan f(fp,%d, / A=CreateMatrix( n); / B=CreateMatrix( n); V=CreateMatrix( n); R=CreateMatrix( n); for(i=
9、0;in;i+)/读入矩阵 A for(j=0;j n ;j+) fsca nf(fp,%f, for(i=0;in;i+)/读入矩阵 A for(j=0;j 0) break; else printf(nt输入有误,请重新输入!n); puts(); system(pause); A=CreateMatrix( n); B=CreateMatrix( n); V=CreateMatrix( n); R=CreateMatrix( n); In put(A); In put(B); break; case 2: system(cls); if(flag=-1) puts(nnt不存在任何矩阵数
10、据,请先输入数据 ); system(pause); break; puts(n); prin tf(tA =); Prin t(A); puts(n); prin tf(tB =); Prin t(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(); if(c=A|
11、c=a) i=Di nV (A,V); if(i=-1) puts(nnt 矩阵A的行列式等于0,不可 逆!); system(pause); break; prin tf(tA =); Prin t(A); puts(n); prin tf(AA(-1)=); Prin t(V); puts(); system(pause); break; else if(c=B|c=b) i=Di nV (B,V); if(i=-1) puts(nnt 矩阵B的行列式等于0,不可 逆门; system(pause); break; prin tf(tB =); Prin t(B); puts(n); pr
12、in tf(BA(-1)=); Prin t(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); prin tf(nntA*B =); Prin t(R); puts(); system(pause); break; case 5: system(cls); if(flag=-1) puts(nnt 不存在
13、任何矩阵数据,请先输入数据 ); system(pause); break; i=Di nV (B,V); if(i=-1) puts(nnt 矩阵B的行列式等于0,不可逆!); system(pause); break; MultMatrix(A,V,R); prin tf(nnA*BA(-1)=); Prin t(R); puts(); system(pause); break; case 6: system(cls); ReadFromFile(); puts(); system(pause); break; case 0: puts(tt 正常退出); exit(0); break;
14、return 0; 六、运行结果 1.主界面: 2.输入6,回车,从文本文件中读入矩阵数据: 3 回车,回到主菜单界面;输入 2回车,显示从文件读入的矩阵数据: 4回车,回到主菜单界面;输入3回车,对指定矩阵求逆:(由于这里矩阵A 是不可逆的,因此仅以矩阵 B为例) 14.39 41.000 28.000 76,000 14.MHH 45.SO0 JL B6.O00 5回车,回到主菜单界面;输入 4回车,求矩阵运算A*B: zfind Sct-ti ?9 MV;mkBii flt omo 6回车回到主菜单界面,输入 5回车,求A*BA(-1)的值: 7 回车回到主菜单界面,输入0回车,退出程序;如果需要自定矩阵维数及 各元素值,请利用主菜单里的1号功能自行输入数据,再进行以上几种运算 操作。 七、收获及体会 通过这次课程设计,让我再次复习了线性代数里矩阵的相关知识,比如 n维矩阵的求逆、矩阵可逆的充分必要条件(|A|! = 0 )、矩阵与矩阵的乘 法运算、行列式求值方法等。同样的,还让我复习了大量 C语言里有关数组 的一些重要概念,比如多维数组的动态分配问题、数组与指针的关系等。 记得在这个学期新开设的单片机基础课上,吴涛老师曾多次强调,让我 们一定要经常锻炼自己的编程能力,他常对我们说:“编程是思维的体操。” 尽管我在这方面的能力和实力非常得有限,也远远不及班上的其他同学,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年的度考核表个人总结模版
- 银行人际应变面试题目及答案
- 外痔病人的护理要点
- 留学中介服务及海外院校录取通知书获取及签证辅导协议
- 生物实验室生物反应器控制系统租赁与实验数据保密协议
- 共有产权住房离婚份额分割与房产分割和解监督协议
- 涉外房产产权保全及纠纷解决合同
- 公益信托环境保护与可持续发展合同
- 精准影视演员替身劳务报酬保密协议书
- 忠诚协议效力等级及补充条款(员工培训)
- 2025年湖南湘西自治州公开招募“三支一扶”高校毕业生高频重点提升(共500题)附带答案详解
- 店长晋级管理制度内容
- 行政组织学 课件 第6章 行政组织决策
- 2024年体育理论基本知识题库150题含答案
- 云安全事件案例
- 2025届天津市滨海新区高考仿真模拟英语试卷含解析
- 【MOOC】戏曲鉴赏-扬州大学 中国大学慕课MOOC答案
- 《反对邪教主题班会》课件
- 招标代理机构遴选投标方案(技术标)
- DB41T 2619-2024 水利工程输水管道单元工程施工质量验收评定规范
- 小米公司新员工培训方案
评论
0/150
提交评论