C语言课程设计(论文)矩阵乘法.doc

上传人:仙人指路1688 文档编号:3439003 上传时间:2023-03-13 格式:DOC 页数:28 大小:1,003KB
返回 下载 相关 举报
C语言课程设计(论文)矩阵乘法.doc_第1页
第1页 / 共28页
C语言课程设计(论文)矩阵乘法.doc_第2页
第2页 / 共28页
C语言课程设计(论文)矩阵乘法.doc_第3页
第3页 / 共28页
C语言课程设计(论文)矩阵乘法.doc_第4页
第4页 / 共28页
C语言课程设计(论文)矩阵乘法.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《C语言课程设计(论文)矩阵乘法.doc》由会员分享,可在线阅读,更多相关《C语言课程设计(论文)矩阵乘法.doc(28页珍藏版)》请在三一办公上搜索。

1、学 号: 课 程 设 计题 目矩阵乘法教 学 院计算机学院专 业09计算机科学与技术班 级09计科(1)班姓 名指导教师 2010年12月25日课程设计任务书 (20102011学年第一学期)学生姓名: 专业班级:09计算机科学与技术(1)班 指导教师: 工作部门: 计算机学院 一、课程设计题目矩阵乘法二、课程设计内容1矩阵的存储2矩阵的乘法3矩阵的的加法与减法三、进度安排1分析问题,给出数学模型,选择数据结构.2设计算法,给出算法描述3给出源程序清单4. 编辑、编译、调试源程序5. 撰写课程设计报告四、基本要求1用C语言实现矩阵的运算.2利用链表实现矩阵运算的存储.3该程序具有加法、减法、乘

2、法基本运算功能.4. 程序的各个功能模块要求用函数的形式实现.5. 完成设计任务并书写课程设计报告。 教研室主任签名: 年 月 日目 录一、 作品及人员信息3二、 概述3三、 设计目的3四、 运行/开发环境 3五、 流程图4六、 功能介绍5七、 算法分析5八、测试过程中所用过的数据及说明9九、使用价值及优点11十、总结11附录(一):参考文献 11附录(二):成绩评定表12 一、作品及人员信息1、开发项目的名称: 矩阵乘法2、本项目的提出者: 祈文青3、本项目的开发者: 张祥、张宁、黄小强、龚江华二、 概述 数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁只有进行实

3、际操作,将理论应用于实际中,才能确实掌握书中的知识点。通过课程设计,不仅可以加深学生对数据结构基本概念的了解,巩固学习成果,还能够提高实动手力。为学生后继课程的学习打下良好的基础。三、设计目的1. 使学生能够较全面地巩固和应用课堂中所学的的基本理论和程序设计方法,能够较熟练地完成程序的设计和调试。2. 培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。3. 培养了我们的攻克难关的斗志以及团队合作精神,在一个团队里,每

4、个成员都不同程度地存在着优缺点,成员之间应该积极去认真总结团队其他成员的特长和优点,并向他人学习,扬长避短,不断提高自己的综合能力。让我们携手牢记“信任与尊重、团结与友爱、合作与创新”的团队精神。4. 对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。四、运行/开发 环境1、运行环境:windows xp及其以上版本2、 开发环境: vc+6.0五、流程图能否加减乘功能选择定义字符串型辅助变量在转化为整型变量 2相减1相加3相乘4转置释放矩阵内存 定义字符串型辅助变量在转化为整型变量 释放矩阵内存 开始输入矩阵A、B输出矩阵c输入矩阵A输出矩阵

5、c请按任意键继续 请按任意键继续 能否加减乘 否否 能 能 0结束六、功能介绍1矩阵的加法2矩阵的的减法3.矩阵的的乘法4.矩阵的的转置七、算法分析1. 用.h文件的调用代码#includevoid Menu.h#includevoid jia.h#includevoid jian.h#includevoid cheng.h#includevoid zhuanzhi.h 2. 控制界面的前景背景system(color 0a); 3. (1)设置符串型辅助变量,再将字符串型转换为整型 (2)判断是否为数字 (1)和(2)增强程序的健壮性(1)char c110; /辅助变量int c=0;ci

