c语言《数据结构》实验报告】稀疏矩阵运算的设计与实现.doc

上传人:e****s 文档编号:62407219 上传时间:2022-11-22 格式:DOC 页数:10 大小:47KB
返回 下载 相关 举报
c语言《数据结构》实验报告】稀疏矩阵运算的设计与实现.doc_第1页
第1页 / 共10页
c语言《数据结构》实验报告】稀疏矩阵运算的设计与实现.doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《c语言《数据结构》实验报告】稀疏矩阵运算的设计与实现.doc》由会员分享,可在线阅读,更多相关《c语言《数据结构》实验报告】稀疏矩阵运算的设计与实现.doc(10页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、数据结构实验报告实验题目: 稀疏矩阵运算器问题描述:有输入界面(图形或文字界面都可),能区分加法和转置;能处理任意输入的典型数据和进行出错数据处理(例如加法,当第一个矩阵和第二个矩阵的行数和列数不相等时,不能运算);必须采用三元组作存储结构,不能采用数组等形式;输出要求用矩阵的形式输出(即习题集136页的形式)。实验目的:使用三元组实现稀疏矩阵的运算实验内容:写出程序并上机调试、通过。一、需求分析1、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示*矩阵的加法和转制运算器*1、稀疏矩阵的加法2、稀疏矩阵的转置输入要进行的项目的编号: 时输入要进行的运算对应的数字。当出现“请输入矩阵的

2、行数、列数和非零元个数(以空格隔开):”时输入矩阵的行数、列数和非零元素个数。当出现“请用三元组形式输入矩阵的元素(行 列 非零元素):”时输入矩阵中的所有非零元素的位置和值,这时将出现由输入的因素所生成的矩阵A。若在输入项目标号时输入的是1,接着会出现“请输入矩阵的行数、列数和非零元个数(以空格隔开):”,这时输入另一个矩阵的行数、列数和非零元素个数。当出现“请用三元组形式输入矩阵的元素(行 列 非零元素):”时输入另一个矩阵中的所有非零元素的位置和值。这时将会生成矩阵B和矩阵A+B若在输入项目标号时输入的是2,在出现矩阵A后会出现A的转置矩阵。3、程序的执行包括:(1)构造三元组顺序表存储

3、非零元的位置和值;(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 190 0 0 0 00 0 0 0 0

4、 请输入矩阵的行数、列数和非零元个数(以空格隔开):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)初始条件:矩阵A和B的行数和列数对应相

5、等。操作结果:求矩阵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 typedef int ElemType; t

6、ypedef 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(%d %d %d,&M.hs,&M

7、.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; ls)k+; (3)、矩阵的运算1)矩阵加法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

8、=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=B.datab; C.datal+.e=n*B.datab+.e; while(a=

9、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; for(k=1,n=1;khs;k+) for(l=1;lls;l+) if(p-

10、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 1、稀疏矩阵的加法 n);printf(t 2、稀疏矩阵的转置 n);printf(

11、输入要进行的项目的编号:); 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: printf(A-B:n); TransposeSMarix(p,q); Prin

12、t_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; /非零元的行下标和列下标 ElemType e; /非零元的值 Triple; typedef stru

13、ct 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(请用三元组形式输入矩阵的元素(行 列 非零元素):n); for(i=1;i=M.fls;i

14、+)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=B.fls) if(A.dataa.i=B.datab.i) if(A.dataa.

15、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.dataa+; while(bhs=a-ls;b-ls=a-hs;b-fls=a-fls;i

16、f(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) printf(%5d,p-datan.e); n+; else printf(%5

17、d,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); s

18、witch(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: printf(A-B:n); TransposeSMarix(p,q); Print_SMatrix(B);break; default:printf(输入错误!n); Destory_SMatrix(A); Destory_SMatrix(B);Destory_SMatrix(C); 五、实验总结教师评语:实验成绩:指导教师签名: 批阅日期:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理手册

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com