1、数 据 结构课程设计报告题 目: 专 业: 班 级: 学 号: 姓 名: 指导老师: 时 间: 一、课程设计题目及所涉及知识点设计题目就是“矩阵得运算”;所涉及得知识点主要就是:1、 利用数组得形式来储存数据,在ain函数里面,实现对于数据得输入操作,利用stch语句进行选择来执行操作,利用fo语句与dowhl语句来实现功能得循环操作。2、矩阵得加法、减法、乘法、数乘、转置得基本算法方式.、通过stch语句进行选择来执行操作,来实现每个算法得功能。二、课程设计思路及算法描述设计思路:用程序实现矩阵能够完成矩阵得转置运算;矩阵得数乘运算;矩阵得加法运算;矩阵得减法运算;矩阵得乘法运算;这几种矩阵
2、得简单得运算。用数组把将要运算得矩阵储存起来,然后实现矩阵得这几种运算。在man函数里面,来实现对于数据得输入操作,利用wtch语句进行选择来执行操作,利用or语句来实现功能得循环操作。算法:算法:矩阵得转置运算; 首先就是把将要运算得矩阵存放在数组中,矩阵得转置运算,就就是把您将要进行运算得A矩阵得行与列ac,把A矩阵得行ar作为B矩阵得bc,矩阵得列c作为B矩阵得br,这样得到得新矩阵B得行r与列bc就就是矩阵得转置。算法如下:fo(i=0;iar;i+) fo(j=;ac;+) jiAj;算法2:矩阵得数乘运算; 首先就是把将要运算得矩阵存放在数组中,矩阵得数乘运算,就就是实现用一个实数
3、k去A矩阵.实数去乘矩阵得每一行与每一列,得到得一个新得矩阵,这样就解决了矩阵得数乘运算.算法如下: fo(i;iar;i+) for(j=0;jac;+) Bij=Aij;算法3:矩阵得加法运算; 首先就是把将要运算得矩阵存放在数组中,矩阵得加法运算,就就是要实现矩阵与B矩阵进行加法运算。事实上就就是A矩阵得每一行ar与B矩阵得每一行br进行加法运算,而得到得一个新得矩阵C得每一行cr就就是矩阵得行与B矩阵得br行得与;矩阵得每一列ac与B矩阵得每一列c进行加法运算,而得到得一个新得矩阵C得每一列c就就是矩阵得ac列与B矩阵得bc列得与。这样就实现了矩阵与矩阵得加法运算.算法如下:=br;=
4、bc; for(i=0;ir;i+) for(=0;ac;j+) Cij=Aij+ij;算法4:矩阵得减法运算; 首先就是把将要运算得矩阵存放在数组中,矩阵得减法运算,就就是要实现A矩阵与B矩阵进行减法运算。事实上就就是矩阵得每一行ar与B矩阵得每一行b进行减法运算,而得到得一个新得矩阵C得每一行cr就就是A矩阵得ar行与B矩阵得b行得差;A矩阵得每一列ac与矩阵得每一列bc进行减法运算,而得到得一个新得矩阵C得每一列cc就就是A矩阵得ac列与B矩阵得列得差。这样就实现了A矩阵与B矩阵得减法运算。 算法如下: ar=b;c=b; for(=0;iar;i+) fr(j0;jac;j+) Cij
5、=ijBij;算法5:矩阵得乘法运算;首先就是把将要运算得矩阵存放在数组中,矩阵得乘法运算,就就是要实现矩阵与矩阵进行乘法运算.只有当进行运算得A矩阵得列ac等于B矩阵得行r时,两个矩阵才能进行运算,而得到得结果C矩阵要等于A矩阵得行与B矩阵得列bc。这样就实现了两个矩阵得乘法运算。算法如下:c=ar;cc=c; for(i=;ia;i+) fo(j=0;jbc;j+)for(k;k;+)Ci+=i*Bkj;三、课程设计中遇到得难点及解决办法遇到得难点:如何实现两个矩阵进行乘法运算;解决办法:(1) 通过分析代码得运行过程,然后与同学一起交流,通过在网上查找得资料,来解决遇到得问题,然后在进行
6、运行。(2)就就是对于矩阵得乘法运算,因为掌握得知识不就是很熟练,通过查阅书籍相关得算法,再结合手中得资料,认真得分析,然后进行实现,多次试验后解决了该问题。四、总结通过这次得课程设计,发现了自己有很多不足得地方,更加深了对数组得存储以及相关得算法得实现,更加认识到要努力自己解决问题,无论就是通过书籍还就是网络资料,自己动手实践,这样更能加深印象,加强记忆,也能认识到自己得不足,促使自己不得不去提高自己得编程水平,每一次得实践都就是对自己得能力得检测,都就是一次宝贵得经验,这也就是学习得一种有效方式。在不断实验中提高了自己独立思考得能力与独立自主得动手能力;还有在不断学习中,让我认识到实践得重
7、要性,老师得精心指导让我学会到了很多,不仅仅就是代码,最主要得让我得思维开阔了很多,在这个过程中,通过不断得尝试,不断得修改,最终克服了困难,完成了自己得任务.我还了解了必须不断地虚心请教与不断地从各个途径学习了解知识,才能不断充实自己,提高自己.五、附录主要源程序代码及运行结果源代码:icldesti、h flot200; flo B020; foatC00; foaty=、; void mn( ) t0,=0,=0,c=0,cr=0,cc=0 ;nt x,i=0,=,k=0;doprint(*);print(”1、表示矩阵转置:n”);rintf(2、表示数乘矩阵:n”);rintf(3、
8、表示矩阵得加法:n);print(、表示矩阵得减法:”); ritf(、表示矩阵得乘法:n”);rint(”6、表示退出:n”); rinf(”*”); rinf(”请选择您需要得运算:n”); scaf(%d,&x);sch (x) cse 1: printf(请输入您要进行运算得矩阵得行数与列数以逗号隔开:n”); sa(”%d,%,ar,ac); pintf(”请输入矩阵A用空格隔开:”); for(i=0;iar;+) for(j=0;jac;j+) scan(%f”,&Ai);pn(输出矩阵:n); fo(i=0;iar;+) for(j=0;jac;j+) printf(1、2f”
9、,Aij); f(j+)%a=) pritf(n); for(0;iar;i+) (j=0;jac;j) Bji=A; printf(”输出矩阵A得转置矩阵:n”); fo(j=;a;j+) for(i=0;ia;i+) rinf(”、,Bji);((i+1)%a=0)printf(”); ;beak; case 2: flatk;printf(请输入您要进行运算得矩阵得行数与列数以逗号隔开:n); scan(”d,%,r,&a); printf(请输入矩阵A用空格隔开:n”);r(i=;ia;i+) for(j=0;jac;j+) caf(f,Aj); pnf(输出矩阵An); fo(=0;
10、iar;i+) for(j=;jac;j+) prntf(%10、2,Aij); if((j1)ac=) printf(”); prnt(”请输入一个实数:n”); scanf(”%f,k); for(i0;iar;+) or(j=0;jac;j+) Bij=kAij; prin(输出乘矩阵得结果); for(i=0;iar;i+)o(j=0;jc;j+) pritf(10、2f,Bi);if(+1)%ac0) printf(n”); ;beak;case : prin(请输入您要进行运算得矩阵A得行数与列数以逗号隔开:); sca(d,d”,&a,ac); prit(请输入您要进行运算得矩阵
11、B得行数与列数以逗号隔开:); snf(d,%d”,&br,bc); if(ar!=r|ac!c) prntf(”您输入得两个矩阵不能相加,请重新输入!n);le printf(”请输入矩阵A用空格隔开:n);or(i=0;a;+)for(=0;jac;j+) scanf(,Ai); prnt(”输出矩阵A:”);for(=0;a;i+) for(j0;ja;j+) printf(1、f,Aij);if((+1)%ac=0) printf(”n); printf(请输入矩阵B用空格隔开:n); r(i=0;ib;i+) or(;c;) scan(”%f”,Bi); print(”输出矩阵B:n
12、); or(i=0;ir;+) fo(j=0;jbc;j+) pritf(%10、2,i); if((+1)%bc=0)prif(”); printf(矩阵A矩阵B等于:n); abr;ac=bc; or(i=0;r;+) for(j=0;jac;j+) CjiBj; f(i=0;a;i+) for(j=0;jac;j+) printf(10、f,Cij); i((j+1)c=0)printf(”n); ;reak; cse: printf(”请输入您要进行运算得矩阵A得行数与列数以逗号隔开:n”);canf(,”,a,&a);pit(请输入您要进行运算得矩阵B得行数与列数以逗号隔开:n”);
13、 scan(d,%d,&br,); if(!=rac!=c) printf(您输入得两个矩阵不能相减,请重新输入!); le prinf(请输入矩阵A用空格隔开:n);fr(i=0;a;i+)for(j0;jac;j+) scan(f,ij);prt(”输出矩阵:n); for(i=0;ia;+)or(j0;j;j+) prntf(”0、,Aj);(j+)c=)prnt(n”); print(”请输入矩阵B用空格隔开:); for(i=;ibr;i+) f(j=;bc;j+) an(”f”,&Bij); printf(”输出矩阵B:n”); for(i=;ibr;+) or(;j;j+) pi
14、n(”10、2”,Bij); if((j+)%b=)ntf(”n”); pintf(”矩阵A矩阵B等于:); ar=br;a=b; or(i=0;ar;i+) fo(=0;jac;j+) CjAjBi;for(i0;ir;i+) for(j=0;ja;+) prntf(%10、”,Cij); ((j+1)c=0) rtf(n”); ;bek; cse : pinf(请输入您要进行运算得矩阵得行数与列数以逗号隔开:n);sanf(”%,%d”,&r,&a);prif(请输入您要进行运算得矩阵B得行数与列数以逗号隔开:n);scanf(d,%d,br,);f(c!=r)printf(”您输入得两个
15、矩阵不能相乘,请重新输入!n);elseprinf(请输入矩阵A用空格隔开:n);for(i=0;iar;i+) for(j=0;ja;j+)scan(f”,Aij); printf(”输出矩阵A:n);for(i=;iar;i+)for(j=;ja;j+) rntf(”%、2f,ij);if(+)c=0) printf(n); pntf(请输入矩阵B用空格隔开:n);or(i=;i;i+) fo(j;jbc;j) canf(”f”,&Bj); prnf(输出矩阵B:n); for(i0;ir;i+)fr(j=0;jbc;+) prtf(1、2”,Bj); if(j1)%bc=) pnt(n”); print(矩阵A*矩阵B等于:n”);cr=ar;cb; or(i=0;ar;i+) fo(=0;;j+)f(=0;kac;k+)Cij+=ik;fr(=;icr;i) fr(j=;jcc;j+) prntf(%10、2”,Cij); f((j+1)cc=0) printf(n); ;brek;case 6: ;brea; defult: ritf(”*n);while(x!=);运行得结果如下:六、指导老师评语及成绩