首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据结构实验之矩阵的运算器(二维数组)

数据结构实验之矩阵的运算器(二维数组)

作者头像
LucianaiB
发布2025-05-28 17:46:11
发布2025-05-28 17:46:11
1680
举报
  • 实验目的
  1. 掌握并学会运用数组及相关知识
  2. 掌握矩阵相关运算的代码实现
  3. 学会小组的分工与合作
  4. 体会封装的好处
  • 实验任务及要求

要求实现矩阵的计算器,能供用户选择不同菜单,进而实现不同存储形式及调用相应计算的算法,并记录运算过程。

运算程序主要包括:①矩阵的加减于数乘;②矩阵的转置;③矩阵的乘法;④矩阵的n次方;⑤矩阵的行列式的值。

  • 小组成员及分工:

三、本人负责板块

实验侧重点:矩阵的n次方,代码的分析及改错

主要思想:

只有方阵才可以进行矩阵的n次方

在得到这一个矩阵之后,首先进行n次的选择

如果n=0,那么就是单位矩阵,只需要令对角线等于1,其他为0

如果n=1,那么就是他本身

当n大于1的时候,n为2是a*a,再之后就是用上一次的结果*a,令一个矩阵d,存为a*a,又它来存储每次的结果,用f=a*d,每次将f的结果给了d用作循环,最后一次f中为矩阵的n次方

  • 系统功能
  1. 矩阵的加法:用户输入两个矩阵,执行相加操作
  2. 矩阵的减法:用户输入两个矩阵,执行相减操作
  3. 矩阵的数乘:用户输入一个矩阵和一个数,执行数乘操作
  4. 矩阵的转置:用户输入一个矩阵,返回其转置矩阵
  5. 矩阵的乘法:用户输入两个矩阵,执行相乘操作
  6. 矩阵的n次方:用户输入一个矩阵与其要进行的次方数
  7. 矩阵的逆矩阵:用户输入一个矩阵,返回其逆矩阵
  • 实验基本原理

1、矩阵的加减:

首先由用户输入两个矩阵,系统进行判断

if(a->row!=b->row||a->col!=b->col)//不符合相加、减条件,进行报错

else{

   c->row=a->row;   /*符合相加、相减条件,输入矩阵规模参数*/

c->array[i][j].data=0;

  c->array[i][j].data=a>array[i][j].data+b->array[i][j].data;

         }判断符合后,根据矩阵运算规则进行运算。

2、矩阵的数乘:

 用户输入一个矩阵,输入要乘的数(整型)进行运算

   c>array[i][j].data=a>array[i][j].data*x

3、矩阵的转置:

实现矩阵转置需要两个矩阵:一个是用户输入的原矩阵,另一个是新定义的矩阵—用来存储转置后的矩阵。原矩阵与转置矩阵的关系主要有两点:

①行数与列数相反

②aij=bji所以在代码实现时,只需要完成这两个任务即可

4、矩阵的乘法:

①首先根据矩阵所学知识a,b分别为两个矩阵,a为m*n的矩阵。b为n*s的矩阵。a的列数必须与b的行相等。

  if (a->col!=b->row)/*两个矩阵能否相乘进行判断*/

         printf("\n两个矩阵不匹配,不能相乘!");

②满足上述a与b能够相乘的条件之后,首先对想乘之后的c进行行列规模规定

            c->row=a->row;   /*输入矩阵规模参数*/

            c->col=b->col;

③进行完上述操作之后将对c进行赋值,将c变为0矩阵,然后进行a*b的操作

            for(i=0;i<c->row;++i)

5、矩阵的n次方:

只有方阵才可以进行矩阵的n次方在得到这一个矩阵之后,首先进行n次的选择。如果n=0,那么就是单位矩阵,只需要令对角线等于1,其他为0;如果n=1,那么就是他本身;当n大于1的时候,n为2是a*a,再之后就是用上一次的结果*a,令一个矩阵d,存为a*a,又它来存储每次的结果,用f=a*d,每次将f的结果给了d用作循环,最后一次f中为矩阵的n次方

6、矩阵的行列式:

         ①本实验采用,将行列式按第一行展开,第一行各个元素与其对应的代数余子式的乘积之和即为行列式的值

          ②利用递归的思想,假设计算n阶行列式的值,则需计算n-1阶的代数余子式,也就是n-1阶行列式,......一直递归下去,直至求解2阶代数余子式(行列式),2阶行列式的值则可通过主对角元素乘积与次对角元素乘积之差求得。值得注意的是,代数余子式需判断其正负!

  • 实验输入输出数据

用户输入:                   

矩阵加减:

矩阵的数乘与转置:

矩阵的乘法与行列式的值:

矩阵的n次方:

  • 实验过程发生的问题

但是在函数中中采用MulMat(&a,&a,&d); 调用矩阵的乘法函数,却显示

如果采用MulMat(a,a,d); 却可以

为什么在主函数中调用函数给的参数,需要&,而在函数中却不可以用

  • 心得体会

1、编写一个程序时,先从问题出发,梳理有关问题所学知识,搞清楚其中的原理,先用手算进行演示,然后再思考如何用代码实现,以及遇到多种实现方法时那种更简便。

2、小组合作完成一个任务时,要分工合理明确,首先要确定小组使用编译器、使用的编程语言等基本且重要的问题,其次是选择大部分人可以接受并完成代码的难易程度,最后遇到问题共同解决问题,互帮互助,共同成长。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档