已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include#include#define MAXSIZE 12500/三元组结构typedef struct int i,j; /矩阵行下标和列下标 int e; /值Triple;/矩阵结构typedef struct Triple dataMAXSIZE+1; int rposMAXSIZE+1; /这是存放各行第一非零元在矩阵中的位置 int mu,nu,tu; /矩阵的行数、列数、非零元个数Matrix;void Init(Matrix* M);void Add(Matrix* M,Matrix* T,Matrix* G);void Jian(Matrix* M,Matrix* T,Matrix* G);void Cheng(Matrix* M,Matrix* T,Matrix* G);void Cheng(Matrix* M,Matrix* T,Matrix* G);void PrintMatrix(Matrix* M);/2、初始化矩阵void Init(Matrix* M) int i; if(M-mu nu tu M-mu*M-nu) printf(出错!n); /如果矩阵的行数、列数不符合要求,打印出错 for(i=1;itu;i+) /data0不用 printf(第%d个非零元的行号:,i); /以下为数据初始化 scanf(%d,&M-datai.i); printf(第%d个非零元的列号:,i); scanf(%d,&M-datai.j); printf(第%d个非零元的元素值:,i); scanf(%d,&M-datai.e); printf(n); printf(您创建的矩阵如下:n); PrintMatrix(M);/3、矩阵相加void Add(Matrix* M,Matrix* T,Matrix* G) G-mu = M-mu; /因为加减运算必须维数相等,所以M、T行、列数相等,初始化第三方矩阵的行、列数。 G-nu = M-nu; G-tu = 0; int g,m,t; /g、m、t分别记录三个矩阵的元素的存储位置 g = m = t = 1; /从data1开始 int k; int sum; /和 if(M-mu != T-mu | M-nu != T-nu) printf(维数不等!n); for(k = 1;k mu;k+) /行下标和下标相等的对应元素相加 /*开始*/ if(M-datam.i = k & T-datat.i = k) /行下标相等时 if(M-datam.j = T-datat.j ) /列下标相等时 sum=M-datam.e+T-datat.e; /矩阵向加 if(sum != 0) /相加不为零时 G-datag.i=k; G-datag.j=M-datam.j; G-datag.e=sum; G-tu+; g+; m+; t+; else /矩阵相加为零时,不做存储操作 m+; t+; /*结束*/ /行下标和下标不等的元素直接插入到G的相应位置 /*开始*/ while(M-datam.i = k) /插入M剩余的元素 G-datag.i = k; G-datag.j = M-datam.j; G-datag.e = M-datam.e; G-tu+; m+; g+; while(T-datat.i = k) /插入T剩余的元素 G-datag.i = k; G-datag.j = T-datat.j; G-datag.e = T-datat.e; G-tu+; t+; g+; /G-tu=g; /记录运算完成后,第三方矩阵非零元的个数 /*结束*/ printf(n); printf(相加后的矩阵如下:n);PrintMatrix(G);/4、矩阵相减void Jian(Matrix* M,Matrix* T,Matrix* G) G-mu = M-mu; G-nu = M-nu; G-tu = 0; int sum,k; int m,t,g; m = t = g = 1; if(M-mu != T-mu | M-nu != T-nu) printf(维数不等!n); for(k = 1;k mu;k+) /行下标和下标相等的对应元素相减 /*开始*/ if(M-datam.i = k & T-datat.i = k) /行下标相等时 if(M-datam.j = T-datat.j ) /列下标相等时 sum=M-datam.e-T-datat.e; /矩阵向减 if(sum != 0) /相加不为零时 G-datag.i=k; G-datag.j=M-datam.j; G-datag.e=sum; G-tu+; g+; m+; t+; else m+; t+; /*结束*/ /行下标和下标不等的元素直接插入到G的相应位置 /*开始*/ while(M-datam.i = k) /插入M剩余的元素 G-datag.i = k; G-datag.j = M-datam.j; G-datag.e = M-datam.e; G-tu+; m+; g+; while(T-datat.i = k) /插入T的元素 G-datag.i = k; G-datag.j = T-datat.j; G-datag.e = 0 - T-datat.e; G-tu+; t+; g+; /G-tu=g; /记录运算完成后,第三方矩阵非零元的个数 /*结束*/ printf(n); printf(相减后的矩阵如下:n);PrintMatrix(G);/5、矩阵相乘void Cheng(Matrix* M,Matrix* T,Matrix* G) int k,w,q,x,mrow,trow,gcol; int tmpMAXSIZE; /累加器 int numMAXSIZE; /记录矩阵的各行的第一个非零元的位置 int m,t,g; m = t = g = 1; w =1; if(M-nu != T-mu) /如果第一个矩阵的列数不等于第二个矩阵的行数 printf(这两个矩阵不能相乘!n); /初始化 G-mu = M-mu; G-nu = T-nu; G-tu = 0; if(M-tu * T-tu != 0) / /记录各个矩阵的各行的第一个非零元的位置 / /*开始*/ /记录矩阵M中各行非零元的个数 for(mrow = 1; mrow mu; mrow+) /清零 nummrow = 0; for(w = 1;w tu;w+) k = M-dataw.i; numk+; M-rpos1 = 1; /第一行第一个非零元的位置在data的第一位 for(mrow = 2; mrow mu; mrow+) /第N行第一个非零元的位置 M-rposmrow = M-rposmrow-1 + nummrow-1; printf(n); printf(矩阵Mn); for(mrow = 1;mrow mu; mrow+) printf(第%d行的第一个非零元在data中的序号是:(%d),mrow,M-rposmrow); printf(n); /记录矩阵T中各行非零元的个数 for(trow = 1; trow mu; trow+) /清零 numtrow = 0; for(w = 1;w tu;w+) k = T-dataw.i; numk+; T-rpos1 = 1; /第一行第一个非零元的位置在data的第一位 for(trow = 2; trow mu; trow+) /第N行第一个非零元的位置 T-rpostrow = T-rpostrow-1 + numtrow-1; printf(n); printf(n); printf(矩阵Tn); for(trow = 1;trow mu; trow+) printf(第%d行的第一个非零元在data中的序号是:(%d),trow,T-rpostrow); printf(n); /*结束*/ for(mrow = 1; mrow mu; mrow+) for(k = 1; k nu;k+) /当前行各元素累加器清零 tmpk = 0; G-rposmrow = G-tu + 1; /矩阵G的各行的第一个非零元在G-data中的位置 for(w = M-rposmrow;w rposmrow+1;w+) trow = M-dataw.j; /找到对应T的行号 if(trow mu) x = T-rpostrow+1; else x = T-tu+1; for(q = T-rpostrow; qdataq.j; tmpgcol += M-dataw.e * T-dataq.e; /对应非零元累加 for(gcol = 1; gcol nu;gcol+) /压缩存储 if(tmpgcol) G-dataG-tu+1.i = mrow; G-dataG-tu+1.j = gcol; G-dataG-tu+1.e = tmpgcol; G-tu+; printf(n); printf(相乘后的矩阵如下:n); PrintMatrix(G);/6、矩阵打印void PrintMatrix(Matrix* M) int k; printf(非零元素数%dn,M-tu); for(k = 1;k tu;k+) printf(%d,%d,%d)n,M-datak.i,M-datak.j,M-datak.e); /7、主函数int main(int argc, char* argv) Matrix* M =(Matrix*)malloc(sizeof(Matrix); Matrix* T =(Matrix*)malloc(sizeof(Matrix); Matrix* G =(Matrix*)malloc(sizeof(Matrix); int tag = 1; int n; printf(请输入第一个矩阵的行数和列数:); scanf(%d %d,&(M-mu),&(M-nu); printf(非零元的个数:); scanf(%d,&(M-tu); Init(M); printf(n); printf(请输入第二个矩阵的行数和列数:); scanf(%d %d,&(T-mu),&(T-nu); printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026事业单位工勤技能-四川-四川热处理工四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-吉林-吉林防疫员一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-吉林-吉林仓库管理员三级(高级工)历年参考题库含答案详解
- 2026事业单位工勤技能-内蒙古-内蒙古殡葬服务工四级(中级工)历年参考题库含答案详解
- 2026事业单位工勤技能-云南-云南水土保持工一级(高级技师)历年参考题库含答案详解
- 2026事业单位工勤技能-上海-上海水生产处理工一级(高级技师)历年参考题库含答案详解
- 2026中级卫生职称-主治医师-耳鼻咽喉科学(中级)代码:336历年参考题库含答案详解
- 销售合同模板(范本)
- 2026年吉安县中小学幼儿园教师招聘笔试参考题库及答案解析
- 2026年莘县中小学幼儿园教师招聘考试参考题库及答案解析
- 新教材人教版五年级上册数学教学计划及进度安排
- 成都华西中学高一入学数学分班考试真题含答案
- 2026-2030中国手持式美容仪行业市场现状供需分析及重点企业投资评估规划分析研究报告
- 2026年中学生国防教育知识竞赛试卷及答案(共十三套)
- 《食品委托生产监督管理办法》深度解读与合规实务指南
- 2026新教材全国培训:新修订统编小学语文六年级教材解析
- 高中思想政治·高三哲学与文化一轮复习专题教学设计
- 2026秋新版苏教版小学数学四年级上册教学计划含进度表
- 小学2026秋季学期学校工作计划
- GB/T 29602-2026固体饮料质量要求
- 2026年学前教育宣传月心得体会:坚守教育初心守护数字时代的纯真童年
评论
0/150
提交评论