欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    语言数据结构实验报告稀疏矩阵运算是的与实现.doc

    • 资源ID:4676773       资源大小:83.53KB        全文页数:10页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    语言数据结构实验报告稀疏矩阵运算是的与实现.doc

    更多课程设计、论文、毕业设计请访问:数据结构实验报告实验题目: 稀疏矩阵运算器问题描述:有输入界面(图形或文字界面都可),能区分加法和转置;能处理任意输入的典型数据和进行出错数据处理(例如加法,当第一个矩阵和第二个矩阵的行数和列数不相等时,不能运算);必须采用三元组作存储结构,不能采用数组等形式;输出要求用矩阵的形式输出(即习题集136页的形式)。实验目的:使用三元组实现稀疏矩阵的运算实验内容:写出程序并上机调试、通过。一、需求分析1、演示程序以用户和计算机的对话方式执行,即在计算机终端上显示*矩阵的加法和转制运算器*1、稀疏矩阵的加法2、稀疏矩阵的转置输入要进行的项目的编号: 时输入要进行的运算对应的数字。当出现“请输入矩阵的行数、列数和非零元个数(以空格隔开):”时输入矩阵的行数、列数和非零元素个数。当出现“请用三元组形式输入矩阵的元素(行 列 非零元素):”时输入矩阵中的所有非零元素的位置和值,这时将出现由输入的因素所生成的矩阵A。若在输入项目标号时输入的是1,接着会出现“请输入矩阵的行数、列数和非零元个数(以空格隔开):”,这时输入另一个矩阵的行数、列数和非零元素个数。当出现“请用三元组形式输入矩阵的元素(行 列 非零元素):”时输入另一个矩阵中的所有非零元素的位置和值。这时将会生成矩阵B和矩阵A+B若在输入项目标号时输入的是2,在出现矩阵A后会出现A的转置矩阵。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 190 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)初始条件:矩阵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 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; (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.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) 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.j<B.datab.j)C.datal+=A.dataa+; else if(A.dataa.j>B.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.i<B.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(b<=B.fls)C.datal=B.datab; C.datal+.e=n*B.datab+.e; C.fls=l-1; 2)矩阵转置void TransposeSMarix(TSMatrix *a,TSMatrix *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;col<=a->ls;col+) for(p=1;p<=a->fls;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;k<=p->hs;k+) for(l=1;l<=p->ls;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 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: 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<stdio.h> #include<malloc.h> #include<stdlib.h> #define MAXSIZE 40 /假设非零元素个数的最大值为40 #define MAXRC 20/假设矩阵的最大行数为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("请输入矩阵的行数、列数和非零元个数(以空格隔开):"); scanf("%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+; 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.j<B.datab.j)C.datal+=A.dataa+; else if(A.dataa.j>B.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.i<B.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(b<=B.fls)C.datal=B.datab; C.datal+.e=n*B.datab+.e; C.fls=l-1; void TransposeSMarix(TSMatrix *a,TSMatrix *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;col<=a->ls;col+) for(p=1;p<=a->fls;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;k<=p->hs;k+) for(l=1;l<=p->ls;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 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=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); 五、实验总结教师评语:实验成绩:指导教师签名: 批阅日期: 10

    注意事项

    本文(语言数据结构实验报告稀疏矩阵运算是的与实现.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开