ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:112.26KB ,
资源ID:25516270      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25516270.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(课程设计矩阵运算系统的设计与实现.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

课程设计矩阵运算系统的设计与实现.docx

1、课程设计矩阵运算系统的设计与实现课程设计矩阵运算系统的设计与实现CC+程序设计课程设计 设计说明书 矩阵运算系统的设计与实现 学生姓名 学号 班级 成绩 指导教师 计算机科学与技术系 2010 年 7 月 16 日 C/C+程序设计课程设计评阅书 题目 矩阵运算系统的设计与实现 学生姓名 学号 指导教师评语及成绩 指导教师签名: 年 月 日 答辩评语及成绩 答辩教师签名: 年 月 日 教研室意见 总成绩: 室主任签名: 年 月 日 课程设计任务书 2009 2010 学年第 二 学期 专业:统 学号: 姓名: 课程设计名称: cc+程序设计课程设计 设计题目: 矩阵运算系统的设计与实现 完成期

2、限:自 2010 年 7 月 5 日至 2010 年 7 月 16 日共 2 周 设计依据、要求及主要内容(可另加附页): 用C/C+语言编写一个程序实现普通矩阵相加、相乘及稀疏矩阵转置问题,要求如下: 1) 阐述设计思想,画出流程图; 2) 对给定的矩阵A1、A2,实现矩阵相加、相乘; 3) 对稀疏矩阵B,用三元组对矩阵中的元素进行存放,分别以行为主序和以列为主序求出稀疏矩阵B的转置矩阵T; 4)说明测试方法,写出完整的运行结果,较好的界面设计。 5)编写课程设计报告。 指导教师(签字): 教研室主任(签字): 批准日期: 2010年 7月 5 日 摘要 设计了一个矩阵运算系统,该矩阵运算系

3、统具有普通矩阵相加、相减、相乘及稀疏矩阵转置等功能。本运算系统以Microsoft Visual C+ 6.0 作为系统开发工具,采用算数表达式处理算法来实现了矩阵的加、减、乘等混合运算和稀疏矩阵的转置矩阵运算。系统操作简单,界面清晰,便于用户使用。 关键词: 普通矩阵; 运算; VC6.0 1 课题描述 . 1 2 设计过程 . 1 3 程序编码 . 3 4 测试 . 10 总 结 . 12 参考文献 . 12 1 课题描述 矩阵运算系统是一个非常重要的运算,很多软件开发公司都开发了这个运算系统。现在我们用C语言编出这个运算系统。它的原理是对于输入的矩阵,进行相加、相乘以及相减。另外一个是稀

4、疏矩阵的转置运算系统,按提示输入数值即可得到所要求的稀疏矩阵的转置矩阵。 运行环境:Visual C+ 6.0 2 设计过程 经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一第1页 共21页 个函数,他们的功能分别是:1)矩阵相加运算函数(ADD),主要实现将两矩阵相加的功能;2)矩阵相乘运算函数(MUL),主要实现将两矩阵相乘的功能;3)矩阵相减函数(SNB);实现的功能是矩阵之间的减法4)稀疏矩阵矩阵转置函数(TRANPOSE) 实现的功能是将稀疏矩阵进行转置。在这些函数当中,第1、2、4个函数的实现严格按照题目的要求,而第3个函数为自行设计的函数。程

5、序的一次运行当中可以循环执行所有的功能,并根据需要终止程序的执行。在这个程序中,将各个功能以子程序模块的形式编写。这样使所编写的程序简单明了,逻辑性思维表达明确,具有很强的可读性。流程图如下: 1) 矩阵相乘流程图如图2.1所示: 图2.1 2)矩阵相加流程图如图2.2所示 图2.2 3)矩阵相减流程图如图2.3所示 第2页 共21页 图2.3 4)矩阵相减、相加、相乘MAIN函数如图2.4所示 第3页 共21页 图2.4 第4页 共21页 5)稀疏矩阵的转置流程图如图2.5所示 图2.5 第5页 共21页 3 程序编码 /*矩阵相加、相减以及相乘*/ #include stdio.h #in

