版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include iomanip.h #include iostream.h #include conio.h #include stdio.h #include string.h #include stdlib.h #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 typedef int Status ; typedef int ElemType; #define MAXSIZE 100 / 非零元个数的最大值 #define SIZENUM 10 typedef struct int i,j; / 行下标,列下标 Ele
2、mType e; / 非零元素值 Triple; typedef struct Triple dataMAXSIZE+1; / 非零元三元组表,data0未用 int mu,nu,tu; / 矩阵的行数、列数和非零元个数 TSMatrix; void create(TSMatrix &TM); /创建矩阵 void disp(TSMatrix TM); /通常形式输出稀疏矩阵 Status LocateELem(TSMatrix M,int i,int j,int e); /三元组表中是否存在非零元素Aij,若存在返回e void InsertSortMatrix(TSMatrix &TM);
3、 /根据对矩阵的行列,三元组TM作直接插入排序 Status TransposeSMatrix(TSMatrix M,TSMatrix &T); /矩阵转置的算法 Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /矩阵的加法运算:C=A+B Status SubTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /矩阵的减法运算:C=A-B Status MultSMatrix(TSMatrix A,TSMatrix B,TSMatrix &C); /矩阵的乘法运算:C=AB void NiMatrix(TSMat
4、rix &TM); /矩阵求逆 /-创建矩阵-/ void create(TSMatrix &TM) int i,j,i1,j1,n,e; coutijn; TM.mu=i;TM.nu=j;TM.tu=0; if(TM.mu1|TM.nu1) cout输入有误!endl; for(int k=1;k=n;k+) cout第ki1j1e; if(i1TM.mu|j1TM.nu|e=0) cout输入有误!endl; k-; else if(LocateELem(TM,i1,j1,e)=1) cout元素已经存在!endl; k-; else TM.datak.i=i1;TM.datak.j=j1
5、;TM.datak.e=e;TM.tu+; InsertSortMatrix(TM); Status LocateELem(TSMatrix M,int i,int j,int e) /三元组表中是否存在非零元素Aij,若存在返回e int k; for(k=1;k=M.tu;k+) if(M.datak.i=i&M.datak.j=j) e=M.datak.e; return TRUE; return FALSE; void InsertSortMatrix(TSMatrix &TM) /根据对矩阵的行列,三元组TM作直接插入排序 int i,j; for(i=2;i=TM.tu;i+) i
6、f(TM.datai.iTM.datai-1.i|TM.datai.i=TM.datai-1.i&TM.datai.jTM.datai-1.j) TM.data0.i=TM.datai.i; TM.data0.j=TM.datai.j; TM.data0.e=TM.datai.e; for(j=i-1;TM.data0.iTM.dataj.i|TM.data0.i=TM.dataj.i&TM.data0.jTM.dataj.j;-j) TM.dataj+1.i=TM.dataj.i; TM.dataj+1.j=TM.dataj.j; TM.dataj+1.e=TM.dataj.e; TM.da
7、taj+1.i=TM.data0.i; TM.dataj+1.j=TM.data0.j; TM.dataj+1.e=TM.data0.e; /-通常形式输出稀疏矩阵-/ void disp(TSMatrix TM) int i,j,k,flag=1; for(i=1;i=TM.mu;i+) coutsetw(6); for(j=1;j=TM.nu;j+) for(k=1;k=TM.tu;k+) if(i=TM.datak.i&j=TM.datak.j) coutTM.datak.esetw(6);flag=0; if(flag) cout0setw(6); flag=1; coutendl;
8、/-矩阵转置的算法-/ Status TransposeSMatrix(TSMatrix M,TSMatrix &T) int col,p,q; T.mu=M.nu;T.nu=M.mu;T.tu=M.tu; if(M.tu) q=1; for(col=1;col=M.nu;col+) for(p=1;p=M.tu;p+) if(M.datap.j=col) T.dataq.i=M.datap.j; T.dataq.j=M.datap.i; T.dataq.e=M.datap.e; +q; return OK; /-矩阵加算法-/ Status AddTSM(TSMatrix A,TSMatri
9、x B,TSMatrix &C) /* 三元组表示的稀疏矩阵加法: C=A+B */ int n=1,m=1,k=1; ElemType temp; if(A.mu=B.mu&A.nu=B.nu) while(m=A.tu&n=B.tu) /若A当前元素的行号等于B当前元素的行号,则比较其列号,将较小列的元素 /存入C中,如果列号也相等,则将对应的元素值相加后存入C中 if(A.datam.i=B.datan.i) if(A.datam.jB.datan.j) C.datak.i=B.datan.i; C.datak.j=B.datan.j; C.datak.e=B.datan.e; k+;n
10、+; else temp=A.datam.e+B.datan.e; if(temp!=0)/不为0才添加到C中 C.datak.i=A.datam.i; C.datak.j=A.datam.j; C.datak.e=temp; k+; m+;n+; /若A当前元素的行号小于B当前元素的行号,则将A的元素存入C中 else if(A.datam.iA.tu&n=B.tu) for( ;nB.tu&m=A.tu) for( ;m=A.tu;m+) C.datak.i=A.datam.i; C.datak.j=A.datam.j; C.datak.e=A.datam.e; k+; C.mu=A.mu
11、; C.nu=A.nu; C.tu=k-1; return OK; else return ERROR; /-矩阵的减法运算-/ Status SubTSM(TSMatrix A,TSMatrix B,TSMatrix &C) /* 三元组表示的稀疏矩阵减法: C=A+B */ int n=1,m=1,k=1; ElemType temp; if(A.mu=B.mu&A.nu=B.nu) while(m=A.tu&n=B.tu) /若A当前元素的行号等于B当前元素的行号,则比较其列号,将较小列的元素 /存入C中,如果列号也相等,则将对应的元素值相减后存入C中 if(A.datam.i=B.da
12、tan.i) if(A.datam.jB.datan.j) C.datak.i=B.datan.i; C.datak.j=B.datan.j; C.datak.e=-B.datan.e; k+;n+; else temp=A.datam.e-B.datan.e; if(temp!=0)/不为0才添加到C中 C.datak.i=A.datam.i; C.datak.j=A.datam.j; C.datak.e=temp; k+; m+;n+; /若A当前元素的行号小于B当前元素的行号,则将A的元素存入C中 else if(A.datam.iB.datan.i) C.datak.i=A.datam
13、.i; C.datak.j=A.datam.j; C.datak.e=A.datam.e; k+;m+; /若A当前元素的行号大于B当前元素的行号,则将B的元素存入C中 else C.datak.i=B.datan.i; C.datak.j=B.datan.j; C.datak.e=-B.datan.e; k+;n+; /把剩余部分元素存入C中 if(m=A.tu) for( ;m=A.tu;m+) C.datak.i=A.datam.i; C.datak.j=A.datam.j; C.datak.e=A.datam.e; k+; if(n=B.tu) for( ;n=B.tu;n+) C.d
14、atak.i=B.datan.i; C.datak.j=B.datan.j; C.datak.e=-B.datan.e; k+; C.mu=A.mu; C.nu=A.nu; C.tu=k-1; return OK; else return ERROR; int value(TSMatrix T,int i,int j) /得到Tij的值 int k; for(k=1;k=T.tu;k+) if(T.datak.i=i&T.datak.j=j) return T.datak.e; return 0; /-矩阵乘法运算的算法-/ Status MultSMatrix(TSMatrix A,TSMa
15、trix B,TSMatrix &C) int i,j,k,sum,p=1; for(i=1;i=A.mu;i+) for(j=1;j=B.nu;j+) sum=0; for(k=1;k2) for(z=0;zn;z+) for(j=0;jn-1;j+) for(k=0;k=z) bjk=sj+1k+1; else bjk=sj+1k; if(z%2=0) r=s0z*JsMatrix(b,n-1); /*递归调用*/ else r=(-1)*s0z*JsMatrix(b,n-1); total=total+r; else if(n=2) total=s00*s11-s01*s10; retu
16、rn total; void N1Matrix(int sSIZENUM,float bSIZENUM,int n) /N1Matrix()函数用于求原矩阵各元素对应的余子式,存放在数组bnn中,定义为float型 int z,j,k,l,m,g,aSIZENUMSIZENUM; for(z=0;zn;z+) l=z; for(j=0;jn;j+) m=j; for(k=0;kn-1;k+) for(g=0;g=m&k=l&g=l&g=m) akg=sk+1g+1; else akg=skg; bzj=JsMatrix(a,n-1); /-矩阵求逆-/ void NiMatrix(TSMatr
17、ix &TM) int i,j,n,k; n=TM.mu; float temp; int aSIZENUMSIZENUM; float bSIZENUMSIZENUM,cSIZENUMSIZENUM; for(i=0;in;i+) for(j=0;jn;j+) aij=0; for(i=1;i=TM.tu;i+) aTM.datai.i-1TM.datai.j-1=TM.datai.e; k=JsMatrix(a,n); cout矩阵的行列式的值: |A|=kendl; if(k=0) cout行列式的值|A|=0,原矩阵无逆矩阵!endl; else N1Matrix(a, b,n); /
18、调用N1Matrix()函数,得到原矩阵各元素对应的余子式,存放在数组bnn中 for(i=0;in;i+) /求代数余子式,此时bnn中存放的为原矩阵各元素对应的代数余子式 for(j=0;jn;j+) if(i+j)%2!=0 & bij!=0) bij=-bij; for(i=0;in;i+) /对bNN转置,此时bnn中存放的为原矩阵的伴随矩阵 for(j=i+1;jn;j+) temp=bij; bij=bji; bji=temp; cout伴随矩阵A*:endl; for(i=0;in;i+)/ 打印伴随矩阵A* coutsetw(6); for(j=0;jn;j+) coutbi
19、jsetw(6); coutendl; for(i=0;in;i+) /求逆矩阵,此时cnn中存放的是原矩阵的逆矩阵 for(j=0;jn;j+) cij=bij/k; cout逆矩阵(A*)/|A|:endl; for(i=0;in;i+)/ 打印逆矩阵 coutsetw(6); for(j=0;jn;j+) coutcijsetw(6); coutendl; /else void main() system(cls); system(color 17);/设置窗口的背景颜色 system(mode con cols=80 lines=40); system(title #矩阵运算器#);
20、printf(t*n); putchar(n); inp: while(1) /system(cls); coutendl; printf(tt -欢迎使用稀疏矩阵运算器-n,2,2); putchar(n); printf(t*n); putchar(n); printf(tt 矩阵转置 n,2,2); printf(tt - n,2,2); printf(tt 矩阵相加 n,2,2); printf(tt - n,2,2); printf(tt 矩阵相减 n,2,2); printf(tt - n,2,2); printf(tt 矩阵相乘 n,2,2); printf(tt - n,2,2
21、); printf(tt 矩阵求逆 n,2,2); printf(tt - n,2,2); printf(tt 退出程序 n,2,2); printf(tt - n,2,2); putchar(n); printf(t*n); printf(tt 强制退出请按 Ctrl +Cn); printf(t*n); char choice; coutendlchoice; TSMatrix A,B,C; switch(choice) case 1: cout创建矩阵Aendl; create(A); TransposeSMatrix(A,B); cout矩阵A:endl;disp(A); cout转置
22、矩阵A:endl;disp(B); cout Press any key to continue!endlendl; getche();system(cls); goto inp; case 2: cout创建矩阵Aendl; create(A); cout创建矩阵Bendl; create(B); if(A.mu!=B.mu|A.nu!=B.nu) cout两个矩阵的行、列数不匹配运算规则endl; cout Press any key to continue!endlendl; getche();system(cls); goto inp; AddTSM(A,B,C); cout矩阵A:e
23、ndl;disp(A); cout矩阵B:endl;disp(B); cout矩阵C=A+B:endl;disp(C); cout Press any key to continue!endlendl; getche();system(cls); goto inp; case 3: cout创建矩阵Aendl; create(A); cout创建矩阵Bendl; create(B); if(A.mu!=B.mu|A.nu!=B.nu) cout两个矩阵的行、列数不匹配运算规则endl; cout Press any key to continue!endlendl; getche();system(cls); goto inp; SubTSM(A,B,C); cout矩阵A:endl;disp(A); cout矩阵B:endl;disp(B); cout矩阵C=A-B:endl;disp(C); cout Press any key to continue!endlendl; getche();system(cls); goto inp; case 4: c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026玉溪硅基智能科技有限公司招聘10人备考题库附参考答案详解(研优卷)
- 2026江苏盐城市射阳县教育局下属事业单位赴高校招聘教师17人备考题库附参考答案详解(巩固)
- 2026福建漳州港务集团有限公司应届毕业生春季招聘6人备考题库及答案详解【名师系列】
- 2026海南海控乐城医院(四川大学华西乐城医院)招聘26人备考题库及答案详解(各地真题)
- 2026江西省妇幼保健院产科科研助理招聘2人备考题库及答案详解(有一套)
- 2026济钢集团招聘112人备考题库及答案详解【新】
- 2026广东湛江市雷州供销助禾农业科技服务有限公司招聘5人备考题库及答案详解(有一套)
- 2026山东济南市第一人民医院招聘卫生高级人才和博士(控制总量)18人备考题库及参考答案详解(基础题)
- 2026河南省烟草专卖局(公司)高校毕业生招聘190人备考题库含答案详解ab卷
- 2026岚图区域市场岗位社会招聘备考题库含答案详解(巩固)
- 2026届云南省保山一中高二生物第二学期期末检测试题含解析
- 2026年区块链安全审计成功经验分享
- 道法历久弥新的思想理念 课件-2025-2026学年统编版道德与法治七年级下册
- 2026版生产经营单位安全生产管理人员试题及答案
- 环氧地坪施工合同模板与范本
- 福建省装配式结构构件生产和安装信息化技术规程
- 医疗纠纷处理与防范考核培训
- 2026春教科版(新教材)小学科学二年级下册教案(全册)
- 黑龙江省考面试真题(省市级综合类)
- 2026年春季人教PEP版四年级下册英语Unit 3 Time for school 教案(共6课时)
- DB37∕T 3772-2025 农业用水定额
评论
0/150
提交评论