数据结构-矩阵相关操作的课程设计.doc_第1页
数据结构-矩阵相关操作的课程设计.doc_第2页
数据结构-矩阵相关操作的课程设计.doc_第3页
数据结构-矩阵相关操作的课程设计.doc_第4页
数据结构-矩阵相关操作的课程设计.doc_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

课程设计(论文)学 号: 课 程 设 计题 目矩阵乘法教 学 院计算机学院专 业09计算机科学与技术班 级姓 名指导教师 年月日目 录1 概述32 设计目的33 设计功能说明34 详细设计说明35 流程图46 调试及结果51程序调试 52运行编译连接过程 5-87 总结9附录 10-24参考文献 25成绩评定表 261 概 述数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。通过课程设计,不仅可以加深学生对数据结构基本概念的了解,巩固学习成果,还能够提高实动手力。为学生后继课程的学习打下良好的基础。2 设计目的数据结构课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。通过程序的编译掌握对程序的调试方法及思想,并且让学生学会使用一些编程技巧。促使学生养成良好的编程习惯。1.使学生能够较全面地巩固和应用课堂中所学的的基本理论和程序设计方法,能够较熟练地完成程序的设计和调试。2.培养学生综合运用所学知识独立完成程序课题的能力。3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的素质。5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。3 设计功能分析本设计的功能如下:1、对于用户给定的矩阵相乘可以进行存储,并且用户可以更改2、根据用户的要求可以选择相应的功能加减乘及转置3、然后显示用户输入的矩阵进行运算并得到结果后保存到文件4 详细设计说明 本程序用数据存储的方式建立矩阵。然后用相加,减,乘,转置的方式计算出最终的矩阵5 流程图选择功能相加、相减相乘转置以只读方式打开输入文件 in.txt从文件写入并输出屏幕矩阵a判断两矩阵能否相乘结果输出到文件并输出屏幕矩阵c从文件写入并输出屏幕矩阵a、b创建并读入矩阵a、b,然后分别再屏幕输出释放内存,并判断是否继续结果输出到文件并输出屏幕矩阵c判断两个矩阵能否相加、减释放内存,并判断是否继续关闭输入文件,并以写入方式打开输出文件 out.txt结束创建并初始化结果矩阵c矩阵的加法,输出结果矩阵C,关闭输入、输出文件,释放矩阵内存判断是否继续6 调试及运行结果1、程序调试1)使用Microsoft visual c+ 编辑软件进行源程序的编写。2)使用Microsoft visual c+软件进行编译,步骤:单击“组建”选择“编译”。3)使用Microsoft visual c+运行程序并调试,步骤:单击“组建”选择“执行”。2、运行及编译连接过程1)现在进行调试2)下面进行编译3)开始运行程序4)首先进行选择,先选1号进行加法运算这时候系统会弹出TXT文本5)做完加法以后,进行选择,选“Y”继续,然后进行减法运行同样,程序接着把两个YXT文本弹出来6)同样上面的操作,选择3,进行乘法运行在弹出的TXT文本里面输入矩阵A,关闭后,在另一个弹出的TXT中输入矩阵B最后输出矩阵B,并弹出结果的TXT7)最后选择4,进行矩阵转置的调试转置后的结果8)选择N程序结束7 总 结 课程设计终于做完了,虽然有些疲劳和困倦,但也让我收获了很多。数据结构已经学了一个学期,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。对这些知识也有了更深的理解和很好的掌握。许多困惑,有许多已经通过实际操作解决了,并能够深刻认识。通过课程设计,明白到了原来开发一个小小的实用系统,是需要考虑到很多方面的问题的,这些都是要在实践中摸索的,这与平时做练习是不同的,但也因为平时有许多的练习基础,会使你做起程序来,更加得心应手。另外就是要把错误总结,有许多错误是平时自己一手制造的,因此很深刻,但也有些错误是自己还没有接触的,这就应该看多些有关的书记以及别人的总结,使自己不犯这些错误。这样长期总结,会对自己有很大的帮助。附 录实现的程序代码: #include#include #include using namespace std;#includevoid Transposition.h#includevoid MatrixMutiply.h/* 给 int 类型定义别名 datatype */typedef int datatype;/* 函数声明部分 */datatype* Create(int m, int n);void Reset(datatype*, int, int);void Input(datatype*, int, int);void Output(datatype*, int, int);void Summation(datatype*, datatype*, datatype*);void Subtraction(datatype*, datatype*, datatype*);void MatrixFree(datatype* , int);/* 定义三个矩阵的行列大小 */int row_a, col_a;int row_b, col_b;int row_c, col_c;/* 定义文件指针 */FILE *fp;int main()system(color 1c);datatype *a, *b, *c, *d;printf( #n); printf( # 欢迎您使用矩阵系统 #n); printf( # 系统功能: #n); printf( # 计算两个矩阵相加,相减; #n); printf( # 矩阵相乘;矩阵转置 #n); printf( #n); printf( # 请选择您需要的运算,按回车键结束 #n); printf( #n); printf( # 1:矩阵相加 #n); printf( # 2:矩阵相减 #n); printf( # 3:矩阵相乘 #n); printf( # 4:矩阵转置 #n); printf( #n); char flag;doint x; coutx;switch (x)case 1:/* 进行矩阵加法运算 */Summation(a, b, c);break; case 2: /* 进行矩阵减法运算 */Subtraction(a, b, c);break; case 3: /* 进行矩阵乘法运算 */MatrixMutiply();break; case 4:/* 进行矩阵转置运算 */Transposition();break; default : cout无此选项请确定后再输入!endl;break; cout是否继续操作?(y/n)flag;while (flag=y|flag=Y);/* 为矩阵动态分配内存的函数 */datatype* Create(int m, int n)int i;datatype *Matrix;Matrix = (datatype *) malloc(sizeof(datatype *) * m);for(i = 0; i m; i+)Matrixi = (datatype *) malloc(sizeof(datatype) * n);return Matrix;/* 初始化矩阵函数 */void Reset(datatype* Matrix, int m, int n)int i,j;for(i = 0; i m; i+)for(j = 0; j n; j+)Matrixij = 0;/* 读入数据函数 */void Input(datatype* Matrix, int m, int n)int i,j;for(i = 0; i m; i+)for(j = 0; j n; j+)fscanf(fp,%d, &Matrixij);/* 输出数据函数 */void Output(datatype* Matrix, int m, int n)int i,j;for(i = 0; i m; i+)for(j = 0; j n; j+)fprintf(fp,%4d , Matrixij);fprintf(fp,n);/* 释放矩阵内存函数 */void MatrixFree(datatype* Matrix, int m)int i;for(i = 0; i m; i+)free(Matrixi);free(Matrix);/* 矩阵加法运算函数 */void Summation(datatype* a, datatype* b, datatype* c)int i,j;/* 以只读方式打开输入文件 in.txt */if(fp = fopen(in.txt,r) = NULL)printf(Cannot open this file.n);exit(0);/* 创建并读入矩阵a */fscanf(fp,%d%d, &row_a, &col_a);a=Create(row_a, col_a);Input(a,row_a, col_a);printf(* 矩阵A *n);for(i=0;irow_a;i+)for(j=0;jcol_a;j+)printf(%4d,aij); /实数格式printf(n);/* 创建并读入矩阵b */fscanf(fp,%d%d, &row_b, &col_b);b = Create(row_b, col_b);Input(b,row_b, col_b);/输出矩阵bprintf(* 矩阵B *n);for(i=0;irow_b;i+)for(j=0;jcol_b;j+)printf(%4d,bij); /实数格式printf(n);/* 判断两个矩阵能否相加 */if(row_a = row_b & col_a = col_b)row_c = row_a;col_c = col_b;elseprintf(Matrix Cant Mutiply !n);fprintf(fp,Matrix Cant Mutiply !n);exit(0);/* 关闭输入文件 */fclose(fp);/* 以写入方式打开输出文件 out.txt */if(fp = fopen(out.txt,w) = NULL)printf(Cannot open this file.n);exit(0);/* 创建并初始化结果矩阵c */c = Create(row_c, col_c);Reset(c, row_c, col_c);for(i=0;irow_c;i+)for(j=0;jcol_c;j+)cij=aij+bij;/矩阵加法printf(* 矩阵加法 *n);for(i=0;irow_a;i+)for(j=0;jcol_b;j+)printf(%4d,cij); /实数格式printf(n);/* 输出结果矩阵C */Output(c, row_c, col_c);/* 关闭输入文件 */fclose(fp);system(in.txt);/* 关闭输出文件 */fclose(fp);system(out.txt);/* 释放矩阵内存 */MatrixFree(a,row_a);MatrixFree(b,row_b);MatrixFree(c,row_c);/* 矩阵减法运算函数 */void Subtraction(datatype* a, datatype* b, datatype* c)int i,j;/* 以只读方式打开输入文件 in.txt */if(fp = fopen(in.txt,r) = NULL)printf(Cannot open this file.n);exit(0);/* 创建并读入矩阵a */fscanf(fp,%d%d, &row_a, &col_a);a=Create(row_a, col_a);Input(a,row_a, col_a);printf(* 矩阵A *n);for(i=0;irow_a;i+)for(j=0;jcol_a;j+)printf(%4d,aij); /实数格式printf(n);/* 创建并读入矩阵b */fscanf(fp,%d%d, &row_b, &col_b);b = Create(row_b, col_b);Input(b,row_b, col_b);/输出矩阵bprintf(* 矩阵B *n);for(i=0;irow_b;i+)for(j=0;jcol_b;j+)printf(%4d,bij); /实数格式printf(n);/* 判断两个矩阵能否相减 */if(row_a = row_b & col_a = col_b)row_c = row_a;col_c = col_b;elseprintf(Matrix Cant Mutiply !n);fprintf(fp,Matrix Cant Mutiply !n);exit(0);/* 关闭输入文件 */fclose(fp);/* 以写入方式打开输出文件 out.txt */if(fp = fopen(out.txt,w) = NULL)printf(Cannot open this file.n);exit(0);/* 创建并初始化结果矩阵c */c = Create(row_c, col_c);Reset(c, row_c, col_c);for(i = 0; i row_c; i+)for(j = 0; j col_c; j+)cij = aij - bij;/矩阵减法printf(* 矩阵减法 *n);for(i=0;irow_a;i+)for(j=0;j0 ):n);scanf(%d%d,&m,&g);printf(请输入矩阵B的行数和列数( 0 ):n);scanf(%d%d,&f,&n);if(f=g) /判断能否相乘/矩阵a FILE *fpa;printf(请输入矩阵A的元素n);system(cheng-a.txt); fpa=fopen(cheng-a.txt,r); /读文件cheng-a.txtif(fpa=NULL)printf(文件写打开失败);exit (0);double *a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a=NULL来判断指针是否为空指针*/a=(double*)malloc(m*sizeof(double*);/*这句是动态定义二维数组的行数。新的标准ANSI C规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a。*/for(i=0;im;i+)ai=(double*)malloc(g*sizeof(double);/*这句是动态定义二维数组的列数。*/for(i=0;im;i+) for(j=0;jg;j+)fscanf(fpa,%lf,&aij); /从文件读取数据fclose(fpa);/输出矩阵A printf(* 矩阵A *n);for(i=0;im;i+)for(j=0;jg;j+)printf(%gt,aij); /实数格式printf(n);/矩阵BFILE *fpb;printf(请输入矩阵B的元素n);system(cheng-b.txt); fpb=fopen(cheng-b.txt,r);if(fpb=NULL)printf(文件写打开失败);exit (0);double *b=NULL;b=(double*)malloc(g*sizeof(double *);for(i=0;if;i+)bi=(double*)malloc(n*sizeof(double);for(i=0;if;i+)for(j=0;jn;j+)fscanf(fpb,%lf,&bij);fclose(fpb);/输出矩阵Bprintf(* 矩阵B *n);for(i=0;if;i+)for(j=0;jn;j+)printf(%gt,bij); /实数格式printf(n);/矩阵相乘printf(* 矩阵乘法 *n);double *result=NULL;/*存放计算结果的二维数组*/result=(double*)malloc(m*sizeof(double*);for(i=0;im;i+)resulti=(double*)malloc(n*sizeof(double);for(i=0;im;i+)for(j=0;jn;j+)resultij=0;/*初始化为0*/for(i=0;im;i+)for(j=0;jn;j+)for(k=0;kg;k+)resultij+=aik*bkj;/屏幕输出矩阵乘法for(i=0;im;i+)for(j=0;jn;j+)printf(%gt,resultij); /实数格式printf(n);/屏幕输出矩阵乘法FILE *fpc;fpc=fopen(cheng-c.txt,wb);if(fpc=NULL)printf(文件打开失败);exit(0);for(i=0;im;i+) for(j=0;jn;j+)fprintf(fpc,%gt,resultij);fprintf(fpc,rn ); /文件中换行fclose(fpc);system(cheng-c.txt); /释放for(i=0;im;i+)/*释放之前分配的空间是一个好习惯*/free(ai);ai=NULL;free(resulti);resulti=NULL;/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/free(a);a=NULL;free(result);result=NULL;for(i=0;i0 ):n);scanf(%d%d,&m,&g);/矩阵 FILE *fpa;printf(请输入矩阵的元素nnn);system(zhuanzhi-a.txt); fpa=fopen(zhuanzhi-a.txt,r); /读文件zhuanzhi-a.txtif(fpa=NULL)printf(文件写打开失败);exit (0);double *a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a=NULL来判断指针是否为空指针*/a=(double*)malloc(m*sizeof(double*);/*这句是动态定义二维数组的行数。新的标准ANSI C规定malloc函数的返回值类型为void型,所以需要强制转化为double型的指针后才能赋给a。*/for(i=0;im;i+)ai=(double*)malloc(g*sizeof(double);/*这句是动态定义二维数组的列数。*/for(i=0;im;i+) for(j=0;jg;j+)fscanf(fpa,%lf,&aij); /从文件读取数据fclose(fpa);/屏幕输出矩阵 printf(* 矩阵 *n);for(i=0;im;i+)for(j=0;jg;j+)printf(%gt,aij); /实数格式printf(n);/转置矩阵printf(* 转置矩阵 *n);double *result=NULL;/*存放计算结果的二维数组*/result=(double*)malloc(m*sizeof(double*);for(i=0;ig;i+)resulti=(double*)malloc(g*sizeof(double);for(i=0;ig;i+)for(j=0;jm;j+)resultij=0;/*初始化为0*/for(i=0;ig;i+) for(j=0;jm;j+)resultij=aji;/屏幕输出转置矩阵for(i=0;ig;i+)for(j=0;jm;j+)printf(%gt,resultij);printf(n);/文件输出转置矩阵 FILE *fpc; fpc=fopen(zhuanzhi-c.txt,wb); if(fpc=NULL) printf(文件打开失败); exit(0); for(i=0;ig;i+) for(j=0;jm;j+)fprintf(fpc,%gt,resultij);fprintf(fpc,rn ); fclose(fpc); system(zhuanzhi-c.txt); /释放for(i=0;im;i+)/*释放之前分配的空间是一个好习惯*/free(ai);ai=NULL;for(i=0;ig;i+)free(resulti);resulti=NULL;/*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/free(a);a=NULL;参考文献教材:1 苏仕民.数据结构课程设计 北京:机械工业出版社.20052 C+面向对象程序设计教程/陈维兴,林小茶编著 北京:清华大学出版社,2009.63 C语言版/严蔚敏,吴伟民 北京:清华大学出版社,20074 徐孝凯.数据结构实

温馨提示

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

最新文档

评论

0/150

提交评论