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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计矩阵的运算.docx

1、数据结构课程设计矩阵的运算数 据 结 构 课程设计报告题 目: 专 业: 班 级: 学 号: 姓 名: 指导老师: 时 间: 一、课程设计题目及所涉及知识点设计题目是“矩阵的运算”,所涉及的知识点主要是:1、数据结构中的对于结构体的定义, 用typedef struct来实现,根据所设计的问题在结构体里面定义数据类型及其变量,用define定义数组的大小,然后利用typedef 来实现对于变量的未知类型确定正确的类型。2、利用数组的形式来储存数据,在实现不同操作过程中,有的用一维结构体数组(三元组顺序表)来存储,有的用二维数组来储存。3、转置的过程中利用的是快速转置的方法,附设了num和cpo

2、t两个辅助变量。4、矩阵的加法、减法、乘法、逆运算的基本算法方式。5、通过调用每个函数,来实现每个算法的功能。二、课程设计思路及算法描述设计思路:1、首先是对于转置的考虑,要运用快速转置的方法实现,必须用三元组顺序表来储存数据,所以在第一个结构体中存在int类型的行数(mu)列数(nu)以及非零元素的个数(tu);然后第二个结构体中分别有非零元素的行下标(i)、列下标(j)和元素数值(e),最后在第一个结构体中实现对第二个结构体成为数组结构体类型。2、对于其余加法、减法、乘法和逆运算则是运用另一个结构体来实现,里面只有矩阵的行数、列数和一个二维数组(用float来定义类型)。3、在main函数

3、里面,来实现对于数据的输入操作,利用if语句进行选择来执行操作,利用dowhile语句来实现功能的循环操作。4、分五个函数调用分别来实现转置、加法、乘法、和逆运算,每个里面都有最终输出结果的方式。算法1:矩阵的转置输入:mu中存放矩阵的行数,tu存放矩阵的列数,i接收行下标的数值,j接收列下标的数值,e来存储数据。输出:转置后的新矩阵。输入两行两列数据,在第二行第一列中有个数据为12,其余都为0,则输出的结果为第一行第二列数据为12,其余为0。算法2:矩阵的加法运算 输入:i中存放矩阵的行数,j中存放矩阵的列数,二维数组b中存放每个数据。 输出:矩阵加完后的另一个新矩阵。 输入两个两行三列的矩

4、阵,在第一个矩阵里面第一行第一列有个数据20,其余为0,在第二个矩阵里面第一行第二列中有个数据30,其余为0,则输出的结果为一个两行三列的矩阵,其中第一行第一列数据为20,第一行第二列数据为30,其余为0。算法3:矩阵的减法运算 输入:i中存放矩阵的行数,j中存放矩阵的列数,二维数组b中存放每个数据。 输出:矩阵相减后的另一个新矩阵。 输入两个两行三列的矩阵,在第一个矩阵里面第一行第一列有个数据20,其余为0,在第二个矩阵里面第一行第一列中有个数据30,其余为0,则输出的结果为一个两行三列的矩阵,其中第一行第一列数据为-10,其余为0。算法4:矩阵的乘法运算 输入:i中存放矩阵的行数,j中存放

5、矩阵的列数,二维数组b中存放每个数据。 输出:矩阵加完后的另一个新矩阵。 输入两行两列的矩阵,第一个矩阵里面第一行第一列有个数据2第二列有个数据3,其余为0,在第二个矩阵里面第一行第一列有个数据2第二列中有个数据3,其余为0,则输出的结果为一个两行两列的矩阵,其中第一行第一列数据为4,第二列为6,第一行第二列数据为30,其余为0。算法五:矩阵的逆运算 输入:i中存放矩阵的行数,j中存放矩阵的列数,二维数组b中存放每个数据。 输出:矩阵进行逆运算完后的另一个新矩阵。 输入三行三列的矩阵,第一个矩阵里面第一行第一列有个数据3个数据分别为1,2,3;第二行的数据分别为2,2,1;第三行的暑假分别为3

6、,4,3;则输出的结果为三行三列矩阵,其中第一行的数据为1,3,-2;第二行的数据分别为-1.5,-3,2.5; 第三行的数据分别为1,1,-1。三、课程设计中遇到的难点及解决办法1、在转置的过程中,要求把转置后的矩阵输出出来,因为用的是三元组顺序表的存储形式,所以不知道怎么去实现,然后通过进一步思考,运用先把一个矩阵存入零元素,然后在对其进行更改,最后完成了此项的工作。2、就是对于矩阵的乘法运算和逆运算,掌握的不够熟练,先是通过书籍对于矩阵的乘法和逆运算得到更深的了解,然后通过一步步写程序最后实现了矩阵的乘法运算和逆运算。四、总结通过此次课程设计,让我对于编程有了更深的认识,老师的精心指导让

