资源描述:
《系数矩阵乘法和加法的实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、#include"stdio.h"#include"stdlib.h"#include"malloc.h"#defineMAXSIZE1000typedefstruct{inte;//非零元素的值inti,j;//该非零元素的行下标、列下标}Triple;/*三元组类型定义*/typedefstruct{Tripledata[MAXSIZE+1];intmu,nu,tu;}TSMatrix;/*三元组顺序表类型定义*/voidInitTSM(TSMatrix*M);//函数声明voidShowTSM(TSMatrixM);//显示稀疏矩阵voidAdd_Matrix(TSMatrix
2、a,TSMatrixb,TSMatrix*c);//实现稀疏矩阵的加法voidMultsmatrix(TSMatrixM,TSMatrixN,TSMatrix*T);//实现稀疏矩阵的乘法voidInitTSM(TSMatrix*M)//初始化数组元素{inte,m,n,t,i;printf("请输入矩阵行数,列数,非零元素的个数:");scanf("%d%d%d",&m,&n,&t);M->mu=m;M->nu=n;M->tu=t;for(i=1;i<=t;i++){printf("请输入元素所在行,列,值:");scanf("%d%d%d",&m,&n,&e);if(m<=0
3、
4、
5、n<=0
6、
7、m>M->mu
8、
9、n>M->nu){printf("inputerror!");i--;}else{M->data[i].i=m;M->data[i].j=n;M->data[i].e=e;}}}voidShowTSM(TSMatrixM)//显示数组元素{intm,n,i,t=1;printf("则矩阵为:");for(i=1;i<=M.nu;i++)printf("%dt",i);printf("");printf("*********************************************************");for(m
10、=1;m<=M.mu;m++){for(n=1;n<=M.nu;n++){if(M.data[t].i==m&&M.data[t].j==n){printf("%dt",M.data[t].e);t++;}elseprintf("0t");}printf("");}}voidAdd_Matrix(TSMatrixa,TSMatrixb,TSMatrix*c)//矩阵加法{inti=1,j=1,k=1;//下标置初始值while(i<=a.tu&&j<=b.tu){if(a.data[i].i==b.data[j].i)//a的行号等于b的行号{if(a.data[i].j==
11、b.data[j].j)//a的列号等于b的列号{c->data[k].i=a.data[i].i;c->data[k].j=a.data[i].j;c->data[k].e=a.data[i].e+b.data[j].e;//此时将他们的数据直接相加i++;j++;k++;}elseif(a.data[i].jdata[k].i=a.data[i].i;c->data[k].j=a.data[i].j;c->data[k].e=a.data[i].e;//如果行号相等,则相加后的值等于列号更小的矩阵中对应元素的值i++;k+
12、+;}elseif(a.data[i].j>b.data[j].j)//a的列号大于b的列号{c->data[k].i=b.data[j].i;c->data[k].j=b.data[j].j;c->data[k].e=b.data[j].e;//如果行号相等,则相加后的值等于列号更小的矩阵中对应元素的值j++;k++;}}elseif(a.data[i].idata[k].i=a.data[i].i;c->data[k].j=a.data[i].j;c->data[k].e=a.data[i].e;//如果列号相等,则相加后
13、的值等于行号更小的矩阵中对应元素的值i++;k++;}elseif(a.data[i].i>b.data[j].i)//a的行号大于b的行号{c->data[k].i=b.data[j].i;c->data[k].j=b.data[j].j;c->data[k].e=b.data[j].e;//如果列号相等,则相加后的值等于行号更小的矩阵中对应元素的值j++;k++;}}while(i<=a.tu){c->data[k].e=a.data[i].e;c->