6、clude stdlib.h #define M 3 #define N 3 /指针数组 int aMN; int bMN; int cMN; void matrixMul(int bM,int cN); void matrixAdd(int bN,int cN); void matrixSub(int bN,int cN); int main() int i,j,temp=0; printf(Please input int matrix b%d%dn,M,N); for(i=0;iN;i+) for(j=0;jN;j+) scanf(%d,&temp); bij=temp; printf(

7、Please input int matrix c%d%dn,M,N); for(i=0;iM;i+) for(j=0;jN;j+) scanf(%d,&temp); cij=temp; /输出原矩阵 printf(Now print resource matrix b%d%d=,M,N); for(i=0;iM;i+) 第3页 共21页 printf(n); for(j=0;jN;j+) printf(%d ,bij); printf(n); printf(Now print resource matrix c%d%d=,M,N); for(i=0;iM;i+) printf(n); for

8、(j=0;jN;j+) printf(%d ,cij); if (M = N) matrixMul(b,c); /调用矩阵相乘 /输出矩阵相乘结果 printf(n); printf(Now printm matrixMul results matrix a%d%d=B*C:,M,N); for(i=0;iM;i+) printf(n); for(j=0;jN;j+) printf(%d ,aij); else printf(matrix Error,check and try again! ); /输出矩阵相加结果 matrixAdd(b,c); printf(n); printf(Now

9、printm matrixAdd results matrix a%d%d=B+C:,M,N); for(i=0;iM;i+) printf(n); for(j=0;jN;j+) printf(%d ,aij); 第4页 共21页 /输出矩阵相减结果 matrixSub(b,c); printf(n); printf(Now printm matrixSub results matrix a%d%d=B-C:,M,N); for(i=0;iM;i+) printf(n); for(j=0;jN;j+) printf(%d ,aij); return 0; void matrixMul(int

10、bM,int cN) int i,j,k; for(i=0;iM;i+) for(j=0;jN;j+) for(k=0;kN;k+) aij+=bik*ckj; void matrixAdd(int bM,int cN) int i,j; for(i=0;iM;i+) for(j=0;jN;j+) aij=bij+cij; void matrixSub(int bM,int cN) int i,j; for(i=0;iM;i+) 第5页 共21页 for(j=0;jN;j+) aij=bij-cij; *矩阵的快速转置*/ /#include #include #include #define

11、 MAXSIZE 200 /*矩阵中最大非零元的个数*/ typedef struct triple int i; /*行标,本程序中从1开始的*/ int j; /*列标,本程序中从1开始的*/ int e; /*非零元*/ Triple; /*三元组定义*/ typedef struct tabletype int mu; /*矩阵的行数*/ int nu; /*列数*/ int tu; /*非零元个数*/ Triple dataMAXSIZE; /*非零元的三元组表,本程序中是从data1开始使用的*/ Tabletype; /*三元组线性表*/ /*以下为函数声明,注意和书本上的参数类

12、型不同,我用的形参全为指针*/ void CreatSMatrix(Tabletype *); /*生成矩阵*/ void DestroySMatrix(Tabletype *); /*销毁矩阵*/ void out_matrix(Tabletype *); /*打印 矩阵*/ int FastTransposeSMatrix(Tabletype *,Tabletype *); /*快速转置算法*/ int main( void ) /*主函数*/ char ch; Tabletype a = 0,0,0,0,0,0; /*初始化为0,便于输入数据时的无效检测*/ Tabletype b; /

