收藏 分销(赏)

数据结构课程设计报告---矩阵的运算.doc

上传人:天**** 文档编号:4360046 上传时间:2024-09-13 格式:DOC 页数:15 大小:106.50KB
下载 相关 举报
数据结构课程设计报告---矩阵的运算.doc_第1页
第1页 / 共15页
数据结构课程设计报告---矩阵的运算.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述
数 据  结  构 课程设计报告 题   目:                专 业:           班   级:           学   号:               姓    名:               指导老师:             时 间:           一、课程设计题目及所涉及知识点 设计题目就是“矩阵得运算”; 所涉及得知识点主要就是: 1、 利用数组得形式来储存数据,在main函数里面,实现对于数据得输入操作,利用switch语句进行选择来执行操作,利用for语句与do……while语句来实现功能得循环操作。 2、矩阵得加法、减法、乘法、数乘、转置得基本算法方式. 3、通过switch语句进行选择来执行操作,来实现每个算法得功能。 二、课程设计思路及算法描述 设计思路: 用程序实现矩阵能够完成矩阵得转置运算;矩阵得数乘运算;矩阵得加法运算;矩阵得减法运算;矩阵得乘法运算;这几种矩阵得简单得运算。用数组把将要运算得矩阵储存起来,然后实现矩阵得这几种运算。在main函数里面,来实现对于数据得输入操作,利用switch语句进行选择来执行操作,利用for语句来实现功能得循环操作。 算法: 算法1:矩阵得转置运算;   首先就是把将要运算得矩阵存放在数组中,矩阵得转置运算,就就是把您将要进行运算得A矩阵得行ar与列ac,把A矩阵得行ar作为B矩阵得bc,A矩阵得列ac作为B矩阵得br,这样得到得新矩阵B得行br与列bc就就是矩阵A得转置。算法如下: for(i=0;i〈ar;i++)       for(j=0;j〈ac;j++) B[j][i]=A[i][j]; 算法2:矩阵得数乘运算;   首先就是把将要运算得矩阵存放在数组中,矩阵得数乘运算,就就是实现用一个实数k去A矩阵.实数k去乘矩阵得每一行与每一列,得到得一个新得矩阵B,这样就解决了矩阵得数乘运算.算法如下:  for(i=0;i<ar;i++)        for(j=0;j<ac;j++) B[i][j]=k*A[i][j]; 算法3:矩阵得加法运算;     首先就是把将要运算得矩阵存放在数组中,矩阵得加法运算,就就是要实现A矩阵与B矩阵进行加法运算。事实上就就是A矩阵得每一行ar与B矩阵得每一行br进行加法运算,而得到得一个新得矩阵C得每一行cr就就是A矩阵得ar行与B矩阵得br行得与;A矩阵得每一列ac与B矩阵得每一列bc进行加法运算,而得到得一个新得矩阵C得每一列cc就就是A矩阵得ac列与B矩阵得bc列得与。这样就实现了A矩阵与B矩阵得加法运算. 算法如下: ar=br;ac=bc;  for(i=0;i〈ar;i++) for(j=0;j<ac;j++) C[i][j]=A[i][j]+B[i][j]; 算法4:矩阵得减法运算;       首先就是把将要运算得矩阵存放在数组中,矩阵得减法运算,就就是要实现A矩阵与B矩阵进行减法运算。事实上就就是A矩阵得每一行ar与B矩阵得每一行br进行减法运算,而得到得一个新得矩阵C得每一行cr就就是A矩阵得ar行与B矩阵得br行得差;A矩阵得每一列ac与B矩阵得每一列bc进行减法运算,而得到得一个新得矩阵C得每一列cc就就是A矩阵得ac列与B矩阵得bc列得差。这样就实现了A矩阵与B矩阵得减法运算。    算法如下:    ar=br;ac=bc;  for(i=0;i〈ar;i++) for(j=0;j<ac;j++) C[i][j]=A[i][j]—B[i][j]; 算法5:矩阵得乘法运算; 首先就是把将要运算得矩阵存放在数组中,矩阵得乘法运算,就就是要实现A矩阵与B矩阵进行乘法运算.只有当进行运算得A矩阵得列ac等于B矩阵得行br时,两个矩阵才能进行运算,而得到得结果C矩阵要等于A矩阵得行ar与B矩阵得列bc。这样就实现了两个矩阵得乘法运算。算法如下: cr=ar;cc=bc; for(i=0;i〈ar;i++) for(j=0;j<bc;j++) for(k=0;k<ac;k++) C[i][j]+=A[i][k]*B[k][j]; 三、课程设计中遇到得难点及解决办法 遇到得难点: 如何实现两个矩阵进行乘法运算; 解决办法: (1) 通过分析代码得运行过程,然后与同学一起交流,通过在网上查找得资料,来解决遇到得问题,然后在进行运行。 (2)就就是对于矩阵得乘法运算,因为掌握得知识不就是很熟练,通过查阅书籍相关得算法,再结合手中得资料,认真得分析,然后进行实现,多次试验后解决了该问题。 四、总结 通过这次得课程设计,发现了自己有很多不足得地方,更加深了对数组得存储以及相关得算法得实现,更加认识到要努力自己解决问题,无论就是通过书籍还就是网络资料,自己动手实践,这样更能加深印象,加强记忆,也能认识到自己得不足,促使自己不得不去提高自己得编程水平,每一次得实践都就是对自己得能力得检测,都就是一次宝贵得经验,这也就是学习得一种有效方式。在不断实验中提高了自己独立思考得能力与独立自主得动手能力;还有在不断学习中,让我认识到实践得重要性,老师得精心指导让我学会到了很多,不仅仅就是代码,最主要得让我得思维开阔了很多,在这个过程中,通过不断得尝试,不断得修改,最终克服了困难,完成了自己得任务.我还了解了必须不断地虚心请教与不断地从各个途径学习了解知识,才能不断充实自己,提高自己. 五、附录—主要源程序代码及运行结果 源代码: #include<stdio、h〉 float  A[20][20]; float B[20][20]; float  C[20][20]; float  y=1、0; void main(  ) { int ar=0,ac=0,br=0,bc=0,cr=0,cc=0 ; int  x,i=0,j=0,k=0; do { printf("*******************************************************\n");  printf(”1、表示矩阵转置:\n”); printf("2、表示数乘矩阵:\n”); printf("3、表示矩阵得加法:\n"); printf("4、表示矩阵得减法:\n”); printf("5、表示矩阵得乘法:\n”); printf(”6、表示退出:\n”); printf(”*******************************************************\n”); printf(”请选择您需要得运算:\n”); scanf("%d",&x); switch (x) { case 1: { printf("请输入您要进行运算得矩阵A得行数与列数以逗号隔开:\n”); scanf(”%d,%d",&ar,&ac); printf(”请输入矩阵A用空格隔开:\n”); for(i=0;i<ar;i++) for(j=0;j<ac;j++) scanf("%f”,&A[i][j]);  printf("输出矩阵A:\n"); for(i=0;i〈ar;i++) for(j=0;j<ac;j++) {   printf("%10、2f”,A[i][j]); if((j+1)%ac==0) printf("\n"); } for(i=0;i〈ar;i++)            for(j=0;j〈ac;j++) B[j][i]=A[i][j]; printf(”输出矩阵A得转置矩阵:\n”); for(j=0;j〈ac;j++) for(i=0;i<ar;i++) {   printf(”%10、2f",B[j][i]);  if((i+1)%ar==0)  printf(”\n");  }  } ;break;   case 2: { float k;ﻩ printf("请输入您要进行运算得矩阵A得行数与列数以逗号隔开:\n"); scanf(”%d,%d",&ar,&ac); printf("请输入矩阵A用空格隔开:\n”); for(i=0;i<ar;i++) for(j=0;j<ac;j++) scanf("%f",&A[i][j]); printf("输出矩阵A\n"); for(i=0;i<ar;i++) for(j=0;j<ac;j++) {  printf("%10、2f",A[i][j]); if((j+1)%ac==0) printf(”\n");  } printf(”请输入一个实数:\n”); scanf(”%f",&k); for(i=0;i<ar;i++)         for(j=0;j<ac;j++) B[i][j]=k*A[i][j]; printf("输出k乘矩阵A得结果\n"); for(i=0;i<ar;i++)  for(j=0;j<ac;j++) {  printf("%10、2f",B[i][j]);  if((j+1)%ac==0) printf("\n”); }  };break;   case 3: { printf("请输入您要进行运算得矩阵A得行数与列数以逗号隔开:"); scanf("%d,%d”,&ar,&ac); printf("请输入您要进行运算得矩阵B得行数与列数以逗号隔开:") ; scanf("%d,%d”,&br,&bc); if(ar!=br||ac!=bc) printf(”您输入得两个矩阵不能相加,请重新输入!\n");  else   printf(”请输入矩阵A用空格隔开:\n"); for(i=0;i〈ar;i++)  for(j=0;j<ac;j++) scanf("%f",&A[i][j]); printf(”输出矩阵A:\n”);  for(i=0;i<ar;i++) for(j=0;j〈ac;j++) {  printf("%10、2f",A[i][j]);  if((j+1)%ac==0) printf(”\n");   } printf("请输入矩阵B用空格隔开:\n"); for(i=0;i<br;i++) for(j=0;j〈bc;j++) scanf(”%f”,&B[i][j]); printf(”输出矩阵B:\n"); for(i=0;i〈br;i++) for(j=0;j<bc;j++) {  printf("%10、2f",B[i][j]); if((j+1)%bc==0)  printf("\n”); } printf("矩阵A+矩阵B等于:\n"); ar=br;ac=bc; for(i=0;i〈ar;i++) for(j=0;j<ac;j++) C[i][j]=A[i][j]+B[i][j]; for(i=0;i<ar;i++) for(j=0;j<ac;j++)  { printf("%10、2f",C[i][j]); if((j+1)%ac==0)  printf(”\n"); } };break; case 4: {    printf(”请输入您要进行运算得矩阵A得行数与列数以逗号隔开:\n”);  scanf("%d,%d”,&ar,&ac);  printf("请输入您要进行运算得矩阵B得行数与列数以逗号隔开:\n”); scanf("%d,%d",&br,&bc); if(ar!=br||ac!=bc) printf("您输入得两个矩阵不能相减,请重新输入!\n"); else printf("请输入矩阵A用空格隔开:\n"); for(i=0;i〈ar;i++)  for(j=0;j<ac;j++) scanf("%f",&A[i][j]);  printf(”输出矩阵A:\n"); for(i=0;i〈ar;i++)  for(j=0;j〈ac;j++) {  printf(”%10、2f",A[i][j]);  if((j+1)%ac==0)  printf("\n”);  } printf(”请输入矩阵B用空格隔开:\n"); for(i=0;i〈br;i++) for(j=0;j<bc;j++) scanf(”%f”,&B[i][j]); printf(”输出矩阵B:\n”); for(i=0;i〈br;i++) for(j=0;j〈bc;j++) {  printf(”%10、2f”,B[i][j]); if((j+1)%bc==0)  printf(”\n”);    }  printf(”矩阵A-矩阵B等于:\n"); ar=br;ac=bc;   for(i=0;i<ar;i++) for(j=0;j<ac;j++) C[i][j]=A[i][j]—B[i][j];  for(i=0;i<ar;i++) for(j=0;j<ac;j++) { printf("%10、2f”,C[i][j]); if((j+1)%ac==0) printf("\n”); } };break; case 5: { printf("请输入您要进行运算得矩阵A得行数与列数以逗号隔开:\n"); scanf(”%d,%d”,&ar,&ac); printf("请输入您要进行运算得矩阵B得行数与列数以逗号隔开:\n");  scanf("%d,%d",&br,&bc); if(ac!=br) printf(”您输入得两个矩阵不能相乘,请重新输入!\n"); else printf("请输入矩阵A用空格隔开:\n"); for(i=0;i<ar;i++) for(j=0;j<ac;j++)  scanf("%f”,&A[i][j]); printf(”输出矩阵A:\n");  for(i=0;i〈ar;i++)  for(j=0;j〈ac;j++) { printf(”%10、2f",A[i][j]);  if((j+1)%ac==0) printf("\n");  } printf("请输入矩阵B用空格隔开:\n");  for(i=0;i<br;i++) for(j=0;j〈bc;j++) scanf(”%f”,&B[i][j]); printf("输出矩阵B:\n"); for(i=0;i<br;i++)  for(j=0;j<bc;j++) { printf("%10、2f”,B[i][j]); if((j+1)%bc==0) printf("\n”); } printf("矩阵A*矩阵B等于:\n”); cr=ar;cc=bc; for(i=0;i<ar;i++) for(j=0;j<bc;j++) for(k=0;k<ac;k++) C[i][j]+=A[i][k]*B[k][j]; for(i=0;i〈cr;i++) for(j=0;j〈cc;j++) {   printf("%10、2f”,C[i][j]); if((j+1)%cc==0) printf("\n");  } };break; ﻩ case 6:  ;break;  default: printf(”*******************************************************\n");   } }while(x!=6); } 运行得结果如下: 六、指导老师评语及成绩
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服