温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023
数据结构
课程设计
报告
矩阵
乘法
数据结构课程设计报告n维矩阵乘法
数据结构 课程设计报告 设计题目:n维矩阵乘法:A B-1 专 业 计算机科学与技术 班 级 计本 学 生 学 号 指导教师 起止时间 2023.X.3-2023.X.11 学年第 I 学期 一、 具体任务 功能: 设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab-1结果。
分步实施: 1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数; 2.完成最低要求:建立一个文件,可完成2维矩阵的情况; 3.进一步要求:通过键盘输入维数n。有兴趣的同学可以自己扩充系统功能。
要求: 1.界面友好,函数功能要划分好 2.总体设计应画一流程图 3.程序要加必要的注释 4.要提供程序测试方案 5.据存在那么提示用户先输入相关数据。
当要对矩阵进行求逆时,先利用矩阵可逆的充要条件:|A| != 0 判断矩阵是否可逆,假设矩阵的行列式 |A| = = 0 那么提示该矩阵为不可逆的;假设 |A| !=0 那么求其逆矩阵,并在终端显示其逆矩阵。
四、 算法设计思想及流程图 1.抽象数据类型 ADT MatrixMulti{ 数据对象:D = {a(I,j)|i = 1,2,3,…,n;j = 1,2,…,n;a(i,j)∈ElemSet,n示矩阵R system(“pause〞);假设B不可逆,那么返回主菜单 case 6: 从指定文件中读入矩阵数据 case 0: exit(0); 结果 否 五、 源代码 #include #include #include #include #include #include #define YES 1 #define NO 0 typedef float ElemType; ElemType xxA; //矩阵A ElemType xxB; //矩阵B ElemType xxR; //矩阵R,用于存放运算结果 ElemType xxV; //矩阵V,存放逆矩阵 int n=0; //矩阵维数 int flag=-1; //标记 void swap(ElemType xa,ElemType xb) //交换记录a,b的值 { ElemType c; c=xa; xa=xb; xb=c; } ElemType xxCreateMatrix(int n) //创立n维矩阵,返回该矩阵 { int i,j; ElemType xxM; M = (ElemType xx)malloc(sizeof(ElemType x)xn); if(M == NULL) exit(1); for(i=0;id) { d=fabs(V[i][j]); //d记录绝对值最大的元素的值 /x把绝对值最大的元素在数组中的行、列坐标分别存入IS[K],JS[K]x/ IS[k]=i; JS[k]=j; } } } if(d+1.0 == 1.0) return 0; //所有元素都为0 if(IS[k] != k) /x假设绝对值最大的元素不在第k行,那么将矩阵IS[K]行的元素与k行的元素相交换x/ for(j=0;j=0;k--) /x根据上面记录的行IS[k],列JS[k]信息恢复元素x/ { for(j=0;j'6'); return (c-'0'); } void ReadFromFile() //从指定文件读入矩阵的维数及矩阵各元素的值 { int i,j; FILE xfp; if((fp=fopen(“tx.txt“,“r“))==NULL) { puts(“无法翻开文件!!!“); system(“pause“); exit(0); } fscanf(fp,“%d“,&n); //读入矩阵维数 A=CreateMatrix(n); //创立矩阵A B V R B=CreateMatrix(n); V=CreateMatrix(n); R=CreateMatrix(n); for(i=0;i0) break; else { printf(“\n\t输入有误,请重新输入!\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(“\n\n\t不存在任何矩阵数据,请先输入数据“); 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(“\n\n\t不存在任何矩阵数据,请先输入数据“); system(“pause“); break; } for(;;) { printf(“\n\n\t输入需要求逆的矩阵(A/B):“); h=getchar(); c=getchar(); //h=getchar(); if(c=='A'||c=='a') { i=DinV(A,V); if(i==-1) { puts(“\n\n\t矩阵A的行列式等于0,不可逆!“); system(“pause“); break; } printf(“\tA = “); Print(A); } else puts(“\n\n\t输入有误,请重新输入!\n“); } break; case 4: system(“cls“); if(flag==-1) { puts(“\n\n\t不存在任何矩阵数据,请先输入数据“); system(“pause“); break; } MultMatrix(A,B,R); printf(“\n\n\tAxB = “); Print(R); puts(““); system(“pause“); break; case 5: system(“cls“); if(flag==-1) { puts(“\n\n\t不存在任何矩阵数据,请先输入数据“); system(“pause“); break; } break; case 6: system(“cls“); ReadFromFile(); puts(““); system(“pause“); break; case 0: puts(“\t\t正常退出“); exit(0); break; } } return 0; } 六、 运行结果 1.主界菜单界面,输入0回车,退出程序;如果需要自定矩阵维数及各元素值,请利用主菜单里的1号功能自行输入数据,再进行以上几种运算操作。
七、 收获及体会 通过这次课程设计,让我再次复习了线性代数里矩阵的相关知识,比方n维矩阵的求逆、矩阵可逆的充分必要条件〔|A| != 0〕、矩阵与矩阵的乘法运算、行列式求值方法等。同样的,还让我复习了大量C语言里有关数组的一些重要概念,比方多维数组的动态分配问题、数组与指针的关系等。
记得在这个学期新开设的单片机根底课上,吴涛老师曾屡次强调,让我们一定要经常锻炼自己的编程能力,他常对我们说:“编程是思维的体操。〞尽管我在这方面的能力 和实力非常得有限,也远远不及班上的其他同学,但我通过这次课程设计充分体会到了这句话的精华。
程序作为人体大脑思维的延伸,程序的功能也会因为大脑思维的不断完善而变得更加强大,所以我决定今后要加强在这方面的锻炼和学习,以此来鼓励自己不断前进! 八、 参考文献 数据结构〔C语言版〕 严蔚敏,吴伟民 编著 清华大学出版社 C语言程序设计 洪维恩 编著 中国铁道出版社 C语言程序设计教程 谭浩强 张基温 唐永炎 编著 高等教育出版社 工程数学——线性代数 第四版同济大学应用数学系 编 高等教育出版社 计本 2023-12