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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

稀疏矩阵的操作课程设计.docx

1、稀疏矩阵的操作课程设计摘 要随着科学技术的飞速发展,人类的生活工作方式发生了很大的改变,工作效率随着高科技的加入有了质的提高,特别是信息技术和网络技术的迅速发展和广泛应用,对社会的政治,经济,军事,文化等领域产生越来越深刻的影响。现代生活各个方面都离不开计算机技术,而C是国际上广泛流行的通用程设语言,在计算机的研究和应用中以展现强大的生命力。C功能强大,使用灵活,既具有高级语言的特点,又具有低级语言的些特点;它既可用于编写系统软件又可用于编写应用软件。本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。在程序设计中,采

2、用了先用三元组实现稀疏矩阵的输入,输出,及其转置,相加,相乘操作的方法。程序通过调试运行,结果与预期一样,初步实现了设计目标。关键词:稀疏矩阵,三元组,链表1 课程设计的目的和意义通过本课程设计教学所要达到的目的是:培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用;通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。2 需求分析2.1需求概述1.问题描述设计程序用十字链表实现稀疏矩阵的加、乘、转置。基本功能要求:(1)稀

3、疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C。(2)求出A的转置矩阵D,输出D。(3)求两个矩阵A和B的乘积。测试数据: 2.需求分析(1)设计函数建立稀疏矩阵,初始化值;(2)设计函数输出稀疏矩阵的;(3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵;(4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵;(5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵;(6)构造函数进行稀疏矩阵的转置,并输出结果;(7)退出系统。2.2 需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:硬件要求:一台计算机。软件配置:WINDOWS、VC+6

4、.0。3 系统功能设计及数据结构设计3.1模块设计本程序包含1个模块:主程序模块加各功能实现模块。3.2系统子程序及功能设计本系统共设置7个子程序,各子程序的函数名及功能说明如下。(1)typedef int ElemType / 初始化矩阵 ( 2 ) void Creat(TSMatrix &M) /建立矩阵(3)void Print_SMatrix(TSMatrix M) / 输出矩阵的信息以下编号(4)-(6)是稀疏矩阵的基本操作。依次是:相加,相乘,转置等。(4)void Xiangjia(TSMatrix A,TSMatrix B,TSMatrix &C,int n)/把A 和B两

5、个矩阵相加,结果是C(5)void Xiangcheng(TSMatrix A,TSMatrix B,TSMatrix &Q) /把A和B两个矩阵相乘,结果是Q(6)void Zhuanzhi(TSMatrix *a,TSMatrix *b) / 把A转置(7)void main() / 主函数。设定界面的颜色,大小和窗口的标题,调用工作区模块函数 4 算法设计、数据流图及程序结构框图4.1 程序功能模块为了实现以上功能,可以从3个方面着手设计。1主界面设计为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。2存储

6、结构设计本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。3系统功能设计本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数i typedef int ElemType实现。建立稀疏矩阵用void Creat()实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。(1)稀疏矩阵的加法:此功能由函数void Xiangjia( )实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。(2)稀疏矩阵的乘法:此功能由函数void

7、Xiangcheng( )实现。当用户选择该功能,系统提示输入要进行相乘的两个矩阵的详细信息。然后进行相乘,最后得到结果。(3)稀疏矩阵的转置:此功能由函数void Zhuanzhi( )实现。当用户选择该功能,系统提示用户初始化一个矩阵,然后进行转置,最终输出结果。(4)退出:即退出稀疏矩阵的应用系统。由函数5实现,但用户选择此功能时,系统会提示你是否确实想退出,如果是,则退出,否则继续。4.2 程序流程图5 程序原代码及其说明#include #include #include #define MAXSIZE 40 /假设非零元素个数的最大值为40 #define MAXRC 20 /假设

8、矩阵的最大行数为20 typedef int ElemType; typedef struct int i,j; /非零元的行下标和列下标 ElemType e; /非零元的值 Triple; typedef struct Triple dataMAXSIZE+1; int rposMAXRC+1; /各行第一个非零元在三元组的位置表 int hs,ls,fls; TSMatrix,*Matrix; void Creat(TSMatrix &M) int i,k; for(i=1;i=MAXRC+1;i+) M.rposi=0; printf(请输入矩阵的行数、列数和非零元个数(以空格隔开):

9、); scanf(%d %d %d,&M.hs,&M.ls,&M.fls); for(i=1;i=M.fls;i+) printf(请用三元组形式输入矩阵的元素(行 列 非零元素):); scanf(%d %d %d,&M.datai.i,&M.datai.j,&M.datai.e); for(i=1,k=1;i=M.hs;i+) M.rposi=k; while(M.datak.i=i & k=M.fls) k+; void Xiangjia(TSMatrix A,TSMatrix B,TSMatrix &C,int n) int a,b,temp,l; C.hs=A.hs; C.ls=A.

10、ls; a=b=l=1; while(a=A.fls & b=B.fls) if(A.dataa.i=B.datab.i) if(A.dataa.jB.datab.j) C.datal=B.datab; C.datal+.e=n*B.datab+.e; else temp=A.dataa.e+n*B.datab.e; if(temp) C.datal=A.dataa; C.datal.e=temp; l+; a+;b+; else if(A.dataa.iB.datab.i) C.datal+=A.dataa+; else C.datal=B.datab; C.datal+.e=n*B.dat

11、ab+.e; while(a=A.fls) C.datal+=A.dataa+; while(b=B.fls) C.datal=B.datab; C.datal+.e=n*B.datab+.e; C.fls=l-1; int Xiangcheng(TSMatrix A,TSMatrix B,TSMatrix &Q) int arow,brow,ccol,tp,p,q,t; int ctempMAXRC+1; if(A.ls!=B.hs) return 0; Q.hs=A.hs;Q.ls=B.ls;Q.fls=0; if(A.fls*B.fls) for(arow=1;arow=A.hs;aro

12、w+) for(ccol=1;ccol=Q.ls;ccol+) ctempccol=0; Q.rposarow=Q.fls+1; if(arowA.hs) tp=A.rposarow+1; else tp=A.fls+1; for(p=A.rposarow;ptp;p+) brow=A.datap.j; if(browB.hs) t=B.rposbrow+1; else t=B.fls+1; for(q=B.rposbrow;qt;q+) ccol=B.dataq.j; ctempccol+=A.datap.e*B.dataq.e; for(ccol=1;ccolMAXSIZE) return

13、 0; Q.dataQ.fls.i=arow; Q.dataQ.fls.j=ccol; Q.dataQ.fls.e=ctempccol; return 1; void Print_SMatrix(TSMatrix M) int k,l,n; Matrix p; p=&M; for(k=1,n=1;khs;k+) for(l=1;lls;l+) if(p-datan.i=k & p-datan.j=l) printf(%5d,p-datan.e); n+; else printf(%5d,0); printf(n); printf(n); void Zhuanzhi(TSMatrix *a,TS

14、Matrix *b) int q,col,p; b-hs=a-ls; b-ls=a-hs; b-fls=a-fls; if(b-fls) q=1; for(col=1;colls;col+) for(p=1;pfls;p+) if(a-datap.j=col) b-dataq.i=a-datap.j; b-dataq.j=a-datap.i; b-dataq.e=a-datap.e; +q; void Destory_SMatrix(TSMatrix &M) M.hs=M.ls=M.fls=0; void main() TSMatrix A,B,C; TSMatrix *p=&A,*q=&B;

15、 int flag,n; while(true) system(cls); printf(nnn); printf(tn); printf(t * 稀疏矩阵的加、转、乘 * n); printf(tn); printf(t 1、稀疏矩阵的加法 n); printf(t 2、稀疏矩阵的转置 n); printf(t 3、稀疏矩阵的乘法 n); printf(t 4、退出该应用程序 n); printf(t By 陈强 计算机科学与技术 n); printf(tn); printf(输入要进行的项目的编号:); scanf(%d,&flag); if(flag=4) break; Creat(A)

16、; printf(矩阵A:n); Print_SMatrix(A); switch(flag) case 1: Creat(B);n=1; printf(矩阵B:n); Print_SMatrix(B); if(A.hs=B.hs & A.ls=B.ls) printf(A+B:n); Xiangjia(A,B,C,n); Print_SMatrix(C); else printf(错误!行列不一致n); break; case 2: printf(A-B:n); Zhuanzhi(p,q); Print_SMatrix(B); break; case 3: Creat(B); printf(

17、矩阵B:n); Print_SMatrix(B); printf(A*B:n); n=Xiangcheng(A,B,C); if(!n) printf(错误!行列不匹配n); else Print_SMatrix(C); break; default: printf(输入错误!n); Destory_SMatrix(A); Destory_SMatrix(B); Destory_SMatrix(C); getchar();getchar(); printf(nttt *程序已经退出*n); getchar();6 程序测试及运行结果说明由需求分析可知,稀疏矩阵的操作程序设计是在VC+6.0实现

18、环境下全过程演示。本程序已调试成功并实现了其功能。其运行结果如下:图6.1系统主界面:图6.2.1运行加法运算:图6.2.2运行加法运算:图6.3.1运行乘法运算:图6.3.2运行乘法运算:图6.4运行矩阵转置运算:图6.5系统退出界面:7 总结总通过本次实验,在我的学习理解上有很大的促进作用。单单对稀疏矩阵,我了解了由于矩阵在程序中常使用二维阵列表示,二维阵列的大小稀疏矩阵与使用的存储器空间成正比,如果多数的元素没有数据,则会造成存储器空间的浪费,为此,必须设计稀疏矩阵的阵列储存方式,利用较少的存储器空间储存完整的矩阵数据。 二维数组Amn中有N个非零元素,若Nm*n,则称A为稀疏矩阵。 由于稀疏矩阵中含有很多的0元素,在计算机中存储会浪费很多的空间,因此我们通常采用压缩存储的方法。主要参考资料1数据结构(C语言版),严蔚敏,清华大学出版社,20032数据结构题集,严蔚敏,清华大学出版社,20053数据结构(C语言版),刘大有,高等教育出版社,20044Data Structure with C+,William FordWilliam Topp,清华大学出版社,2003

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

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