1、 操作结果:建立三元列表b,并想稀疏矩阵内输入数据addmtirx( &a, &b, &c); 初始条件:存在两个不为空稀疏矩阵和一个空的三元列表操作结果 :将两个稀疏矩阵相加,并将得数存储在c中transposesmatrix(&a,&b);初始条件:存在一个不为空稀疏矩阵和一个空的三元列表将含有数据的稀疏矩阵转置,并将得数存储在b中multmatrix(&b,&将两个稀疏矩阵相乘,并将得数存储在c中submtirx(&c)将两个稀疏矩阵相加减,并将得数存储在c中Out put ( )存放稀疏矩阵三元列表存在输出计算后的稀疏矩阵2 本程序包含三个模块:(1)主程序模块;(2)输入需要计算的稀
2、疏矩阵(3)选择计算方法,并计算(4)输出计算后的矩阵(5)模块调用图: 主程序模块输入需要计算的稀疏矩阵选择计算方法,并计算输出计算后的矩阵4 详细设计1元素类型,列表类型和指针类型:# include#include #define maxsize 100typedef int datatype;typedef struct/定义三元组 int i,j; datatype x;matrix;typedef struct/定义三元组表 matrix datamaxsize; int mu,nu,tu;/矩阵行,列,非零元个数tripulematrix;2每个模块的分析:(1)主程序模块:vo
3、id main() printf(-矩 阵 计 算-n);请选择你需要的计算方式n-1.稀疏矩阵的转置-n-2.稀疏矩阵的加法-n-3.稀疏矩阵的减法-n-4.稀疏矩阵的乘法-n-5.退 出-n char x; scanf(%c,&x); tripulematrix a,b,c; switch(x) case 1: /tripulematrix a,b; printf(请输入矩阵的行数与列数n scanf(%d%da.mu,&a.nu); b.mu=a.mu; b.nu=a.nu; printf(请输入一个矩阵,例如:n1 2 3n2 3 4n4 5 6n请输入n input(&a); tra
4、nsposesmatrix(& output(& break; case 2 / tripulematrix a,b,c;请输入两个矩阵,例如:请输入第一个矩阵n请输入第二个矩阵n addmtirx( &3 /tripulematrix a,b,c; scanf( b.mu=a.mu; b.nu=a.nu; printf( input(& submtirx(& break;4 multmatrix(& break;5 exit(0); system(pause (2)输入数据void input (tripulematrix *a) int i,j ,k=0; for (i=0;imu;i+)
5、 for (j=0;jdatak.i=i;datak.j=j; a-datak.x=x; k+; a-tu=k;/input(3)加法datatype addmtirx(tripulematrix *a,tripulematrix *b,tripulematrix *c) int k=0,l=0; c-mu=a-nu=a-tu=0; while (ktu<u) if (a-datak.i=b-datal.i)&(a-datak.j=b-datal.j) int temp=a-datak.x+b-datal.x; if (temp!= 0) c-datac-tu.x=a-tu.i=a-dat
6、ak.i; c-tu.j=a-datak.j;tu+; k+;l+; elsedatak.jdatak.jdatal.j)|(a-datak.idatal.i)tu.i=b-datal.i; c-tu.j=b-datal.j;tu.x=b- l+; while(k while(ldatak.x-b- /if (temp! / / if (a-datal.j)|(a-datak.i c-tu.x=-b- l+; while(k while(ltu=a-tu; if(b- q=0; for(col=0;colcol+) for(p=0;pdatap.j=col) b-datap.i=a-dataq
7、.j;datap.j=a-dataq.i;datap.x=a-dataq.x; q+;/稀疏矩阵的转置算法(六)乘法int multmatrix(tripulematrix *a,tripulematrix *b, tripulematrix *c) int rpos1maxsize,rpos2maxsize,nummaxsize,rpos3maxsize; int row1,row2,arow,tp,t,brow,ccol,p,q,k; int ctempmaxsize; if (a- for (row1=0;row1datarow1.i; rpos10=0; for(row1=1; rpo
8、s1row1=rpos1row1-1+numrow1-1; if (b- for (row2=0;row2datarow2.i; rpos20=0; for(row2=1;row2+) rpos2row2=rpos2row2-1+numrow2-1;c-nu=b- if(a-tu*b-tu ! for (arow=0;arowarow+) for(k=0;ktu+1; if (arow for (p=rpos1arow;tp; brow=a-datap.j;/找到对应元在b中的行号 if (brow for (q=rpos2brow;q/乘积元素在Q中的列号 ctempccol += (a-d
9、atap.x)*(b-dataq.x); for(ccol=0;ccoltumaxsize) return 0;tu.i=arow;tu.j=ccol;tu.x=ctempccol; return 1;(4)函数调用关系图main()input(& submtirx(&output();5 程序使用说明及测试结果1程序使用说明(1)本程序的运行环境为VC6.0。(2)进入演示程序后即显示提示信息:-矩 阵 计 算-请选择你需要的计算方式-1.稀疏矩阵的转置-2.稀疏矩阵的加法-3.稀疏矩阵的减法-4.稀疏矩阵的乘法-5.退 出-1请输入矩阵的行数与列数3 31 2 31 1 1得出: 2 1
10、1 3 1 1请按任意键继续. . . 3调试中的错误及解决办法。(1) 转置出现问题(2) 输出时无法利用数组第一个空间(3) 三元表定义是无rpos(每行第一个非零元位置)解决方式:逐步调试,以及问同学,自己更改算法,计算出rpos6 致谢经过1个月的忙碌和努力,此次论文设计也将基本完成。作为一个本科生的论文,由于我自身经验的匮乏及学识所限,不可避免仍有许多疏忽错漏的细节。如果没有导师的督促指点,以及一起研究的同学们的支持和鼓励,完成这次毕业设计就将是愚公移山,断不可行。在此次论文写作过程中,老师对我的亲切关怀和耐心指导尤其激励着我。她恭肃的学术态度,严谨的治学精神,认真专注的工作作风,给我留下深刻的印象并成为我今后学习生活的目标。从最初的选择课题到最终完成论文,老师都始终非常耐心的指导和帮助我。 衷心感谢各位老师在百忙中评阅本论文,并提出了宝贵意见。本文引用了数位学者的研究文献,正是各位学者的研究成果才启发我完成了本篇论文的写作。 由于我的个人水平局限,这篇论文难免有不足之处,恳请各位老师批评指正!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1