7、我学会到了很多,不仅仅是代码,最主要的让我的思维开阔了很多,在这个过程中,通过不断的尝试,不断的修改,最终克服了困难,完成了自己的任务,心里有种无比的喜悦,但同时又感觉到了自己的知识面的狭隘,还有好多知识的海洋还没有畅游,等待自己将是一回更大的考验。对于现在的自己,对学习程序还是有很大的兴趣,它让我体验到了很多的快乐,我要进步跟进现在的课程,努力去发展自己,按照老师说的最主要的是具有了编程的思想,则具有了编程的能力,我想我可以成功完成自己的目标。五、附录主要源程序代码及运行结果1、主要源程序代码:# include # define max 100# define maxsize 100typ

8、edef float elemtype;typedef struct float bmaxmax; int i;/矩阵的行数 int j;/ 矩阵的列数 tsmatrix;typedef struct int i,j;/该非零元的行下标和列下标 elemtype e;triple;typedef struct triple datamaxsize+1;/非零元三元组,data0未用 int mu,nu,tu;/矩阵的行数、列数和非零元个数sqlist ; void zhuanzhi(sqlist s1,tsmatrix &l2)/矩阵的转置 sqlist s2;int col,t9,p,q,a

9、1,b1;int num100,copt100; s2.mu=s1.mu;s2.nu=s1.nu;s2.tu=s1.tu; if(s2.tu0) for(col=1;col=s1.nu;+col) numcol=0; for(t9=1;t9=s1.tu;+t9) +nums1.datat9.j;/求s1中每一列含非零元个数 copt1=1;/求第col列中第一个非零元在s2.data中序号 for(col=2;col=s1.nu;+col) coptcol=coptcol-1+numcol-1; for(p=1;p=s1.tu;+p) col=s1.datap.j; q=coptcol; s2

10、.dataq.i=s1.dataq.j; s2.dataq.j=s1.dataq.i; s2.dataq.e=s1.dataq.e;+coptcol; l2.bs2.dataq.is2.dataq.j=s2.dataq.e; printf(转置后的数据是:n); printf(*n); for(a1=1;a1=s1.nu;a1+) for(b1=1;b1=s1.mu;b1+) printf(%10.3f,l2.ba1b1); printf(t); printf(n); printf(*); printf(n); void jiafa(tsmatrix l4, tsmatrix l5)/矩阵的加

11、法 tsmatrix l6; for(int t=0; tl4.i;t+) for(int t1=0;t1l4.j;t1+) l6.btt1=l4.btt1+l5.btt1; printf(矩阵加完后的结果:n);printf(*n); for(int t2=0; t2l4.i;t2+) for(int t3=0;t3l4.j;t3+) printf(%10.3f,l6.bt2t3); printf(t); printf(n);printf(*n); void jianfa(tsmatrix l4, tsmatrix l5)/矩阵的减法 tsmatrix l6; for(int t=0; tl

12、4.i;t+) for(int t1=0;t1l4.j;t1+) l6.btt1=l4.btt1-l5.btt1; printf(矩阵相减后的结果:n);printf(*n); for(int t2=0; t2l4.i;t2+) for(int t3=0;t3l4.j;t3+) printf(%10.3f,l6.bt2t3); printf(t); printf(n);printf(*n); void chengfa(tsmatrix l4, tsmatrix l5)/矩阵的乘法 tsmatrix l6;for(int t=0;tl4.i;t+) for(int t1=0;t1l5.j;t1+

13、) l6.btt1=0; for(int k=0;kl4.j;k+) l6.btt1+=l4.btk*l5.bkt1; printf(矩阵乘完后的结果:n);printf(*n); for(int t2=0; t2l4.i;t2+) for(int t3=0;t3l5.j;t3+) printf(%10.3f,l6.bt2t3); printf(t); printf(n);printf(*n); void niyunsuan( tsmatrix s)/矩阵的逆运算 tsmatrix s1; float t,x;int k,i,j; for(i=0;is.i;i+) for(j=0;j(2*s.

14、i);j+) if(js.i) s1.bij=s.bij; else if(j=s.i+i) s1.bij=1.0; else s1.bij=0.0; for(i=0;is.i;i+) for(k=0;ks.i;k+) if(k!=i) t=s1.bki/s1.bii; for(j=0;j(2*s.i);j+) x=s1.bij*t; s1.bkj=s1.bkj-x; for(i=0;is.i;i+) t=s1.bii; for(j=0;j(2*s.i);j+) s1.bij=s1.bij/t; float y=1.0; for(i=0;is.i;i+) y=y*s1.bii; if(y=0.

15、0) printf(对不起,您输入的矩阵没有逆矩阵); else for(i=0;is.i;i+) for(j=0;js.i;j+) s.bij=s1.bij+s.i; printf(矩阵逆运算后的结果:n); for(i=0;is.i;i+) for(j=0;js.i;j+) printf(%10.3f,s.bij); printf(n); void main() tsmatrix l,l1,l3; sqlist s; int m,n,m1,n1,n4,n5,t,t1,t2,t3,t4,t5,t6,t7,t8; do printf(请输入你要进行的操作:n); printf(*n); pri

