




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数 据 结 构 课 程 设 计设计题目:基于三元组表关于稀疏矩阵的基本操作 21课题名称基于三元组表关于系数矩阵的基本操作院 系年级专业学 号姓 名成 绩课题设计目的与设计意义1、课题设计目的:(1)掌握基于三元组表关于稀疏矩阵的基本操作,并通过相关的程序代码实现。(2)培养学生的编程能力、用计算机解决实际问题的能力。(3)了解软件的编制过程。2、课题设计意义:利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。大型稀疏矩阵技术的研究对解决广泛应用于计算科学、工程技术以及人文科学中的大型稀疏矩阵问题,具有重要的理论意义和实用价值。许多科学问题的计算尤其是大量的实际应用问题,通常被归结为稀疏矩阵的计算。因此研究稀疏矩阵的计算具有很重要的意义。指导教师:年 月 日目 录一、基本概念11.1转置矩阵11.2稀疏矩阵11.3三元组表1二、需求分析12.1基本要求12.2设计环境12.3建立矩阵12.4基本运算操作12.5测试12.6退出1三、概要设计13.1程序设计思想13.2主函数模块23.3自定义子程序模块2四、详细设计34.1程序的建立34.2 “菜单”界面34.3各个函数的详细设计34.3.1矩阵转置函数34.3.2矩阵相加函数44.3.3矩阵相减函数74.4退出程序9五、运行与测试105.1矩阵转置105.2矩阵相加115.3矩阵相减12六、总结和心得12七、附程序源代码13八、附 参考文献22一、基本概念1.1转置矩阵若将矩阵A的行换成相应的列,得到的新矩阵称为A的转置矩阵。1.2稀疏矩阵设矩阵Amn中有s个非零元素,若s远远小于矩阵元素的总数,则称A为稀疏矩阵。1.3三元组表若将表示稀疏矩阵的非零元素三元组按行优先(或者列优先)的顺序排列(跳过零元素),则得到一个其结点均是三元组的线性表。我们将该线性表的顺序存储结构称为三元组表。二、需求分析2.1基本要求(1)要求用C+语言编程,在Visual C+环境下调试完成;(2)要求使用C+的结构体和自定义函数完成设计;(3)在VC+6.0环境中,学会调试程序的方法,及时查究错误,独立调试完成;(4)程序调试通过后,完成程序文档的整理。2.2设计环境(1)WINDOWS 2000/7/XP系统(2)Visual C+集成开发环境2.3建立矩阵首先输入A和B矩阵的行数和列数,只有先建立了矩阵,才能够对矩阵进行运算操作。2.4基本运算操作转置运算先输入一个矩阵,再输出相应的转置矩阵。加减运算操作由两个矩阵同时参与,对其进行加法运算和减法运算。2.5测试输入数据并打印出结果。2.6退出当做完矩阵的运算操作后,根据提示退出该界面。程序存储用三元组表表示,按行优先表示。在三元组表表示稀疏矩阵的运算结果矩阵另生成。三、概要设计3.1程序设计思想(1)输出存储矩阵的算法(2)存储稀疏矩阵用三元组表表示(3)稀疏矩阵的操作算法编写(4)输出稀疏矩阵3.2主函数模块void main() 主要包括对子函数的调用,以及结束程序等。3.3自定义子程序模块输入A矩阵void creata(spmatrix *a)输入B矩阵void creatb(spmatrix *a)输入需要转置的矩阵void creatc(spmatrix *a)输出三元组表void print(spmatrix *a)输出矩阵void printjuzhen(spmatrix *a)转置函数spmatrix *transmat(spmatrix *a)相加函数spmatrix * xiangjia(spmatrix *a,spmatrix *b)相减函数spmatrix * xiangjian(spmatrix *a,spmatrix *b)3.4具体实现流程图开始输入一个矩阵输入A矩阵输入B矩阵函数调用结束输出AB矩阵的和输出AB矩阵的差输出该矩阵的转置矩阵四、详细设计4.1程序的建立定义相关结构类型及其他:#define smax 16typedef int datatype;typedef structint i,j;datatype v;node;typedef structint m,n,t;node datasmax;spmatrix;4.2 “菜单”界面进入稀疏矩阵运算系统后的“菜单”界面如下图1所示 图1 “菜单”界面4.3各个函数的详细设计4.3.1矩阵转置函数函数如下spmatrix *transmat(spmatrix *a)int pa,pb,col;spmatrix *b;b=(spmatrix *)malloc(sizeof(spmatrix);b-m=a-n;b-n=a-m;b-t=a-t;if(b-t0)pb=0;for(col=0;cola-n;col+)for(pa=0;paa-t;pa+)if(a-datapa.j=col)b-datapb.i=a-datapa.j;b-datapb.j=a-datapa.i;b-datapb.v=a-datapa.v;pb+;return(b); 4.3.2矩阵相加函数函数如下spmatrix * xiangjia(spmatrix *a,spmatrix *b)spmatrix *c;int pa=0,pb=0,pc=0,sum=0;c=(spmatrix *)malloc(sizeof(spmatrix);if(a-m=b-m)(a-n=b-n)c-m=a-m;c-n=a-n;while(paa-tpbb-t)if(a-datapa.i=b-datapb.i)if(a-datapa.j=b-datapb.j)sum=a-datapa.v+b-datapb.v;if(sum)c-datapc.v=sum;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;pb+;elseif(a-datapa.jb-datapb.j)if(a-datapa.v)c-datapc.v=a-datapa.v;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;elseif(b-datapb.v)c-datapc.v=b-datapb.v;c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;elseif(a-datapa.ib-datapb.i)if(a-datapa.v)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;elseif(b-datapb.v)c-datapc.v=b-datapb.v; c-datapc.i=b-datapb.i; c-datapc.j=b-datapb.j; pc+;pb+;elsereturn(0);while(paa-t)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;while(pbb-t)c-datapc.v=b-datapb.v; c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;c-t=pc;return(c);4.3.3矩阵相减函数函数如下spmatrix * xiangjian(spmatrix *a,spmatrix *b)spmatrix *c;int pa=0,pb=0,pc=0,sum=0;c=(spmatrix *)malloc(sizeof(spmatrix);if(a-m=b-m)(a-n=b-n)c-m=a-m;c-n=a-n;while(paa-tpbb-t)if(a-datapa.i=b-datapb.i)if(a-datapa.j=b-datapb.j)sum=a-datapa.v-b-datapb.v;if(sum)c-datapc.v=sum;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;pb+;elseif(a-datapa.jb-datapb.j)if(a-datapa.v)c-datapc.v=a-datapa.v;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;elseif(b-datapb.v)c-datapc.v=-(b-datapb.v);c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;elseif(a-datapa.ib-datapb.i)if(a-datapa.v)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;elseif(b-datapb.v)c-datapc.v=-(b-datapb.v); c-datapc.i=b-datapb.i; c-datapc.j=b-datapb.j; pc+;pb+;elsereturn(0);while(paa-t)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;while(pbb-t)c-datapc.v=-(b-datapb.v); c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;c-t=pc;return(c);4.4退出程序printf(tttt继续请按1ntttt退出请按0n); scanf(%d,i);如下图2 图2 退出程序五、运行与测试5.1矩阵转置图2如下 图2矩阵转置5.2矩阵相加图3如下 图3 矩阵相加5.3矩阵相减图4如下 图4 矩阵相减六、总结和心得首先必须了解稀疏矩阵的概念、存储及矩阵的基本运算,三元组表的存储表示,其次对三元组表的输入运算,加法运算的输入算法,必须上网认真了解,认真分析。最后,在对输入程序的运行情况做认真的错误分析,总结出错原因。通过这次实践,自己对软件有更深的了解,对计算机的硬件运行也有一定的认识。七、附程序源代码 #includestdio.h#define smax 16typedef int datatype;typedef structint i,j;datatype v;node;typedef structint m,n,t;node datasmax;spmatrix;void creatt(spmatrix *a)int k;printf(n 请输入一个矩阵的行数、列数、非零元素个数n);scanf(%d%d%d,a-m,a-n,a-t);printf(n 请输入该矩阵非零元素所在的行号、列号、非零元素的值n);for(k=0;ka-t;k+)scanf(%d%d%d,a-datak.i,a-datak.j,a-datak.v);void creata(spmatrix *a)int k;printf(n 请输入A矩阵的行数、列数、非零元素个数n);scanf(%d%d%d,a-m,a-n,a-t);printf(n 请输入该矩阵非零元素所在的行号、列号、非零元素的值n);for(k=0;ka-t;k+)scanf(%d%d%d,a-datak.i,a-datak.j,a-datak.v);void creatb(spmatrix *a)int k;printf(n 请输入B矩阵的行数、列数、非零元素个数n);scanf(%d%d%d,a-m,a-n,a-t);printf(n 请输入该矩阵非零元素所在的行号、列号、非零元素的值n);for(k=0;ka-t;k+)scanf(%d%d%d,a-datak.i,a-datak.j,a-datak.v);void print(spmatrix *a)int k;for(k=0;ka-t;k+)printf(%dt%dt%dn,a-datak.i,a-datak.j,a-datak.v);void printjuzhen(spmatrix *a)int k,p,l;int c55=0,0,0,0,0;for(k=0;ka-t;k+)ca-datak.ia-datak.j=a-datak.v;for(p=0;pa-m;p+)for(l=0;la-n;l+) printf(%dt,cpl);printf(n);spmatrix * xiangjia(spmatrix *a,spmatrix *b)spmatrix *c;int pa=0,pb=0,pc=0,sum=0;c=(spmatrix *)malloc(sizeof(spmatrix);if(a-m=b-m)(a-n=b-n)c-m=a-m;c-n=a-n;while(paa-tpbb-t)if(a-datapa.i=b-datapb.i)if(a-datapa.j=b-datapb.j)sum=a-datapa.v+b-datapb.v;if(sum)c-datapc.v=sum;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;pb+;elseif(a-datapa.jb-datapb.j)if(a-datapa.v)c-datapc.v=a-datapa.v;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;elseif(b-datapb.v)c-datapc.v=b-datapb.v;c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;elseif(a-datapa.ib-datapb.i)if(a-datapa.v)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;elseif(b-datapb.v)c-datapc.v=b-datapb.v; c-datapc.i=b-datapb.i; c-datapc.j=b-datapb.j; pc+;pb+;elsereturn(0);while(paa-t)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;while(pbb-t)c-datapc.v=b-datapb.v; c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;c-t=pc;return(c);spmatrix * xiangjian(spmatrix *a,spmatrix *b)spmatrix *c;int pa=0,pb=0,pc=0,sum=0;c=(spmatrix *)malloc(sizeof(spmatrix);if(a-m=b-m)(a-n=b-n)c-m=a-m;c-n=a-n;while(paa-tpbb-t)if(a-datapa.i=b-datapb.i)if(a-datapa.j=b-datapb.j)sum=a-datapa.v-b-datapb.v;if(sum)c-datapc.v=sum;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;pb+;elseif(a-datapa.jb-datapb.j)if(a-datapa.v)c-datapc.v=a-datapa.v;c-datapc.i=a-datapa.i;c-datapc.j=a-datapa.j;pc+;pa+;elseif(b-datapb.v)c-datapc.v=-(b-datapb.v);c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;elseif(a-datapa.ib-datapb.i)if(a-datapa.v)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;elseif(b-datapb.v)c-datapc.v=-(b-datapb.v); c-datapc.i=b-datapb.i; c-datapc.j=b-datapb.j; pc+;pb+;elsereturn(0);while(paa-t)c-datapc.v=a-datapa.v; c-datapc.i=a-datapa.i; c-datapc.j=a-datapa.j; pc+;pa+;while(pbb-t)c-datapc.v=-(b-datapb.v); c-datapc.i=b-datapb.i;c-datapc.j=b-datapb.j;pc+;pb+;c-t=pc;return(c);spmatrix *transmat(spmatrix *a)int pa,pb,col;spmatrix *b;b=(spmatrix *)malloc(sizeof(spmatrix);b-m=a-n;b-n=a-m;b-t=a-t;if(b-t0)pb=0;for(col=0;cola-n;col+)for(pa=0;paa-t;pa+)if(a-datapa.j=col)b-datapb.i=a-datapa.j;b-datapb.j=a-datapa.i;b-datapb.v=a-datapa.v;pb+;return(b); void main() spmatrix *a,*b,*c;int i,j;printf(nttt基于三元组表关于稀疏矩阵的基本操作n);while(i) printf(n#);printf(# ttttttt #); printf(#t矩阵转置请按1t矩阵相加请按2t矩阵相减请按3 #);printf(# ttttttt #); printf(#n);scanf(%d,j);switch(j)case 1: a=(spmatrix *)malloc(sizeof(spmatrix);c=(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025恒丰银行重庆分行社会招聘(5.22截止)模拟试卷及答案详解(夺冠)
- 2025海南三亚市第二人民医院第一次(考核)招聘员额制工作人员(第12号)考前自测高频考点模拟试题及答案详解(考点梳理)
- 2025年浙能武威能源有限公司招聘考前自测高频考点模拟试题及参考答案详解一套
- 奶茶店的服务合同7篇
- 2025广东佛冈县水头镇选拔储备村(社区)“两委”后备人员考前自测高频考点模拟试题有完整答案详解
- 2025江苏苏宿工业园区社区卫生服务招聘10人模拟试卷及答案详解(名师系列)
- 2025国网新源集团有限公司第二批高校毕业生录用人选的考前自测高频考点模拟试题及完整答案详解一套
- 2025湖南省气象部门事业单位第三轮公开招聘应届毕业生14人考前自测高频考点模拟试题及答案详解(各地真题)
- 2025汉中市南郑区审计局公益性岗位招聘(5人)模拟试卷及答案详解(有一套)
- 2025广西百色市平果市国有平果林场拟聘用编外人员考前自测高频考点模拟试题附答案详解(黄金题型)
- 华为供应商质量认可标准实施细则
- 少先队知识竞赛题及答案
- 天气现象科学课件
- 航海船舶航线选择指南
- 2025年中小学校长岗位竞聘面试题库及答案
- 沪粤版2024九年级物理上册新教材解读课件
- 2025年中国心血管病报告
- 客户价值共创机制-洞察及研究
- 医院保密教育培训课件
- 高一语文必修上第三单元必背篇目理解性默写 (教师版)
- 垃圾管理培训课件
评论
0/150
提交评论