6、nc1;j=strlen(c1); for(i=j-1,j=0;i=0;i-,j+)c=c+(int)(c1i-0)*pow(10,j) ;(2)if( strcmp(c1,0)=0&strcmp(c1,5)0) 4. 使程序暂停和清屏功能cout0&strcmp(m1,9)0 & strcmp(n1,9)=0) 6. 定义矩阵 double *a=NULL;(释放后再赋值为NULL在一些进行有效性判断的地方用a=NULL来判断指针是否为空指针) a=(double*)malloc(m*sizeof(double*);(这句是动态定义二维数组的行数新的标准ANSI C规定malloc函数的返回

7、值类型为void型,所以需要强制转化为double型的指针后才能赋给a) for(i=0;im;i+)ai=(double*)malloc(g*sizeof(double); (这句是动态定义二维数组的列数) 7. 从 .txt文件输入数据FILE *fpa;printf(请输入矩阵A的元素nnn);system(input-a.txt); fpa=fopen(input-a.txt,r); /读文件input-a.txtif(fpa=NULL)printf(文件写打开失败);exit (0);for(i=0;im;i+) for(j=0;jg;j+)fscanf(fpa,%lf,&aij);

8、 /从文件读取数据fclose(fpa); 8. 屏幕输出,用%g格式,可以输出小数for(i=0;im;i+)for(j=0;jg;j+)printf(%gt,aij); /实数格式printf(n); 9. 矩阵加法,减法类似。 for(i=0;im;i+) for(j=0;jg;j+)resultij=aij+bij; 10.初始化为0,矩阵乘法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; 11. 矩阵的转置 for(

9、i=0;ig;i+) for(j=0;jm;j+)resultij=aji; 12. 文件输出( .txt)FILE *fpc; fpc=fopen(output-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); 13. 打开 .txt文件 system(output-c.txt); 14. 内存空间的释放 for(i=0;im;i+)/*释放之前分配的空间是一个好习惯*/free(ai

10、); ai=NULL;free(resulti);resulti=NULL; /*将之前分配的内存空间释放后,把指针置0是一个好的习惯*/free(a);a=NULL;free(result);result=NULL;for(i=0;if;i+)free(bi);bi=NULL;free(b);b=NULL; 16. 菜单函数void Menu()coutendl;coutendl;coutt=矩阵的简单运算=endl;couttttttttt endl;couttttt 1 矩阵加法tt endl;couttttt 2 矩阵减法ttt endl;couttttt 3 矩阵乘法ttt endl

11、;couttttt 4 矩阵转置ttt endl;couttttt 0 退出ttt endl;couttttttttt endl;coutt=矩阵的简单运算=endl;coutendl;coutttt 请选择: ; 八、 测试过程中所用过的数据及说明 1.菜单 : 2. 容错及暂停: 3. 矩阵从文件输入:4. 矩阵屏幕输出及文件输出:九、 使用价值及优点 可以当作简单的矩阵计算器使用,具有一定的容错性十、 总结 课程设计结束了,带给我很多的收获。C程序设计、数据结构已经学完了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。对这些知识也有了更深的理解和很

12、好的掌握。通过课程设计,明白到了原来开发一个项目,是需要考虑到很多方面的问题的,这些都是要在实践中摸索的,这与平时做练习是不同的,但也因为平时有许多的练习基础,会使你做起程序来,更加得心应手。我们要不断发现问题、提出问题,解决问题。附录(一)参考文献【1】C程序设计(第三版) 谭浩强 著 【2】C+面向对象程序设计 谭浩强 著【3】数据结构(C语言版) 严蔚敏 吴伟民 著【4】附录(二): 数据结构 课程设计成绩评定表姓 名张祥性 别男专业班级09计算机科学与技术(1)班课程设计题目:矩阵乘法课程设计答辩或质疑记录: 成绩评定依据:最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字:

13、 年 月 日源代码: #include#include#include#include using namespace std;void jia()char m110,g110,f110,n110; /辅助变量int m=0,g=0,f=0,n=0;int i,j;printf(n请输入矩阵A的行数和列数( 0 ):n);cin m1g1; printf(请输入矩阵B的行数和列数( 0 ):n);cin f1n1;/字符数组型转换为整型j=strlen(m1); for(i=j-1,j=0;i=0;i-,j+) m=m+(int)(m1i-0)*pow(10,j) ; j=strlen(g1)

14、; for(i=j-1,j=0;i=0;i-,j+) g=g+(int)(g1i-0)*pow(10,j) ;j=strlen(f1); for(i=j-1,j=0;i=0;i-,j+) f=f+(int)(f1i-0)*pow(10,j) ;j=strlen(n1); for(i=j-1,j=0;i=0;i-,j+) n=n+(int)(n1i-0)*pow(10,j) ; if(m=f&g=n&strcmp(m1,0)0 & strcmp(m1,9)0 & strcmp(n1,9)=0) /判断能否相加以及行列是否为数字/矩阵a FILE *fpa;printf(请输入矩阵A的元素nnn)

15、;system(input-a.txt); fpa=fopen(input-a.txt,r); /读文件input-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型的指针后

16、才能赋给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的元素nnn);system(input-b.txt); fpb=fopen(in

17、put-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);/矩阵加

18、法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;jg;j+)resultij=aij+bij;/屏幕输出矩阵加法for(i=0;im;i+) for(j=0;jn;j+)printf(%gt,resultij

19、); /实数格式printf(n);/文件输出矩阵加法FILE *fpc; fpc=fopen(output-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(output-c.txt); /释放for(i=0;im;i+)/*释放之前分配的空间是一个好习惯*/free(ai);ai=NULL;free(resulti);resulti=NULL;/*将之前分配的内存

20、空间释放后,把指针置0是一个好的习惯*/free(a);a=NULL;free(result);result=NULL;for(i=0;i0 ):n);cin m1g1; printf(请输入矩阵B的行数和列数( 0 ):n);cin f1n1;/字符数组型转换为整型j=strlen(m1); for(i=j-1,j=0;i=0;i-,j+) m=m+(int)(m1i-0)*pow(10,j) ; j=strlen(g1); for(i=j-1,j=0;i=0;i-,j+) g=g+(int)(g1i-0)*pow(10,j) ;j=strlen(f1); for(i=j-1,j=0;i=0

21、;i-,j+) f=f+(int)(f1i-0)*pow(10,j) ;j=strlen(n1); for(i=j-1,j=0;i=0;i-,j+) n=n+(int)(n1i-0)*pow(10,j) ;if(m=f&g=n&strcmp(m1,0)0 & strcmp(m1,9)0 & strcmp(n1,9)=0) /判断能否相加以及行列是否为数字 /矩阵a FILE *fpa;printf(请输入矩阵A的元素nnn);system(input-a.txt); fpa=fopen(input-a.txt,r); /读文件input-a.txtif(fpa=NULL)printf(文件写打

22、开失败);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;i

