1、题目:编制一个稀疏矩阵运算器的程序班级:计算机科学与技术四班姓名:奚明 学号:41012170源代码:/head.h#define MAXSIZE 10000typedef struct/稀疏矩阵的三元组顺序表存储表示int i,j; /该非零元的行下标和列下标int e;Triple;typedef structTriple dataMAXSIZE; /非零元三元组表,data0未用int rposMAXSIZE+1; /各行第一个非零元的位置表int mu,nu,tu; /矩阵的行数列数和非零元的个数RLSMatrix;void CreateSMatrix(RLSMatrix *T);vo
2、id AddRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q);void SubRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q);int MulTSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q);void PrintSMatrix(RLSMatrix Q) ;/main.cpp#include using namespace std;#include head.hvoid main()RLSMatrix M,N,Q;int i;do printf(tt*n); p
3、rintf(tt 稀疏矩阵运算器n);printf(tt*nn); printf(tt 1.矩阵相加nn); printf(tt 2.矩阵相减nn); printf(tt 3.矩阵相乘nn);printf(tt 4.退出nn);printf(tt 请选择: );scanf(%d,&i);if(i=4) goto end;else printf(n请输入第一个矩阵M:n); CreateSMatrix(&M); printf(n请输入第二个矩阵N:n); CreateSMatrix(&N); switch(i) case 1:AddRLSMatrix(M,N,&Q);break; case 2:
4、SubRLSMatrix(M,N,&Q);break; case 3:MulTSMatrix(M,N,&Q);break; default:break; PrintSMatrix(Q); getchar();getchar();end: ;while(i!=4);/xishujuzhen.cpp#include using namespace std;#include head.hvoid CreateSMatrix(RLSMatrix *T) /输入创建稀疏矩阵int k;printf( n请输入矩阵行数、列数及非零元个数: );scanf(%d%d%d,&T-mu,&T-nu,&T-tu)
5、;printf(n);if(T-tuMAXSIZE|T-mu21)printf(非零个数超出定义范围!出错!);exit(0);for(k=1;ktu;k+)printf(请输入第%d个非零元素的行数,列数及其值: ,k);scanf(%d%d%d,&T-datak.i,&T-datak.j,&T-datak.e);void AddRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) /稀疏矩阵相加int p,q,k=1;if(M.mu!=N.mu|M.nu!=N.nu)printf(你的输入不满足矩阵相加的条件!n);exit(1);Q-mu=M.m
6、u;Q-nu=M.nu;for(p=1,q=1;p=M.tu&qdatak.i=M.datap.i;Q-datak.j=M.datap.j;Q-datak.e=M.datap.e+N.dataq.e;p+;q+;k+;else if(M.datap.jdatak.i=M.datap.i;Q-datak.j=M.datap.j;Q-datak.e=M.datap.e;k+;p+;else if(M.datap.jN.dataq.j)Q-datak.i=N.dataq.i;Q-datak.j=N.dataq.j;Q-datak.e=N.dataq.e;k+;p+;else if(M.datap.i
7、datak.i=M.datap.i;Q-datak.j=M.datap.j;Q-datak.e=M.datap.e;k+;p+;else if(M.datap.iN.dataq.i)Q-datak.i=N.dataq.i;Q-datak.j=N.dataq.j;Q-datak.e=N.dataq.e;k+;q+;if(p!=M.tu+1)for(;pdatak.i=M.datap.i;Q-datak.j=M.datap.j; Q-datak.e=M.datap.e;k+;if(q!=N.tu+1)for(;qdatak.i=N.dataq.i;Q-datak.j=N.dataq.j;Q-dat
8、ak.e=N.dataq.e;k+;void SubRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) /稀疏矩阵相减int p,q,k=1;if(M.mu!=N.mu|M.nu!=N.nu)printf(你的输入不满足矩阵相减的条件!n);exit(1);Q-mu=M.mu;Q-nu=M.nu;for(p=1,q=1;p=M.tu&qdatak.i=M.datap.i;Q-datak.j=M.datap.j;Q-datak.e=M.datap.e-N.dataq.e;p+;q+;k+;else if(M.datap.jdatak.i=M.datap
9、.i;Q-datak.j=M.datap.j;Q-datak.e=M.datap.e;k+;p+;else if(M.datap.jN.dataq.j)Q-datak.i=N.dataq.i;Q-datak.j=N.dataq.j;Q-datak.e=-N.dataq.e;k+;p+;else if(M.datap.idatak.i=M.datap.i;Q-datak.j=M.datap.j;Q-datak.e=M.datap.e;k+;p+;else if(M.datap.iN.dataq.i)Q-datak.i=N.dataq.i;Q-datak.j=N.dataq.j;Q-datak.e
10、=-N.dataq.e;k+;q+;if(p!=M.tu+1)for(;pdatak.i=M.datap.i;Q-datak.j=M.datap.j; Q-datak.e=M.datap.e;k+;if(q!=N.tu+1)for(;qdatak.i=N.dataq.i;Q-datak.j=N.dataq.j;Q-datak.e=-N.dataq.e;k+;int MulTSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) /稀疏矩阵相乘int ccol=0,tp,brow,t,arow,p,q,i;int ctempMAXSIZE+1;if(M.nu!
11、=N.mu) printf(你的输入不满足矩阵相乘的条件!n);return 0; Q-mu=M.mu;Q-nu=N.nu;Q-tu=0;if(M.tu*N.tu!=0)for(arow=1;arow=M.mu;+arow)for(i=0;irposarow=Q-tu+1;if(arowM.mu) tp=M.rposarow+1;else tp=M.tu+1;for(p=M.rposarow;ptp;+p)brow=M.datap.j;if(browN.mu) t=N.rposbrow+1;else t=N.tu+1;for(q=N.rposbrow;qt;+q)ccol=N.dataq.j;
12、ctempccol+=M.datap.e*N.dataq.e;for(ccol=1;ccolnu;+ccol)if(ctempccol)if(+Q-tuMAXSIZE) return 0;Q-dataQ-tu.i=arow;Q-dataQ-tu.j=ccol;Q-dataQ-tu.e=ctempccol;return 1;void PrintSMatrix(RLSMatrix Q) /输出稀疏矩阵int k=1,row,line;printf(n运算结果: );if(Q.tu=0) printf(0);elsefor(row=1;row=Q.mu;row+)for(line=1;line=Q.nu;line+)if(Q.datak.i=row&Q.datak.j=line)printf(%d ,Q.datak+.e);else printf(0 );printf(nt );