 
         
         
         
         
        版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、更多课程设计、论文、毕业设计请访问:数据结构实验报告实验题目: 稀疏矩阵运算器问题描述:有输入界面(图形或文字界面都可),能区分加法和转置;能处理任意输入的典型数据和进行出错数据处理(例如加法,当第一个矩阵和第二个矩阵的行数和列数不相等时,不能运算);必须采用三元组作存储结构,不能采用数组等形式;输出要求用矩阵的形式输出(即习题集136页的形式)。实验目的:使用三元组实现稀疏矩阵的运算实验内容:写出程序并上机调试、通过。一、需求分析1、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示*矩阵的加法和转制运算器*1、稀疏矩阵的加法2、稀疏矩阵的转置输入要进行的项目的编号: 时输入要进行的
2、运算对应的数字。当出现“请输入矩阵的行数、列数和非零元个数(以空格隔开):”时输入矩阵的行数、列数和非零元素个数。当出现“请用三元组形式输入矩阵的元素(行 列 非零元素):”时输入矩阵中的所有非零元素的位置和值,这时将出现由输入的因素所生成的矩阵a。若在输入项目标号时输入的是1,接着会出现“请输入矩阵的行数、列数和非零元个数(以空格隔开):”,这时输入另一个矩阵的行数、列数和非零元素个数。当出现“请用三元组形式输入矩阵的元素(行 列 非零元素):”时输入另一个矩阵中的所有非零元素的位置和值。这时将会生成矩阵b和矩阵a+b若在输入项目标号时输入的是2,在出现矩阵a后会出现a的转置矩阵。3、程序的
3、执行包括:(1)构造三元组顺序表存储非零元的位置和值;(2)输入要进行的项目的编号;(3)生成矩阵a;(4)输出矩阵a;(5)判断要进行的运算。若为1,生成矩阵b并输出矩阵b和矩阵a+b;若为2,输出矩阵;(6)销毁矩阵;(7)结束4、本实验做一个类似于运算器的程序,实现矩阵的转置和加法运算,5、输入及输出示例:*矩阵的加法和转制运算器*1、稀疏矩阵的加法2、稀疏矩阵的转置输入要进行的项目的编号: 1请输入矩阵的行数、列数和非零元个数(以空格隔开):5 5 2请用三元组形式输入矩阵的元素(行 列 非零元素):1 2 63 5 19矩阵a:0 6 0 0 00 0 0 0 00 0 0 0 19
4、0 0 0 0 00 0 0 0 0 请输入矩阵的行数、列数和非零元个数(以空格隔开):5 5 51 1 31 5 92 3 83 4 113 5 6 矩阵b:3 0 0 0 90 0 8 0 00 0 0 11 60 0 0 0 0 0 0 0 0 0 a+b:3 6 0 0 90 0 8 0 0 0 0 0 11 250 0 0 0 0 0 0 0 0 0二 概要设计1基本操作本程序中,用三元组顺序表作为存储结构。(1)、creat(tsmatrix &m)操作结果:创建矩阵m。(2)、addsmatrix(tsmatrix a,tsmatrix b,tsmatrix &c,int n)初
5、始条件:矩阵a和b的行数和列数对应相等。操作结果:求矩阵a、b的和c=a+b。(3)、transposesmarix(tsmatrix *a,tsmatrix *b)初始条件:矩阵a、b已存在且a指向矩阵a,b指向矩阵b。操作结果:将a指向的矩阵转置到b指向的矩阵。(4)、print_smatrix(tsmatrix m)初始条件:矩阵m已存在操作结果:输出矩阵m2、模块调用图主程序模块创建三元组顺序表模块创建矩阵模块矩阵运算模块输出链表模块销毁矩阵模块三 详细设计1、每个模块:(1) 创建用于存储的三元组顺序表#define maxsize 40 /假设非零元素个数的最大值为40 typed
6、ef int elemtype; typedef struct int i,j; /非零元的行下标和列下标 elemtype e; /非零元的值 triple; typedef struct triple datamaxsize+1; int rposmaxrc+1; /各行第一个非零元在三元组的位置表 int hs,ls,fls; tsmatrix,*matrix; (2)、创建矩阵void creat(tsmatrix &m) int i,k; for(i=1;i=maxrc+1;i+) m.rposi=0; printf(请输入矩阵的行数、列数和非零元个数(以空格隔开):); scanf
7、(%d %d %d,&m.hs,&m.ls,&m.fls);/将得到的m矩阵的性质保存printf(请用三元组形式输入矩阵的元素(行 列 非零元素):n); for(i=1;i=m.fls;i+)scanf(%d %d %d,&m.datai.i,&m.datai.j,&m.datai.e);/将m中的非零元素记录,生成矩阵 for(i=1,k=1;i=m.hs;i+) m.rposi=k; while(m.datak.i=i & k=m.fls)k+; (3)、矩阵的运算1)矩阵加法void addsmatrix(tsmatrix a,tsmatrix b,tsmatrix &c,int n
8、) int a,b,temp,l; c.hs=a.hs;c.ls=a.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;elsetemp=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
9、=b.datab; c.datal+.e=n*b.datab+.e; while(a=a.fls)c.datal+=a.dataa+; while(bhs=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;(4)、输出函数void print_smatrix(tsmatrix m) int k,l,n; matrix p; p=&m
10、; 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); (5)、销毁矩阵void destory_smatrix(tsmatrix &m) m.hs=m.ls=m.fls=0; (6)、主函数void main() tsmatrix a,b,c; tsmatrix *p=&a,*q=&b;int flag,n; printf(t *矩阵的加法和转制运算器* n);printf(t
11、 1、稀疏矩阵的加法 n);printf(t 2、稀疏矩阵的转置 n);printf(输入要进行的项目的编号:); scanf(%d,&flag); creat(a); 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); addsmatrix(a,b,c,n);print_smatrix(c); else printf(错误!行列不一致n); break; case 2
12、: printf(a-b:n); transposesmarix(p,q); print_smatrix(b);break; default:printf(输入错误!n); destory_smatrix(a); destory_smatrix(b);destory_smatrix(c); 2、完整函数#include #include #include #define maxsize 40 /假设非零元素个数的最大值为40 #define maxrc 20/假设矩阵的最大行数为20 typedef int elemtype; typedef struct int i,j; /非零元的行下标和
13、列下标 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(请输入矩阵的行数、列数和非零元个数(以空格隔开):); scanf(%d %d %d,&m.hs,&m.ls,&m.fls);/将得到的m矩阵的性质保存printf(请用三
14、元组形式输入矩阵的元素(行 列 非零元素):n); for(i=1;i=m.fls;i+)scanf(%d %d %d,&m.datai.i,&m.datai.j,&m.datai.e);/将m中的非零元素记录,生成矩阵 for(i=1,k=1;i=m.hs;i+) m.rposi=k; while(m.datak.i=i & k=m.fls)k+; void addsmatrix(tsmatrix a,tsmatrix b,tsmatrix &c,int n)/矩阵相加 int a,b,temp,l; c.hs=a.hs;c.ls=a.ls;a=b=l=1;while(a=a.fls & b
15、=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;elsetemp=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.datab+.e; while(a=a.fls)c.datal+=a.dat
16、aa+; while(bhs=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 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
17、) printf(%5d,p-datan.e); n+; else printf(%5d,0); printf(n); printf(n); void destory_smatrix(tsmatrix &m)/销毁矩阵 m.hs=m.ls=m.fls=0; void main() tsmatrix a,b,c; tsmatrix *p=&a,*q=&b;int flag,n; printf(t *矩阵的加法和转制运算器* n);printf(t 1、稀疏矩阵的加法 n);printf(t 2、稀疏矩阵的转置 n);printf(输入要进行的项目的编号:); scanf(%d,&flag); creat(a); 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 淮北单招笔试试题及答案
- 惠安中考英语试卷及答案
- DB34-T 4146-2022 装配式生态护岸技术规范
- 绥化市绥棱县2025年十校联考最后数学试题含解析
- 燃气管道GIS平台数据整合与应用方案
- 邵逸夫护理笔试题目及答案
- 轻型钢结构抗震设计与实施方案
- 中央银行数字货币对商业银行体系的影响
- 国际储备多元化配置的安全性分析
- 火电厂技术难题攻关方案
- 严重精神障碍知识培训
- 聘请常年法律顾问项目投标书
- 生物制药行业的新革命:小分子合成技术
- GA 1804-2022危险化学品生产企业反恐怖防范要求
- 小学课外阅读书籍《王子与贫儿》PPT
- 三年级上册道德与法治说课教案-第一单元第1课《学习伴我成长》第二课时
- 公路勘测地形测绘内容与取舍要点有哪些
- WB/T 1066-2017货架安装及验收技术条件
- GB/T 16930.2-2021盲杖第2部分:性能要求和试验方法
- GB/T 14336-1993合成短纤维长度试验方法
- 微生物的分类与鉴定课件
 
            
评论
0/150
提交评论