




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#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,
2、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);
3、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 = 1;int k;int sum
4、;/g、 m、 t 分别记录三个矩阵的元素的存储位置 /从 data1 开始/和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-
5、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;/ 记录运算完成后,
6、第三方矩阵非零元的个数结束 * 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
7、) /行下标相等时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+; elsem+;/*t+;结束 */ 行下标和下标不等的元素直接插入到 G 的相应位置/*开始 */while(M-datam.i = k) / G-datag.i = k;插入 M 剩余的元素G-datag.j = M-datam.j;G-datag.e = M-datam.e
8、;G-tu+; m+; g+;while(T-datat.i = k) / G-datag.i = k;插入 T 的元素G-datag.j = T-datat.j;G-datag.e = 0 -G-tu+;t+;g+;/G-tu=g;T-datat.e;/记录运算完成后,第三方矩阵非零元的个数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
9、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
10、; 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
11、;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
12、 = 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;elsex = T-tu+1;for(q = T-rpostrow; qdataq.j;tmpgcol += M-dataw.e * T-dataq.e;/对应非零元累加for(gcol = 1
13、; 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 mai
14、n(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); print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国农村医疗资源配置现状及优化建议报告
- 2025-2030中国农机行业客户关系管理数字化升级报告
- 2025-2030中国体育信息安全防护现状及技术发展趋势报告
- 乡村旅游与旅游安全:2025年文旅融合的风险防控研究报告
- 2025年仿制药一致性评价对医药市场生物类似药发展的影响研究报告
- 2025年职业教育校企合作模式研究报告:产教融合的新路径
- XX医用影像设备企业2023上半年ESG实践报告:NGO监督下的可持续发展实践
- 东阿阿胶企业简称2024年度可持续发展报告:传统中药供应链的ESG评估
- 解析卷人教版(五四制)6年级数学下册期末试题附完整答案详解(名师系列)
- 骨科护理学选择题试题与答案
- 国际脓毒症与脓毒症休克指南
- 《展示设计》课程教案
- 市政道路雨污水管道工程施工技术详细课件
- 环境管理标准化手册
- 村集体经济组织财务及会计知识讲座课件
- 热集成-4.夹点技术基础理论
- 银屑病教学讲解课件
- SMART200与ACS510通过modbus通信控制启停
- 山西省临汾市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 项目领导班子竞聘面试评分表
- 皮肤科常见疾病学习课件
评论
0/150
提交评论