16、ntf(矩阵转置运算请按1n矩阵的加法运算请按2n矩阵的乘法运算请按3n矩阵的减法运算请按4n矩阵的逆运算请按5n结束请按0:n); printf(*n); scanf(%d,&m1); if(m1=1) printf(您选择进行的操作是矩阵的转置运算nn); printf(请输入你要转置矩阵的行数、列数和非零元的个数n); scanf(%d,&t1); scanf(%d,&t2); scanf(%d,&t3); s.mu=t1;s.nu=t2;s.tu=t3; printf(请输入你要转置矩阵非零元的行下标、列下标(从11开始由左至右由上到下)及其数据(按行逐个输入)n); for(t4=1

17、;t4=s.tu;t4+) scanf(%d,&t5); scanf(%d,&t6); s.datat4.i=t5;s.datat4.j=t6; scanf(%f,&s.datat4.e); for(t7=1;t7=s.nu;t7+) for(t8=1;t8=s.mu;t8+) l1.bt7t8=0.0; zhuanzhi(s,l1); if(m1=2) printf(您选择进行的操作是矩阵的加法运算nn); printf(请输入矩阵的行数和列数:n); scanf(%d,&n); scanf(%d,&m); l.i=n; l.j=m; l3.i=n; l3.j=m;printf(*n); p

18、rintf(请输入第一个%d行%d列的矩阵n,l.i,l.j); for(t=0;tl.i;t+) for(n1=0;n1l.j;n1+) scanf(%f,&l.btn1); printf(*n);printf(*n); printf(请输入第二个%d行%d列的矩阵n,l3.i,l3.j); for(n4=0;n4l3.i;n4+) for(n5=0;n5l3.j;n5+) scanf(%f,&l3.bn4n5); printf(*n); jiafa(l,l3); if(m1=3) printf(您选择进行的操作是矩阵的乘法运算n(只有当第一个矩阵的列数等于第二个矩阵的行数方可进行计算)nn

19、); printf(请输入第一个矩阵的行数和列数:n); scanf(%d,&n); scanf(%d,&m); l.i=n; l.j=m; printf(*n); printf(请输入第一个%d行%d列的矩阵n,l.i,l.j); for(t=0;tl.i;t+) for(n1=0;n1l.j;n1+) scanf(%f,&l.btn1); printf(*n);printf(*n); printf(请输入第二个矩阵的行数和列数:n); scanf(%d,&n1); scanf(%d,&m1); l3.i=n1; l3.j=m1;printf(*n); printf(请输入第二个%d行%d列

20、的矩阵n,l3.i,l3.j); for(n4=0;n4l3.i;n4+) for(n5=0;n5l3.j;n5+) scanf(%f,&l3.bn4n5); printf(*n); chengfa(l,l3); if(m1=4) printf(您选择进行的操作是矩阵的减法运算nn); printf(请输入矩阵的行数和列数:n); scanf(%d,&n); scanf(%d,&m); l.i=n; l.j=m; l3.i=n; l3.j=m;printf(*n); printf(请输入第一个%d行%d列的矩阵n,l.i,l.j); for(t=0;tl.i;t+) for(n1=0;n1l.

21、j;n1+) scanf(%f,&l.btn1); printf(*n);printf(*n); printf(请输入第二个%d行%d列的矩阵n,l3.i,l3.j); for(n4=0;n4l3.i;n4+) for(n5=0;n5l3.j;n5+) scanf(%f,&l3.bn4n5);printf(*n); jianfa(l,l3); if(m1=5) printf(您选择进行的操作是矩阵的逆运算nn); printf(请输入矩阵的维数(即行和列相等的矩阵):n); scanf(%d,&n); l.i=n; l.j=n;printf(*n); printf(请输入%d行%d列的矩阵n,l.i,l.j); for(t=0;tl.i;t+) for(n1=0;n1l.j;n1+) scanf(%f,&l.btn1); printf(*n); niyunsuan(l); while(m1!=0); 2、运行结果(如下图): (1)、执行的首界面: (2)、矩阵的转置运算: (3)、矩阵的加法运算: (4)、矩阵的减法运算: (5)、矩阵的乘法(6)、矩阵的逆运算: (7)、矩阵可以循环运算:六、指导老师评语及成绩

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

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