n维矩阵的乘法AB1.docx
- 文档编号:27774788
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:13
- 大小:48.04KB
n维矩阵的乘法AB1.docx
《n维矩阵的乘法AB1.docx》由会员分享,可在线阅读,更多相关《n维矩阵的乘法AB1.docx(13页珍藏版)》请在冰豆网上搜索。
n维矩阵的乘法AB1
《数据结构》课程设计
题目____n维矩阵的乘法AB-1______
学号_________________
姓名______________________
专业_____________________
指导老师___________________
第一章:
课程设计的目的
本学期我们对《数据结构》这门课程进行了学习。
这门课程是一门实践性非常强的课程,为了让大家更好地理解与运用所学知识,提高动手能力,我们进行了此次课程设计实习。
这次课程设计不但要求实习者掌握《数据结构》中的各方面知识,还要求实习者具备一定的C语言基础和编程能力。
具体说来,这次课程设计主要有两大方面目的。
一是让实习者通过实习掌握《数据结构》中的知识。
对于矩阵乘法这一课题来说,所要求掌握的数据结构知识主要是数组的相关概念和数组用来存储矩阵的相关便利性。
二是通过实习巩固并提高实习者的C语言知识,并初步了解VisualC++的知识,提高其编程能力与专业水平。
第二章:
课程设计的内容和要求
课程设计的内容
设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab-1结果。
要求
要求
1)界面友好,函数功能要划分好
2)总体设计应画一流程图
3)程序要加必要的注释
4)要提供程序测试方案
5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。
运行环境
该程序的运行环境为Windowsxp系统,MicrosoftVisualC++6.0版本。
第三章:
课程设计分析
矩阵的存储
矩阵的结构类似于c语言中的二维数组,所以可以用二维数组来存储矩阵,这样的结构很简便而且也最符合要求。
矩阵的输入与输出
选择二维数组作为矩阵的存储结构那么可以采用二维数组的输入与输出的方式来对矩阵进行输入输出操作。
利用两个for循环语句可以实现将矩阵中的元素存入到二维数组中,但是要注意的是矩阵的行和列的下标都是从1开始的但是二维数组的行和列的下标都是从0开始所以在编写程序的时候要注意这些差别。
矩阵的乘法运算
矩阵的乘法运算时线性代数里的知识,两个n阶的矩阵相乘,设有三个矩阵A,B,C,矩阵A乘矩阵B等于矩阵C,那么矩阵C中的第i行第j列的元素等于矩阵A的第i行元素和矩阵B的第j列对应的元素的乘积的和。
矩阵的求逆运算
定义一个矩阵的求逆的运算的函数,函数名为inverse,函数的参数为数组B,利用线性代数中的初等变换的知识求矩阵的逆
第四章:
课程设计的算法描述
矩阵的存储
printf("输入矩阵a:
");
for(i=0;i { for(j=0;j scanf("%f",&a[i][j]); }/*输入矩阵A*/ printf("请再输入矩阵b: "); for(i=0;i { for(j=0;j scanf("%f",&b[i][j]); }/*输入矩阵B*/ 矩阵的输出 printf("请输出矩阵A和B的乘积矩阵C: \n"); for(i=0;i { for(j=0;j printf("%f\t",c[i][j]); printf("\n"); } 矩阵的乘法 定义一个全局变量sum初值为0.0; for(i=0;i for(j=0;j for(k=0;k sum+=a[i][k]*b[k][j]; c[i][j]=sum; sum=0; } /*矩阵的乘法的函数的内容*/ 矩阵的求逆运算 定义一个函数,函数名为inverse;之前定义全局变量y=1;矩阵维数N, 和整型变量i,和j, 函数的参数为数组B,返回值为数组B的逆矩阵B-1 voidinverse(floatm[N][N]) /*inverse函数是对矩阵的求逆运算的函数*/ { intd[N][2*N]; floatt,x; intk; printf("B原矩阵为: \n"); for(i=0;i { for(j=0;j printf("%3.2f\t",m[i][j]); printf("\n"); } /*将原数组输出*/ for(i=0;i for(j=0;j<(2*N);j++) { if(j d[i][j]=m[i][j]; elseif(j==N+i) d[i][j]=1.0; else d[i][j]=0.0; } /*将数组b中的元素转存到变量数组d中,其中d中的另一半元素对应一个单位矩阵*/ for(i=0;i { for(k=0;k { if(k! =i) { t=d[k][i]/d[i][i]; for(j=0;j<(2*N);j++) { x=d[i][j]*t; d[k][j]=d[k][j]-x; } } } }/*矩阵的初等变换*/ for(i=0;i { t=d[i][i]; for(j=0;j<(2*N);j++) d[i][j]=d[i][j]/t; } for(i=0;i y=y*d[i][i]; if(y==0) printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。 \n"); else { for(i=0;i for(j=0;j m[i][j]=d[i][j+N]; printf("B逆矩阵为: \n"); for(i=0;i { for(j=0;j printf("%3.2f\t",m[i][j]); printf("\n"); } } } 第五章: 源代码 #include #defineN3 inti,j,k; floaty=1.0; floata[N][N],b[N][N],c[N][N];/*定义全局变量的三个数组*/ /*矩阵的乘法的函数的内容*/ voidinverse(floatm[N][N]); intmain() { printf("输入矩阵a: "); for(i=0;i { for(j=0;j scanf("%f",&a[i][j]); }/*输入矩阵A*/ printf("请再输入矩阵b: "); for(i=0;i { for(j=0;j scanf("%f",&b[i][j]); }/*输入矩阵B*/ inverse(b);/*调用inverse函数对矩阵b进行求逆运算*/ for(i=0;i for(j=0;j for(k=0;k c[i][j]+=a[i][k]*b[k][j]; } printf("请输出矩阵A和B的乘积矩阵C: \n"); for(i=0;i { for(j=0;j printf("%3.2f\t",c[i][j]); printf("\n"); } }/*主函数结束*/ voidinverse(floatm[N][N]) /*inverse函数是对矩阵的求逆运算的函数*/ { floatd[N][2*N]; floatt,x; intk; printf("B原矩阵为: \n"); for(i=0;i { for(j=0;j printf("%3.2f\t",m[i][j]); printf("\n"); } /*将原数组输出*/ for(i=0;i for(j=0;j<(2*N);j++) { if(j d[i][j]=m[i][j]; elseif(j==N+i) d[i][j]=1.0; else d[i][j]=0.0; } /*将数组b中的元素转存到变量数组d中,其中d中的另一半元素对应一个单位矩阵*/ for(i=0;i { for(k=0;k { if(k! =i) { t=d[k][i]/d[i][i]; for(j=0;j<(2*N);j++) { x=d[i][j]*t; d[k][j]=d[k][j]-x; } } } }/*矩阵的初等变换*/ for(i=0;i { t=d[i][i]; for(j=0;j<(2*N);j++) d[i][j]=d[i][j]/t; } for(i=0;i y=y*d[i][i]; if(y==0) printf("对不起,您输入的矩阵没有逆矩阵,请重新输入。 \n"); else { for(i=0;i for(j=0;j m[i][j]=d[i][j+N]; printf("B逆矩阵为: \n"); for(i=0;i { for(j=0;j printf("%3.2f\t",m[i][j]); printf("\n"); } } } 第六章: 结束语 转眼,为期两周的《数据结构》课程设计实习即将结束了。 在这次实习中,自己的C语言知识和数据结构知识得到了巩固,编程能力也有了一定的提高。 同时也学会了解决问题的方法。 总结起来,自己主要有以下几点体会: 1.必须牢固掌握基础知识。 由于C语言是大一所学知识,有所遗忘,且未掌握好这学期所学的《数据结构》这门课,所以在实习之初感到棘手。 不知如何下手,但在后来的实习过程中自己通过看书和课外资料,并请教其他同学,慢慢地对C语言和数据结构知识有所熟悉。 这时才逐渐有了思路。 所以,这次实习之后,我告诫自己: 今后一定要牢固掌握好专业基础知识。 2.必须培养严谨的科学态度。 自己在编程时经常因为一些类似于“少了分号”的小错误而导致错误,不够认真细致,这给自己带来了许多麻烦。 编程是一件十分严谨的事情,容不得马虎。 所以在今后自己一定要培养严谨的科学态度。 我想这不仅是对于程序设计,做任何事都应如此。 3.这次课程设计也让我充分认识到《数据结构》这门课的重要性。 它给我们一个思想和大纲,让我们在编程时容易找到思路,不至于无章可循。 同时它也有广泛的实际应用。 总之,在这次实习中,自己的C语言以及数据结构知识得到提高,编程能 力也得到了提高。 参考资料: 《线性代数》第四版中国人民大学出版社 《c语言程序设计》中国水利水电出版社 《数据结构》c语言版清华大学出版社 《visualc++实用教程》第四版电子工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵 乘法 AB1