13、*声明矩阵b*/ while(1) printf( 本程序的功能是实现稀疏矩阵的快速转置n); printf( n); 第6页 共21页 CreatSMatrix(&a); printf(The source Matrix:n); out_matrix(&a); if(FastTransposeSMatrix(&a,&b) /*若a不为零矩阵则转置a,存入b中*/ printf(After TransposeSMatrix: n); out_matrix(&b); else printf(The matrix is zeros:n); out_matrix(&a); /*以下为程序控制*/ p

14、rintf(Input q to quit and c run again:); do if(ch = getchar() = q | ch = Q) DestroySMatrix(&a); DestroySMatrix(&b); exit(0); while(ch!=C) & (ch!=c); system(cls); return 1; void CreatSMatrix(Tabletype *a) int i; printf(请输入矩阵的行数、列数和非零元个数,用空格间隔:); scanf(%d%d%d,&(a-mu),&(a-nu),&(a-tu); for(i=1;itu;) pri

15、ntf(请输入矩阵中第%d个非零元(按行标、列标、值的顺序,空格间隔):,i); scanf(%d%d%d,&(a-datai.i),&(a-datai.j),&(a-datai.e); if(a-datai.i datai.i a-mu | a-datai.j datai.j a-nu) /*下标越界*/ printf(注意:下标越界输入数据无效!n请重新输入:行标范围:1-%d,列标范围1-%d!n,a-mu,a-nu); continue; if( (a-datai.i) datai-1.i) | 第7页 共21页 (a-datai.i) = (a-datai-1.i) & (a-dat

16、ai.j) datai-1.j) /*非按行顺序输入*/ printf(注意:输入数据无效!n请按照按行存储的顺序输入数据!n); continue; i+; void DestroySMatrix(Tabletype *a) /* 销毁稀疏矩阵a*/ (*a).mu=0; (*a).nu=0; (*a).tu=0; void out_matrix(Tabletype *a) /* 打印矩阵*/ int i,j,k = 1; for(i = 1 ;i mu; i+) for(j = 1; jnu; j+) /*判断是否为非零元*/ if(a-datak.i = i)&(a-datak.j =

17、j) printf(%4d,a-datak.e); k+; else printf(%4d,0); printf(n); int FastTransposeSMatrix(Tabletype *a,Tabletype *b) int p,q,col; int *num; int *cpot; b-mu = a-nu; /*原矩阵的行数为新矩阵的列数,原列数为新行数,非零元个数不变*/ b-nu = a-mu; b-tu = a-tu; num=(int *)malloc(b-nu+1)*sizeof(int); /* 生成两个辅助数组*/ 第8页 共21页 cpot=(int *)malloc

18、(b-nu+1)*sizeof(int); if(b-tu) /*若a不为零矩阵*/ for(col = 0;col nu;col+) /*初始化矩阵a的每列中非零元的个数均为0*/ numcol = 0; for(col = 0; col tu ; col+)/*统计每列中非零元的个数*/ numa-datacol.j+; cpot1 = 1; /*确定每列中第一个非零元的位置*/ for(col = 2;col nu; col+) cpotcol = numcol-1+cpotcol-1; for(p = 1; p tu; p+) /*p为a-data的下标*/ col = a-datap

19、.j; /*交换元素*/ q = cpotcol; b-dataq.i = a-datap.j; b-dataq.j = a-datap.i; b-dataq.e = a-datap.e; q+; cpotcol+; free(num); /*释放两个辅助数组*/ free(cpot); return 1; /*转置成功*/ else /*a为零矩阵*/ return 0; 第9页 共21页 4 测试 1)矩阵相乘的运行结果如图4.1所示 图4.1 矩阵乘法的运行结果截图 2)矩阵相加的运行结果如图4.2所示: 图4.2 矩阵加法的运行结果截图 第10页 共21页 3)矩阵减法的运行结果如图4

20、.3所示 图4.3 矩阵减法的运行结果截图 4)稀疏矩阵转置的运行结果如图4.4所示: 图4.4 图4.4 稀疏矩阵转置的运行结果截图 第11页 共21页 5.总 结 矩阵的相加相乘、以及稀疏矩阵的转置的开发与实践是我在大学的第一次课程设计,总体上来说在这次的课程设计当中我本人受益匪浅我了解到了如何利用C语言来开发与实现一些我们常遇到的问题,总之这次课程设计让我知道了我们学习C语言要同平时常遇的问题结合起来这样才能更好的掌握所学的知识,学以致用 参考文献 1 谭浩强.C程序设计教程M.北京:清华大学出版社,2007 2 数据结构教材M.高等教育出版社 3 严蔚敏,吴伟民.数据结构(C语言版)M.北京:清华大学出版社,2008 第12页 共21页 第13页 共21页

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1