稀疏矩阵的运算完美版.docx
抑*祢嗜/唐专业课程设计I报告(2011/2012学年第二学期)题目稀疏矩阵的转换专业学生姓名班级学号指导教师指导单位日期软件工程张鹏宇09003018张卫丰计算机学院软件工程系2012年6月18号指导教师成绩评定表学生姓名班级学号专业评分内容评分标准优秀良好中等差平时成绩认真对待课程设计,遵守实验室规定,上机不迟到早退,不做和设计无关的事设计成果设计的科学、合理性功能丰富、符合题目要求界面友好、外观漂亮、大方程序功能执行的正确性程序算法执行的效能设计报告设计报告正确合理、反映系统设计流程文档内容详实程度文档格式规范、排版美观验收答辩简练、准确阐述设计内容,能准确有条理回答各种问题,系统演示顺利。评分等级指导教师简短评语指导教师签名日期备注评分等级有五种:优秀、良好、中等'及格、不及格附件:稀疏矩阵的转换一、课题内容和要求1 .问题描述设计程序用十字链表实现稀疏矩阵的加、减、乘、转置。2 .需求分析(1)设计函数建立稀疏矩阵,初始化值。(2)设计函数输出稀疏矩阵的值。(3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。(4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。(5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。(6)构造函数进行稀疏矩阵的转置,并输出结果。(7)退出系统。二、设计思路分析(1)设计函数建立稀疏矩阵,初始化值。(2)设计函数输出稀疏矩阵的值。(3)构造函数进行两个稀疏矩阵相加,输出最终的稀疏矩阵。(4)构造函数进行两个稀疏矩阵相减,输出最终的稀疏矩阵。(5)构造函数进行两个稀疏矩阵的相乘,输出最终的稀疏矩阵。(6)构造函数进行稀疏矩阵的转置,并输出结果。(7)退出系统。三、概要设计为了实现以上功能,可以从3个方面着手设计。1 .主界面设计为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主2 控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。本系统主控菜单运行界面如图所示。3 .存储结构设计本系统采用单链表结构存储稀疏矩阵的具体信息。其中:全部结点的信息用头结点为指针数组的单链表存储。4 .系统功能设计本系统除了要完成稀疏矩阵的初始化功能外还设置了4个子功能菜单。稀疏矩阵的初始化由函数itypedefintEIemType实现。建立稀疏矩阵用voidGreatO实现,依据读入的行数和列数以及非零元素的个数,分别设定每个非零元素的信息。4个子功能的设计描述如下。(1)稀疏矩阵的加法:此功能由函数voidXiangjia()实现,当用户选择该功能,系统即提示用户初始化要进行加法的两个矩阵的信息。然后进行加法,最后输出结果。(2)稀疏矩阵的乘法:此功能由函数voidXiangCheng()实现。当用户选择该功能,系统提示输入要进行相乘的两个矩阵的详细信息。然后进行相乘,最后得到结果。(3)稀疏矩阵的转置:此功能由函数voidZhuanzhi()实现。当用户选择该功能,系统提示用户初始化一个矩阵,然后进行转置,最终输出结果。(4)退出:即退出稀疏矩阵的应用系统。由函数5实现,但用户选择此功能时,系统会提示你是否确实想退出,如果是,则退出,否则继续。三、模块设计1 .模块设计本程序包含1个模块:主程序模块加各功能实现模块。2 .系统子程序及功能设计本系统共设置7个子程序,各子程序的函数名及功能说明如下。(1)typedefintEIemType,&i.j,&i.e);1for(i=1,k=1;i<=;i+)(i=k;whi1ek.i<=i&&k<=k+;)voidXiangjia(TSMatrixA,TSMatrixB,TSMatrix&C,intn)inta,b,temp,I;a=b=1=1;whi1e(a<=&&b<=(ifa.i=b.i)(ifa.j<b.j)I+=a+;eIseifa.j>b.j)=b;I+,e=n*b+.e;eIsetemp=a.e+n*b.e;if(temp)(=a;I.e=temp;I+;)a+;b+;)eIseifa.i<b.i)I+=a+;eIse=b;I+.e=n*b+.e;)whi1e(a<=I+=a+;whi1e(b<=b;I+.e=n*b+.e;=1-1;)intXiangcheng(TSMatrixA,TSMatrixB,TSMatrix&Q)(intarow,brow,ccoI,tp,p,q,t;intctempMAXRC+1;if!=return0;=;=;=0;if*(for(arow=1;arow<=;arow+)(for(ccoI=1;ccoI<=;ccoI+)ctempccoI-O;arow=+1;if(arow<tp=arow+1;eIsetp-+1;for(p=arow;p<tp;p+)(brow=p.j;if(brow<t=brow+1;eIset=+1;for(q-brow;q<t;q+)cco1=q.j;ctempccoI+=p.e*q.e;)for(ccoI=1;ccoK=;ccoI+)(if(ctempcco1)if(+>MAXSIZE)returnO;.i=arow;.j=cco1;.e=ctempcco1;)return1;voidPrint_SMatrix(TSMatrixM)(intk,I,n;Matrixp;P二&M;for(k=1,n=1;k<=p->hs;k+)for(1=1;1<=p->1s;1÷+)if(p->datan.i=k&&p->datan.j=1)(printf(,%5d",p->datan.e);n+;)eIseprintf("%5d'1,0);)printf(',n");1printf("n");)voidZhuanzhi(TSMatrix*a,TSMatrix*b)(intq,co1,p;b->hs=a->1s;b->Is=a->hs;b->f1s=a->fIs;if(b->f1s)(q=1;for(co1=1;co1<=a->Is;co1+)for(p=1;p<=a->fIs;p+)if(a->datap.j-coI)b->dataq.i-a->datap.j;b->dataq.j=a->datap.i;b->dataq.e=a->datap.e;+q;1)voidDestory_SMatrix(TSMatrix&M)(0;1voidmainO(TSMatrixA,B,C;TSMatrix*p=&A,*q=&B;intf1ag,n;whi1e(1)(system("cis");printf(',nnn");printf(,ti1n");printf("tI*稀疏矩阵的加、减、转、乘*In");printf("tIprintf("tI);printf("tI);printf("tI);printf("tI);printf("tI);printf("t,n");1、稀疏矩阵的加法2、稀疏矩阵的减法3、稀疏矩阵的转置4、稀疏矩阵的乘法5、退出该应用程序intf(”输入要进行的项目的编号:");Prscanf("%d",&f1ag);if(fIag=5)break;Great(A);Printf("矩阵A:n");Print_SMatrix(A);switch(f1ag)case1:Great(B);n=1;Printf("矩阵B:n");Print_SMatrix(B);if=&&=printf(,A+Bn");Xiangjia(ArB,C1n);Print_SMatrix(C);e1sePrintf("错误!行列不一致n");break;case 2: Creat(B);n=-1;Printf("矩阵B:n");Print_SMatrix(B);if&&二二(printf("A-B:n");Xiangjia(A,B,C,n);Print_SMatrix(C);)e1sePrintf(”错误!行列不一致n");break;case 3: printf("A->B:n");Zhuanzhi(p,q);Print_SMatrix(B);break;case4:Great(B);Printf("矩阵B:n");Print_SMatrix(B);printf("A*B:n");n=Xiangcheng(A,B,C);if(!n)printf(”错误!行列不匹配n");eIsePrint_SMatrix(C);break;defau1t:Printf("输入错误!n");Destory_SMatrix(A);Destory_SMatrix(B);Destory_SMatrix(C);getchar();getchar();)printf(',nttt*程序已经退出*r');getchar();五、测试数据及其结果分析:DOCUIE1SAHDSETTnKJSJSZXX桌面新建文件夹09003018De1I稀疏矩阵的加、减、转、乘*»*Wb加减荽程的的的的用½½应矩矩矩矩该疏疏疏疏出退12 3 4 5输入要进行的项目的编号:.*C:DOCUIE1TSAHDSETTniGSJSZX桌面新建文件夹09003018Debug09003018.狗疏矩隹的加法稀疏矩阵的减法覆疏矩用的黄置格疏矩阵的照茬退出该应用程序1、2、3、4、8格陨开:222O>=a21数列列M源韭兀元 Jls的8编列烟烟的、入入目数档项一至式的的组组进矩元元数以空格隔开:223列非菱元素:113125224列菲零元聚:请用三元组形式输入矩阵的元素行列Io1要入三三11入输用用地晌清请元 Sf非元元g的列矩题、入入数翦B:变式阵的形形矩组>:矩元元素