




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国矿业大学徐海学院软件开发基础实践报告姓 名: 学 号: 专 业: 计算机科学与技术 指导教师: 职 称: 2012 年 6 月 17 徐州姓名/学号: 班级:一、程序来源: 网络二、程序项目名称:矩阵乘法三、程序原理:程序以二维数组作为矩阵的存储结构,通过键盘输入矩阵维数n,动态分配内存空间,创建n维矩阵。矩阵建立后再通过键盘输入矩阵的各个元素值;也可以通过文件读入矩阵的各项数据(维数及各元素值)。当要对矩阵作进一步操作(A*B或A*B(-1))时,先判断内存中是否已经有相关的数据存在,若还未有数据存在则提示用户先输入相关数据。当要对矩阵进行求逆时,先利用矩阵可逆的充要条件:|A| != 0 判断矩阵是否可逆,若矩阵的行列式 |A| = = 0 则提示该矩阵为不可逆的;若 |A| !=0 则求其逆矩阵,并在终端显示其逆矩阵。四、程序功能:设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab1结果。五、程序内容(输入输出):1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数; 2.完成最低要求:建立一个文件,可完成2维矩阵的情况;3.进一步要求:通过键盘输入维数n。有兴趣的同学可以自己扩充系统功能。六、数据流分析(定义的变量,类型,数组,类型,结构体):数据对象:D = a(I,j)|i = 1,2,3,n;j = 1,2,n;a(i,j)ElemSet,n为矩阵维数数据关系: R = Row,Col Row = | 1 = i = n , 1 = j = n-1 Col = | 1 = i = n-1 , 1 = j = n七、程序代码分析(每个函数和代码模块的功能作用分析):1抽象数据类型ADT MatrixMulti数据对象:D = a(I,j)|i = 1,2,3,n;j = 1,2,n;a(i,j)ElemSet,n为矩阵维数数据关系: R = Row,Col Row = | 1 = i = n , 1 = j = n-1 Col = | 1 = i = n-1 , 1 = j 0 ?是输入矩阵维数n输入矩阵A,B输出矩阵维数nsystem(“pause”);通过键盘输入需对哪个矩阵求逆,求出相应该的逆阵,并显示求得的逆阵system(“pause”);若矩阵不可逆则返回主菜单case 4:R=A*B并显示矩阵R system(“pause”);case 5:是否是R=A*B(-1)显示矩阵Rsystem(“pause”);若B不可逆,则返回主菜单case 6:从指定文件中读入矩阵数据case 0:exit(0);结果否九、源代码优点,好处:可以当作简单的矩阵计算器使用,具有一定的容错性十、总结及心得体会: 课程设计结束了,带给我很多的收获。C程序设计、数据结构已经学完了,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。对这些知识也有了更深的理解和很好的掌握。通过课程设计,明白到了原来开发一个项目,是需要考虑到很多方面的问题的,这些都是要在实践中摸索的,这与平时做练习是不同的,但也因为平时有许多的练习基础,会使你做起程序来,更加得心应手。我们要不断发现问题、提出问题,解决问题。十一、对源程序过程及方法、手段的改进建议: 1主界面:2输入6,回车,从文本文件tx.txt中读入矩阵数据:3回车,回到主菜单界面;输入2回车,显示从文件读入的矩阵数据:4回车,回到主菜单界面;输入3回车,对指定矩阵求逆:(由于这里矩阵A是不可逆的,因此仅以矩阵B为例)5回车,回到主菜单界面;输入4回车,求矩阵运算A*B:6回车回到主菜单界面,输入5回车,求A*B(-1)的值:7回车回到主菜单界面,输入0回车,退出程序;如果需要自定矩阵维数及各元素值,请利用主菜单里的1号功能自行输入数据,再进行以上几种运算操作。报告评分: 指导教师签字:源代码#include #include #include #include #include #include #define YES 1#define NO 0typedef float ElemType;ElemType *A; /矩阵AElemType *B; /矩阵BElemType *R; /矩阵R,用于存放运算结果ElemType *V; /矩阵V,存放逆矩阵int n=0; /矩阵维数int flag=-1; /标记void swap(ElemType *a,ElemType *b) /交换记录a,b的值ElemType c;c=*a;*a=*b;*b=c;ElemType *CreateMatrix(int n) /创建n维矩阵,返回该矩阵int i,j;ElemType *M;M = (ElemType *)malloc(sizeof(ElemType *)*n);if(M = NULL)exit(1);for(i=0;in;i+)*(M+i) = (ElemType *)malloc(sizeof(ElemType)*n);for(j=0;jn;j+)*(*(M+i)+j) = 0;return M;ElemType MatrixDeterm(ElemType *M,int n) /*递归法求n维矩阵行列式的值,返回运算结果*/int i,j,k,l,s;ElemType *T1;ElemType *T2;T1=CreateMatrix(n);T2=CreateMatrix(n);ElemType u;ElemType value=0; /运算结果for(i=0;in;i+)for(j=0;jn;j+)T1ij=Mij;T2ij=Mij;if(n=2) /若为2维矩阵,则直接运算并返回运算结果value=T200*T211-T201*T210;return value;elsefor(j=0;jn;j+) /将矩阵的行列式以第一行展开u=T10j;for(i=1,l=0;in;i+) /求矩阵行列式的余子式M(0,j)for(k=0,s=0;kn;k+)if(k=j)continue;elseT2ls=T1ik;s+;l+;value=value+u*(int)pow(-1,j)*MatrixDeterm(T2,n-1); /*行列式等于某一行的各个元素与其代数余子式的乘积之和*/return value;int DinV(ElemType *M,ElemType *V) /*全选主元法求矩阵M的逆矩阵,结果存入矩阵V中*/int i,j,k;ElemType d;ElemType u;int *JS,*IS;JS=(int *)malloc(sizeof(int)*n);IS=(int *)malloc(sizeof(int)*n);u=MatrixDeterm(M,n); /返回矩阵A的行列式值if(u=0)return -1;for(i=0;in;i+)for(j=0;jn;j+)Vij=Mij;for(k=0;kn;k+)d=0;for(i=k;in;i+) /找出矩阵M从Mkk开始绝对值最大的元素for(j=k;jd)d=fabs(Vij); /d记录绝对值最大的元素的值/*把绝对值最大的元素在数组中的行、列坐标分别存入ISK,JSK*/ISk=i; JSk=j;if(d+1.0 = 1.0)return 0; /所有元素都为0if(ISk != k) /*若绝对值最大的元素不在第k行,则将矩阵ISK行的元素与k行的元素相交换*/for(j=0;jn;j+)swap(&Vkj,&VISkj);if(JSk!=k) /*若绝对值最大的元素不在第k列,则将矩阵JSK列的元素与k列的元素相交换*/for(i=0;in;i+)swap(&Vik,&ViJSk);Vkk=1/Vkk; /绝对值最大的元素求倒for(j=0;jn;j+) /*矩阵M第k行除元素Mkk本身外都乘以Mkk*/if(j!=k) Vkj=Vkj*Vkk;for(i=0;in;i+) /*矩阵除第k行的所有元素与第k列的所有元素外,都拿本身减去Mik*Mkj, 其中i,j为元素本身在矩阵的位置坐标*/if(i!=k) for(j=0;jn;j+)if(j!=k) Vij=Vij-Vik*Vkj; for(i=0;i=0;k-) /*根据上面记录的行ISk,列JSk信息恢复元素*/for(j=0;jn;j+)if(JSk!=k) swap(&Vkj,&VJSkj);for(i=0;in;i+)if(ISk!=k) swap(&Vik,&ViISk);free(IS);free(JS);return 0;void MultMatrix(ElemType *M1,ElemType *M2,ElemType *R) /*矩阵M1乘M2 结果存入矩阵R*/int i,j,k;for(i=0;in;i+)for(j=0;jn;j+)Rij=0;for(i=0;in;i+)for(j=0;jn;j+)for(k=0;kn;k+)Rij=Rij+M1ik*M2kj;void Input(ElemType *M) /输入矩阵M的各个元素值int i,j;char str10;char c=A;if(flag=1)c=B;system(cls);printf(nn输入矩阵%c(%d*%d)n,c,n,n);for(i=0;in;i+)for(j=0;jn;j+)scanf(%f,*(M+i)+j);flag=1;gets(str); /吸收多余的字符void Print(ElemType *M) /显示矩阵M的各个元素值int i,j;printf(t);for(i=0;in;i+)for(j=0;jn;j+)printf( %.3f,Mij);puts();printf(tt);int Menu_Select()char c;dosystem(cls);puts(tt*n维矩阵乘法器*);puts(tt| 1. 通过键盘输入各项数据 |);puts(tt| 2. 显示矩阵A,B |);puts(tt| 3. 矩阵求逆,并显示逆矩阵 |);puts(tt| 4. 求矩阵运算A*B,并显示运算结果 |);puts(tt| 5. 求矩阵运算A*B(-1),并显示运算结果|);puts(tt| 6. 从文件读入矩阵A,B与维数n |);puts(tt| 0. 退出 |);puts(tt*);printf(tt请选择(0-6):);c=getchar();while(c6);return (c-0);void ReadFromFile() /从指定文件读入矩阵的维数及矩阵各元素的值int i,j;FILE *fp;if(fp=fopen(tx.txt,r)=NULL)puts(无法打开文件!);system(pause);exit(0);fscanf(fp,%d,&n); /读入矩阵维数A=CreateMatrix(n); /创建矩阵A B V RB=CreateMatrix(n);V=CreateMatrix(n);R=CreateMatrix(n);for(i=0;in;i+) /读入矩阵Afor(j=0;jn;j+)fscanf(fp,%f,&Aij); for(i=0;in;i+) /读入矩阵Afor(j=0;j0)break;elseprintf(nt输入有误,请重新输入!n);puts();system(pause);A=CreateMatrix(n);B=CreateMatrix(n);V=CreateMatrix(n);R=CreateMatrix(n);Input(A);Input(B);break;case 2: system(cls);if(flag=-1)puts(nnt不存在任何矩阵数据,请先输入数据);system(pause);break;puts(n);printf(tA = );Print(A);puts(n);printf(tB = );Print(B);puts();system(pause);break;case 3: system(cls);if(flag=-1)puts(nnt不存在任何矩阵数据,请先输入数据);system(pause);break;for(;)printf(nnt输入需要求逆的矩阵(A/B):);h=getchar();c=getchar();/h=getchar();if(c=A|c=a)i=DinV(A,V);if(i=-1)puts(nnt矩阵A的行列式等于0,不可逆!);system(pause);break;printf(tA = );Print(A);puts(n);printf(A(-1) = );Print(V);puts();system(pause);break;else if(c=B|c=b)i=DinV(B,V);if(i=-1)puts(nnt矩阵B的行列式等于0,不可逆!);system(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程部年度计划课件下载
- 疫情期间居家班会课课件
- 疫情政策措施解读课件
- 工程设备部培训课件模板
- 2025版跨境电商平台服务合作合同协议书
- 2025版数据中心机房设备维护与故障排除服务合同
- 日记捉蚂蚱500字9篇范文
- 六年级叙事作文早晨的春天450字(15篇)
- 那真是个好地方300字12篇
- 现代农业产业孵化与支持服务合同
- GB/T 17145-2024废矿物油回收与再生利用导则
- 网络营销的热点技术与趋势分析
- 普通高中生物学课程标准-(2024修订版)
- 《肥胖与疾病关系的》课件
- 新疆防沙治沙生态建设可行性研究报告
- 国家开放大学《社会调查方法》期末考试题库
- 煤矿掘进专业培训
- 中医体重管理
- 新生儿腹泻护理查房
- 病理全流程数字化系统项目需求
- 企业宣传视频拍摄制作方案
评论
0/150
提交评论