收藏 分享(赏)

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

上传人:微传9988 文档编号:2541430 上传时间:2018-09-21 格式:DOC 页数:24 大小:380KB
下载 相关 举报
课程设计矩阵运算系统的设计与实现.doc_第1页
第1页 / 共24页
课程设计矩阵运算系统的设计与实现.doc_第2页
第2页 / 共24页
课程设计矩阵运算系统的设计与实现.doc_第3页
第3页 / 共24页
课程设计矩阵运算系统的设计与实现.doc_第4页
第4页 / 共24页
课程设计矩阵运算系统的设计与实现.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

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

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

3、ual C+ 6.0 作为系统开发工具,采用算数表达式处理算法来实现了矩阵的加、减、乘等混合运算和稀疏矩阵的转置矩阵运算。系统操作简单,界面清晰,便于用户使用。关键词: 普通矩阵; 运算; VC6.0目录1 课题描述 .12 设计过程 .23 程序编码 .34 测试 .6总 结 .8参考文献 .9第 1 页 共 24 页1 课题描述矩阵运算系统是一个非常重要的运算,很多软件开发公司都开发了这个运算系统。现在我们用 C语言编出这个运算系统。它的原理是对于输入的矩阵,进行相加、相乘以及相减。另外一个是稀疏矩阵的转置运算系统,按提示输入数值即可得到所要求的稀疏矩阵的转置矩阵。运行环境:Visual

4、C+ 6.02 设计过程经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:1)矩阵相加运算函数(ADD),主要实现将两矩阵相加的功能;2)矩阵相乘运算函数(MUL),主要实现将两矩阵相乘的功能;3)矩阵相减函数(SNB);实现的功能是矩阵之间的减法4)稀疏矩阵矩阵转置函数(TRANPOSE) 实现的功能是将稀疏矩阵进行转置。在这些函数当中,第1、2、4 个函数的实现严格按照题目的要求,而第 3 个函数为自行设计的函数。程序的一次运行当中可以循环执行所有的功能,并根据需要终止程序的执行。在这个程序中,将各个功能以子程序模块的形式编写。

5、这样使所编写的程序简单明了,逻辑性思维表达明确,具有很强的可读性。流程图如下:1) 矩阵相乘流程图如图 2.1 所示:图 2.12)矩阵相加流程图如图 2.2 所示图 2.23)矩阵相减流程图如图 2.3 所示第 3 页 共 24 页图 2.34)矩阵相减、相加、相乘 MAIN 函数如图 2.4 所示图 2.4 第 5 页 共 24 页5)稀疏矩阵的转置流程图如图 2.5 所示图 2.5第 3 页 共 24 页3 程序编码/*矩阵相加、相减以及相乘*/#include “stdio.h“#include “stdlib.h“ #define M 3#define N 3 /指针数组int aM

6、N;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;i#include #include #define MAXSIZE 200 /*矩阵中最大非零元的个数*/typedef struct tripleint i; /*行标,本程序中从 1 开始的*/int j; /*列

7、标,本程序中从 1 开始的*/int e; /*非零元*/Triple; /*三元组定义*/typedef struct tabletypeint mu; /*矩阵的行数*/int nu; /*列数*/int tu; /*非零元个数*/Triple dataMAXSIZE; /*非零元的三元组表,本程序中是从 data1开始使用的*/Tabletype; /*三元组线性表*/*以下为函数声明,注意和书本上的参数类型不同,我用的形参全为指针*/ void CreatSMatrix(Tabletype *); /*生成矩阵*/void DestroySMatrix(Tabletype *); /*

8、销毁矩阵*/void out_matrix(Tabletype *); /*打印 矩阵*/int FastTransposeSMatrix(Tabletype *,Tabletype *); /*快速转置算法*/int main( void ) /*主函数*/ char ch;Tabletype a = 0,0,0,0,0,0; /*初始化为 0,便于输入数据时的无效检测*/Tabletype b; /*声明矩阵 b*/while(1)printf(“ 本程序的功能是实现稀疏矩阵的快速转置n“);printf(“ n“);CreatSMatrix(第 7 页 共 24 页printf(“The

9、 source Matrix:n“);out_matrix(if(FastTransposeSMatrix(out_matrix(elseprintf(“The matrix is zeros:n“);out_matrix(/*以下为程序控制*/ printf(“Input q to quit and c run again:“); do if(ch = getchar() = q | ch = Q)DestroySMatrix(DestroySMatrix(exit(0);while(ch!=C) system(“cls“);return 1;void CreatSMatrix(Tablet

10、ype *a)int i;printf(“请输入矩阵的行数、列数和非零元个数,用空格间隔:“);scanf(“%d%d%d“,for(i=1;itu;)printf(“请输入矩阵中第%d 个非零元(按行标、列标、值的顺序,空格间隔):“,i);scanf(“%d%d%d“,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) |

11、 (a-datai.i) = (a-datai-1.i) 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)k+;elseprintf(“%4d“,0);printf(“n“); int FastTransposeSMatri

12、x(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); /* 生成两个辅助数组*/cpot=(int *)malloc(b-nu+1)*sizeof(int);if(b-tu) /*若 a 不为零矩阵*/第 9 页 共 24 页for(col = 0;col nu;col+) /*初始化矩阵 a 的每列中非零元的个数

13、均为 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.j; /*交换元素*/q = cpotcol;b-dataq.i = a-datap.j;b-dataq.j = a-datap.i;b-dataq.e = a-datap.e

14、;q+;cpotcol+;free(num); /*释放两个辅助数组*/ free(cpot);return 1; /*转置成功*/ else /*a 为零矩阵*/return 0; 4 测试1)矩阵相乘的运行结果如图 4.1 所示图 4.1 矩阵乘法的运行结果截图2)矩阵相加的运行结果如图 4.2 所示:图 4.2 矩阵加法的运行结果截图3)矩阵减法的运行结果如图 4.3 所示第 11 页 共 24 页图 4.3 矩阵减法的运行结果截图4)稀疏矩阵转置的运行结果如图 4.4 所示:图 4.4图 4.4 稀疏矩阵转置的运行结果截图5.总 结矩阵的相加相乘、以及稀疏矩阵的转置的开发与实践是我在大学的第一次课程设计,总体上来说在这次的课程设计当中我本人受益匪浅我了解到了如何利用 C 语言来开发与实现一些我们常遇到的问题,总之这次课程设计让我知道了我们学习 C 语言要同平时常遇的问题结合起来这样才能更好的掌握所学的知识,学以致用!参考文献1 谭浩强.C 程序设计教程M.北京:清华大学出版社,20072 数据结构教材M.高等教育出版社3 严蔚敏,吴伟民.数据结构(C 语言版)M.北京:清华大学出版社,2008

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报