下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#define MAXSIZE 12500 / 三元组结构typedef structint e; / Triple;/ 矩阵结构typedef structTriple 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);int i,j; /矩阵行下标和列下标pri
2、ntf(第4 个非零元的列号:,i);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 不用prin tf(第4 个非零元的行号:,i);/以下为数据初始化scanf(%d,&M
3、-datai.i);scanf(%d,&M-datai.j);printf(”第4 个非零元的元素值:,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;/初始化第三方矩阵的行、列数。G-nu = M-nu;G-tu = 0;int g,m,t;/g、m、t 分别记录三个矩阵的元素的存储位置g = m = t = 1;/从 data1 开始因为加减运算必须维数相等,所以 M
4、、T 行、列数相等,printf(第4 个非零元的列号:,i);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-dat
5、ag.e=sum;G-tu+;g+;m+;t+;else / 矩阵相加为零时,不做存储操作m+;t+;*/行下标和下标不等的元素直接插入到G 的相应位置while(M-datam.i = k) /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) /G-datag.i = k;G-datag.j = T-datat.j;开始插入 M 剩余的元素插入 T 剩余的元素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;G-datag.j = M-datam.j;G-datag.e = M-datam.e;G-tu+;m+;g+;while(T-datat.i =
8、k) /结束开始插入 M 剩余的元素插入 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; /记录矩阵的
9、各行的第一个非零元的位置int m,t,g; m = t = g 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+;开始for(trow = 1; trow
10、 mu; trow+) /清零第一行第一个非零元的位置在 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 中各行非零元的个数numtrow = 0;M-rpos1 = 1; /for(
11、trow = 1;trow mu; trow+)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);printf(第 %d 行 的 第 一 个 非 零 元 在 data 中 的 序 号是:(d),trow,T-rpostrow);printf(n);I*for(mr
12、ow = 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)结束for(gcol = 1; gcol nu;gcol+) /压缩存储x = T-rpostrow+1;elsex = T-tu+1;for(q = T-rpostrow; qdataq.j;tmpgcol += M-
13、dataw.e * T-dataq.e; / 对应非零元累加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)printf(请输入第一个矩阵的行数和列数: );int k;printf( 非零元素数 %dn,M-tu);for(k = 1;k tu;k+)printf(%d,%d,%d)n,M-datak.i,M-
14、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;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年吉林省集安市高二生物下册期末考试测试卷附参考答案(巩固)
- 2025年黑龙江省海林市高二生物下册期末考试试卷及参考答案(A卷)
- 2026年广东省乐昌市高二生物下册期末考试试卷【基础题】附答案
- 2025年山东省莱西市高二生物下册期末考试测试卷【夺冠系列】附答案
- 2025年黑龙江省密山市高二生物下册期末考试模拟卷及一套参考答案
- 2026年江苏省海门市高二生物下册期末考试考试卷附答案(培优B卷)
- 2026年江苏省句容市高二生物下册期末考试检测卷含答案(培优)
- 2025年江苏省句容市高二生物下册期末考试模拟卷完整附答案
- 2026年湖北省汉川市高二生物下册期末考试模拟卷附参考答案【黄金题型】
- 2026年四川省崇州市高二生物下册期末考试检测卷及完整答案1套
- 银行外汇汇款课件
- 2025年福建农村信用社考试试题历年农信社笔试面试试题题库及答案
- 老年疼痛评估与综合管理方案
- 2025年10月自考00160审计学试题及答案含评分参考
- 浙江省杭州市滨江区杭二统考2024-2025学年高一上学期语文期末考试卷(含答案)
- 2025年大学《土木水利与交通工程-土木水利与交通工程概论》考试参考题库及答案解析
- 肥胖患儿的饮食与营养
- 护士给药错误的应急预案演练脚本
- 2025年中考黄冈英语试卷及答案
- DB61-T 5129-2025 房屋建筑与装饰工程工程量计算标准
- 电磁场与电磁波(第6版)课件 第4章 准静态电磁问题分析与求解
评论
0/150
提交评论