课程设计矩阵运算系统的设计与实现_第1页
课程设计矩阵运算系统的设计与实现_第2页
课程设计矩阵运算系统的设计与实现_第3页
课程设计矩阵运算系统的设计与实现_第4页
课程设计矩阵运算系统的设计与实现_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CC+程序设计课程设计设计说明书矩阵运算系统的设计与实现学生姓名学号班级成绩指导教师 计算机科学与技术系2010 年 7 月 16 日13 / 21文档可自由编辑打印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参考文献91 课题描述 矩阵运算系统是一个非常重要的运算,很多软件开发公司都开发了这个运算系统。现在我们用C语言编出这个运算系统。它的原理是对于输入的矩阵,进行相加、相乘以及相减。另外一个是稀疏矩阵的转置运算系统,按提示输入数值即可得到所要求的稀疏矩阵的转置矩阵。运行环境:Visual C+ 6.02 设计过程经过对程序设计题目的分析

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

5、强的可读性。流程图如下:1) 矩阵相乘流程图如图2.1所示:图2.12)矩阵相加流程图如图2.2所示图2.23)矩阵相减流程图如图2.3所示图2.3 4)矩阵相减、相加、相乘MAIN函数如图2.4所示图2.4 5)稀疏矩阵的转置流程图如图2.5所示图2.53 程序编码/*矩阵相加、相减以及相乘*/#include "stdio.h"#include "stdlib.h" #define M 3#define N 3 /指针数组int aMN;int bMN;int cMN;void matrixMul(int bM,int cN); void matri

6、xAdd(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<N;i+) for(j=0;j<N;j+) scanf("%d",&temp); bij=temp; printf("Please input int matrix c%d%dn",M,N); for(i=0;i<M;i+) for(j=0;j

7、<N;j+) scanf("%d",&temp); cij=temp; /输出原矩阵 printf("Now print resource matrix b%d%d=",M,N); for(i=0;i<M;i+) printf("n"); for(j=0;j<N;j+) printf("%d ",bij); printf("n"); printf("Now print resource matrix c%d%d=",M,N); for(i=0;i&l

8、t;M;i+) printf("n"); for(j=0;j<N;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;i<M;i+) printf("n"); for(j=0;j<N;j+) printf("%d &quo

9、t;,aij); else printf("matrix Error,check and try again! "); /输出矩阵相加结果 matrixAdd(b,c); printf("n"); printf("Now printm matrixAdd results matrix a%d%d=B+C:",M,N); for(i=0;i<M;i+) printf("n"); for(j=0;j<N;j+) printf("%d ",aij); /输出矩阵相减结果 matrixSub

10、(b,c); printf("n"); printf("Now printm matrixSub results matrix a%d%d=B-C:",M,N); for(i=0;i<M;i+) printf("n"); for(j=0;j<N;j+) printf("%d ",aij); return 0;void matrixMul(int bM,int cN) int i,j,k; for(i=0;i<M;i+) for(j=0;j<N;j+) for(k=0;k<N;k+) a

11、ij+=bik*ckj; void matrixAdd(int bM,int cN) int i,j; for(i=0;i<M;i+) for(j=0;j<N;j+) aij=bij+cij; void matrixSub(int bM,int cN) int i,j; for(i=0;i<M;i+) for(j=0;j<N;j+) aij=bij-cij; /*矩阵的快速转置*/#include <stdio.h>#include <stdlib.h>#include <process.h>#define MAXSIZE 200 /

12、*矩阵中最大非零元的个数*/typedef struct triple   int i;    /*行标,本程序中从1开始的*/   int j;   /*列标,本程序中从1开始的*/   int e;   /*非零元*/Triple; /*三元组定义*/typedef struct tabletypeint mu;            

13、0;        /*矩阵的行数*/int nu;                      /*列数*/int tu;                

14、60;           /*非零元个数*/Triple dataMAXSIZE;        /*非零元的三元组表,本程序中是从data1开始使用的*/Tabletype;              /*三元组线性表*/*以下为函数声明,注意和书本上的参数类型不同,我用的形参全为指针*/ vo

15、id 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;

16、 /*初始化为0,便于输入数据时的无效检测*/       Tabletype b;   /*声明矩阵b*/while(1)     printf("       本程序的功能是实现稀疏矩阵的快速转置n");     printf("       n");  

17、      CreatSMatrix(&a);   printf("The source Matrix:n");            out_matrix(&a);         if(FastTransposeSMatrix(&a,&b)   /*若a不为零矩阵则转置a,存入b中*

18、/        printf("After TransposeSMatrix: n");            out_matrix(&b);              else       

19、0;             printf("The matrix is zeros:n");             out_matrix(&a);                 

20、;         /*以下为程序控制*/            printf("Input 'q' to quit and 'c' run again:");     do              if(ch =

21、getchar() = 'q' | ch = 'Q')       DestroySMatrix(&a);            DestroySMatrix(&b);         exit(0);        while(ch!='C&

22、#39;) && (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;i<= a->tu;)   printf("请输入矩阵中第

23、%d个非零元(按行标、列标、值的顺序,空格间隔):",i);   scanf("%d%d%d",&(a->datai.i),&(a->datai.j),&(a->datai.e);        if(a->datai.i < 1 | a->datai.i > a->mu | a->datai.j < 1 | a->datai.j > a->nu) /*下标越界*/ 

24、;             printf("注意:下标越界输入数据无效!n请重新输入:行标范围:1-%d,列标范围1-%d!n",a->mu,a->nu);                         continue;&#

25、160;           if( (a->datai.i) < (a->datai-1.i) |              (a->datai.i) = (a->datai-1.i) && (a->datai.j) <= (a->datai-1.j)   /*非按行顺序输入*/   

26、;                     printf("注意:输入数据无效!n请按照按行存储的顺序输入数据!n");             continue;         

27、;                                      i+;void DestroySMatrix(Tabletype *a) /* 销毁稀疏矩阵a*/   (*a).mu=0;   (*a).n

28、u=0;   (*a).tu=0;void out_matrix(Tabletype *a)   /* 打印矩阵*/   int i,j,k = 1;   for(i = 1 ;i <= a->mu; i+)             for(j = 1; j<= a->nu; j+)         &#

29、160;  /*判断是否为非零元*/            if(a->datak.i = i)&&(a->datak.j = j)                           

30、60;    printf("%4d",a->datak.e);                   k+;                      &

31、#160;     else                 printf("%4d",0);               printf("n");       

32、0;       int FastTransposeSMatrix(Tabletype *a,Tabletype *b)    int p,q,col;   int *num;   int *cpot;   b->mu = a->nu;     /*原矩阵的行数为新矩阵的列数,原列数为新行数,非零元个数不变*/   b->nu = a->mu;   b-

33、>tu = a->tu;   num=(int *)malloc(b->nu+1)*sizeof(int);      /* 生成两个辅助数组*/     cpot=(int *)malloc(b->nu+1)*sizeof(int);if(b->tu) /*若a不为零矩阵*/     for(col = 0;col <a->nu;col+) /*初始化矩阵a的每列中非零元的个数均为0*/ &#

34、160;           numcol = 0;         for(col = 0; col <=a->tu ; col+)/*统计每列中非零元的个数*/                  numa->datacol.j+;

35、0;     cpot1 = 1;           /*确定每列中第一个非零元的位置*/         for(col = 2;col <= a->nu; col+)              cpotcol = numcol-1+

36、cpotcol-1;           for(p = 1; p <= a->tu; p+)   /*p为a-data的下标*/                         col = a->datap.j;         /*交换元素*/             

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论