23、m;i+) for(j=0;jg;j+)fscanf(fpa,%lf,&aij); /从文件读取数据fclose(fpa);/输出矩阵Aprintf(* 矩阵A *n);for(i=0;im;i+)for(j=0;jg;j+)printf(%gt,aij); /实数格式printf(n);/矩阵BFILE *fpb;printf(请输入矩阵B的元素nnn);system(input-b.txt); fpb=fopen(input-b.txt,r);if(fpb=NULL)printf(文件写打开失败);exit (0);double *b=NULL;b=(double*)malloc(g*si

24、zeof(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(d

25、ouble*);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;jg;j+)resultij+=aij-bij; /屏幕输出矩阵减法for(i=0;im;i+)for(j=0;jn;j+)printf(%gt,resultij); /实数格式printf(n);/文件输出矩阵减法FILE *fpc; fpc=fopen(output-c.txt,wb);if(fpc=NULL)printf(文件

26、打开失败);exit(0); for(i=0;im;i+)for(j=0;jn;j+)fprintf(fpc,%gt,resultij);fprintf(fpc,rn );fclose(fpc);system(output-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);cin m1g1; prin

27、tf(请输入矩阵B的行数和列数( 0 ):n);cin f1n1;/字符数组型转换为整型j=strlen(m1); for(i=j-1,j=0;i=0;i-,j+) m=m+(int)(m1i-0)*pow(10,j) ; j=strlen(g1); for(i=j-1,j=0;i=0;i-,j+) g=g+(int)(g1i-0)*pow(10,j) ;j=strlen(f1); for(i=j-1,j=0;i=0;i-,j+) f=f+(int)(f1i-0)*pow(10,j) ;j=strlen(n1); for(i=j-1,j=0;i=0;i-,j+) n=n+(int)(n1i-0

28、)*pow(10,j) ;if(m=f&g=n&strcmp(m1,0)0 & strcmp(m1,9)0 & strcmp(n1,9)=0) /判断能否相加以及行列是否为数字/矩阵a FILE *fpa;printf(请输入矩阵A的元素nnn);system(input-a.txt); fpa=fopen(input-a.txt,r); /读文件cheng-a.txtif(fpa=NULL)printf(文件写打开失败);exit (0);double *a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a=

29、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的元素nnn);system(input-b.txt); fpb=fopen(input-b.txt,r);if(fpb=NULL)printf(文件写打开失败);exit (0);double *b=NULL;b=(double*)malloc(

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

当前位置:首页 > 教育教学 > 成人教育


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号