c语言课程设计 矩阵运算.doc_第1页
c语言课程设计 矩阵运算.doc_第2页
c语言课程设计 矩阵运算.doc_第3页
c语言课程设计 矩阵运算.doc_第4页
c语言课程设计 矩阵运算.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

.课程设计 部分内容来源于网络,有侵权请联系删除!课程设计任务书一、课程设计题目:矩阵运算二、课程设计工作自2008年9月8日起至2008年9月12日止三、课程设计内容:运用所学的C语言知识,编制和调试程序,具有如下功能:(1)两个矩阵加、减、乘等运算(2)对某一矩阵增加一行或一列(3) 对某一矩阵减少一行或一列(4) 自己再增加一项或两项功能四、课程设计要求:程序质量:l 贯彻结构化程序设计思想。l 用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。l 用户界面中的菜单至少应包括“输入数据”、“算术运算”、“增行”、“减行”、“退出”5项。l 代码应适当缩进,并给出必要的注释,以增强程序的可读性。课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:l 封面l 课程设计任务书l 目录l 需求分析(分析题目的要求)l 程序流程图(总体流程图和主要功能模块流程图)l 核心技术的实现说明及相应程序段l 个人总结l 参考资料l 源程序及适当的注释指导教师:_学生签名:_成绩: 教师评语: .目录一、需求分析1二、程序流程图2三、核心技术的实现说明及相应程序段8四、个人总结18五、参考资料19六、源程序19部分内容来源于网络,有侵权请联系删除!一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:加运算函数(jia),减运算函数(jian),乘运算函数(cheng),增行函数(jiahang),减列函数(jianlie)以及求最大值函数(fun)。在这些函数当中,前五个函数的实现严格按照题目的要求,而最后一个函数为自行设计的函数。1、增加运算函数 主要实现将两矩阵相加的功能;2、减运算函数 实现的功能是将两矩阵相减;3、乘运算函数 主要实现将两矩阵相乘的功能;4、增行函数 实现的是在所选的矩阵中增加一行的功能;5、减列函数 实现的是在所选的矩阵中减掉一列的功能; 6、求取最大值函数 实现的功能是找到并输出所给矩阵最大值。 程序的一次运行当中可以循环执行所有的功能,并根据需要终止程序的执行。在这个程序中,将各个功能以子程序模块的形式编写。这样使所编写的程序简单,明了,逻辑性思维表达明确,具有很强的可读性。二、程序流程图1. 程序总体结构图 While(1) flag=1 1 真 假加运算函数jiaflag=2 真 假减运算函数jianflag=3 真 假乘运算函数cheng flag=4 真 假增行运算函数jiahang flag=5 真 假减列运算函数jianlie flag=6 真 假求最大值函数fun flag=0 真 假退出exit(0)图(一)程序总体结构图2、具体功能框图(1) 加运算函数jia int i.j a1=b1&a2=b2? 否 是提示错误退出 i=0 ia1? 否 是i=0 j=0 ia1? 否 是 ja2? 是 否 j=0cij=aij+bijj+i+ ja2?否 是i+输出cij图(二)加运算函数(2) 减运算函数jian int i.j a1=b1&a2=b2? 否 是提示错误退出 i=0 ia1? 否 是i=0 j=0 ia1? 否 是 ja2? 否 j=0cij=aij-bijj+i+ ja2?否 是i+输出cij图(三)减运算函数(3)乘运算函数cheng Int I,j,k a2=b1? 否 是输出sorrycantmul-tiply I=0 ia1 否 是 j=0 jb2? 否 是 i+Cij=0;j+ i=0 ia1? 否 是 j=0 jb2? 否 是i+ k=0 ka2? 否 是j+cij=aik*bkj;k+ i!=o ia1? 否 是 j=o ja1+1? 是 否提示错误退出 m=0 mx-1? 否 是 n=0 na2? 否 是m+cmn=ann;n+Printf(“please input number you add”) j=0 ja2? 否 是scanf(“%d”),&cx-1j;j+m=aa ma1? 否 是 n=0 na2? 否 是m+cmn=am-1n;n+i=0 i=a1? 否 是 j=0 ja2? 是 否提示错误退出 j=0 jx-1? 否 是 i=0 ia1? 否 是j+cij=aij;i+j=x ja1? 否 是 i=0 ia1? 否 是j+cij-1=aij;i+ i=0 ja1-1? 否 是 i=0 ia1? 否 是printf(“n”)j+printf(“%4d”,cij);i+图(六)减列函数(6)求最大值函数funint i,j; max=a00i=0 ia1? 否 是 j=0 jmax否 是j+max=aij;j+printf(“max=%4dn”,max); 图(七)求最大值函数三、核心技术的实现说明及相应程序段本程序主要由六个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其他函数来实现要求的所有功能。在这些函数当中,加运算函数,减运算函数,乘运算函数,加行函数,减列函数是程序中较为核心的部分,下面分别进行说明。1、加运算函数 在进行矩阵相加前要判断两矩阵是否能够相加,如果能就按照矩阵的相加方式进行运算并输出结果。若不能则提示错误并返回。具体的程序段如下:void jia(int aNN,int bNN,int a1,int a2,int b1,int b2) int i,j; if(a1=b1&a2=b2) for(i=0;ia1;i+) for(j=0;ja2;j+) cij=aij+bij; for(i=0;ia1;i+) for(j=0;ja2;j+) printf(%4d,cij); printf(n); elseprintf(两矩阵不能相加n); 运行图有如下:2、减运算函数在进行矩阵相减运算前要判断两矩阵是否能够相减,如果能就按照矩阵的相减方式进行运算并输出结果。若不能则提示错误并返回。具体的程序段如下:void jian(int aNN,int bNN,int a1,int a2,int b1,int b2) int i,j; if(a1=b1&a2=b2) for(i=0;ia1;i+) for(j=0;ja2;j+) cij=aij-bij; for(i=0;ia1;i+) for(j=0;ja2;j+) printf(%4d,cij); printf(n); else printf(两矩阵不能相减n); 运行图有如下:3、乘运算函数 该段程序的核心问题是矩阵的乘法运算的逻辑性的编写,在进行矩阵相乘时要合理,正确的编写出矩阵相乘的逻辑方式。首先要判断两矩阵是否能够相乘,如果能就按照矩阵的相乘方式进行运算并输出结果。若不能则提示错误并返回。具体的程序段如下void cheng(int aNN,int bNN,int a1,int a2,int b1,int b2) int i,j,k; if(a2=b1) for(i=0;ia1;i+) for(j=0;jb2;j+) cij=0; for(i=0;ia1;i+) for(j=0;jb2;j+) for(k=0;ka2;k+) cij+=aik*bkj; printf(运算结果为:n); for(i=0;ia1;i+) for(j=0;ja1+1) printf(不能加入到此行 n);return; for(m=0;mx-1;m+) for(n=0;na2;n+) cmn=amn; printf(请输入要加的数); for(j=0;ja2;j+) scanf(%d,&cx-1j); for(m=x;m=a1;m+) for(n=0;na2;n+) cmn=am-1n; for(i=0;i=a1;i+)for(j=0;ja1) printf(不能减去此列n); for(j=0;jx-1;j+) for(i=0;ia1;i+) cij=aij; for(j=x;ja2;j+) for(i=0;ia1;i+) cij-1=aij; for(i=0;ia1;i+)for(j=0;ja2-1;j+)printf(%4d,cij);printf(n); 四、个人总结在这次C语言课程设计过程,我更好的掌握了C语言课程中的基础知识,同时也对所学知识的掌握有所加深。通过这次自己动手编制、调试程序,让我学到了很多理论课上无法体会到的知识,特别的知道了一些关于“stdlib.h”头文件的使用,而且我也遇到并解决了很多编程中常出现的错误。自己独立的编写出了各个子程序,如加运算函数、减运算函数、乘运算函数、加行函数、减行列函数等。通过编程让我深深的体会到C语言的方便性和可用性。自身觉得不足的是在使用增行、减列运算函数时还要输入不必要的另一数组,但它不可少,有它可以在此程序源中增加新的运算函数。五、参考文献1 谭浩强 C程序设计教程 北京:清华大学出版社 20082 刘成等 C语言程序设计实验指导与习题集 北京:中国铁道出版社 2008六、源程序#include#include#define N 50int cNN;void jia(int aNN,int bNN,int a1,int a2,int b1,int b2) int i,j; if(a1=b1&a2=b2) for(i=0;ia1;i+) for(j=0;ja2;j+) cij=aij+bij; for(i=0;ia1;i+) for(j=0;ja2;j+) printf(%4d,cij); printf(n); else printf(两矩阵不能相加n); void jian(int aNN,int bNN,int a1,int a2,int b1,int b2) int i,j; if(a1=b1&a2=b2) for(i=0;ia1;i+) for(j=0;ja2;j+) cij=aij-bij; for(i=0;ia1;i+) for(j=0;ja2;j+) printf(%4d,cij); printf(n); else printf(两矩阵不能相减n); void cheng(int aNN,int bNN,int a1,int a2,int b1,int b2) int i,j,k; if(a2=b1) for(i=0;ia1;i+) for(j=0;jb2;j+) cij=0; for(i=0;ia1;i+) for(j=0;jb2;j+) for(k=0;ka2;k+) cij+=aik*bkj; printf(运算结果为:n); for(i=0;ia1;i+) for(j=0;ja1+1) printf(不能加入此行 n);return; for(m=0;mx-1;m+) for(n=0;na2;n+) cmn=amn; printf(请输入要加的数:); for(j=0;ja2;j+) scanf(%d,&cx-1j); for(m=x;m=a1;m+) for(n=0;na2;n+) cmn=am-1n; for(i=0;i=a1;i+) for(j=0;ja1) printf(不能减去此列n); for(j=0;jx-1;j+) for(i=0;ia1;i+) cij=aij; for(j=x;ja2;j+) for(i=0;ia1;i+) cij-1=aij; for(i=0;ia1;i+) for(j=0;ja2-1;j+) printf(%4d,cij); printf(n); void fun(int aNN,int a1,int a2) int i,j; int max; max=a00; for(i=0;ia1;i+) for(j=0;jmax) max=aij; printf(max=%4dn,max); main() int aNN,bNN,i,j,m,n,p,q,flag; printf(请输入矩阵 a 的行数和列数:n); scanf(%d %d,&m,&n); printf(请输入矩阵a:n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&aij); printf(a矩阵为:n); for(i=0;im;i+) for(j=0;jn;j+) printf(%4d,aij); printf(n); printf(请输入矩阵b的行数和列数:n); scanf(%d%d,&p,&q); printf(请输入 b 矩阵:n); for(i=0;ip;i+) for(j=0;jq;j+) scanf(%d,&bij); printf(b 矩阵为:n); for(i=0;ip;i+) for(j=0;jq;j+) printf(%4d,bij); printf(n); while(1) printf(请选择:n 1: 矩阵相加n 2: 矩阵相减n 3: 矩阵相乘n 4: 矩阵加一行n 5: 矩阵减一列n

温馨提示

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

评论

0/150

提交评论