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

简介: 本实验旨在通过团队合作,掌握数组和矩阵相关运算的代码实现,包括矩阵的加减、数乘、转置、乘法、n次方及行列式的计算。实验过程中,成员们需分工协作,解决编程难题,最终实现一个功能完备的矩阵计算器。通过本实验,不仅锻炼了编程能力,还加深了对数学概念的理解,同时培养了团队合作精神。
  •  实验目的
  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次方

image.gif 编辑

  • 系统功能
  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阶行列式的值则可通过主对角元素乘积与次对角元素乘积之差求得。值得注意的是,代数余子式需判断其正负!

  • 实验输入输出数据

用户输入:                    

image.gif 编辑

矩阵加减:

image.gif 编辑

image.gif 编辑

矩阵的数乘与转置:

image.gif 编辑

image.gif 编辑

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

image.gif 编辑

image.gif 编辑

矩阵的n次方:

image.gif 编辑

image.gif 编辑

  • 实验过程发生的问题

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

image.gif 编辑

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

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

  • 心得体会

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

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


目录
相关文章
|
2月前
数据结构实验之串模式匹配问题
本实验旨在掌握串模式匹配技术,通过创建文本文件、实现单词计数与定位功能,最终构建一个包含文件建立、单词统计与定位、程序退出等选项的主菜单,以增强对字符串处理的理解与应用能力。
71 4
|
2月前
|
算法
数据结构实验之最长公共子序列
本实验旨在通过编程实践帮助学生理解串的基本概念及求解最长公共子序列的算法。实验内容包括使用动态规划方法设计并实现算法,以找出给定两序列的最大公共子序列。示例代码展示了如何通过构建状态矩阵和回溯路径来找到解决方案。实验总结指出,`memset()`函数用于内存初始化,且对于特定输入,程序能正确输出最长公共子序列之一。
65 4
|
2月前
|
算法
数据结构实验之操作系统打印机管理器问题
本实验旨在通过实现操作系统中的打印机管理器问题,掌握队列的基本操作如入队、出队等,利用队列的先进先出特性解决先申请先打印的问题。实验包括队列的初始化、入队、出队、打印队列内容等功能,并通过菜单式界面进行交互。实验结果显示基本功能可正常执行,但在连续操作时存在执行失败的情况,需进一步优化。
57 4
|
2月前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
73 4
|
2月前
|
机器学习/深度学习 存储 算法
数据结构实验之二叉树实验基础
本实验旨在掌握二叉树的基本特性和遍历算法,包括先序、中序、后序的递归与非递归遍历方法。通过编程实践,加深对二叉树结构的理解,学习如何计算二叉树的深度、叶子节点数等属性。实验内容涉及创建二叉树、实现各种遍历算法及求解特定节点数量。
117 4
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
71 4
|
7月前
|
存储 算法 数据挖掘
数据结构实验||约瑟夫环
数据结构实验||约瑟夫环
|
4月前
|
存储 人工智能 C语言
数据结构基础详解(C语言): 栈的括号匹配(实战)与栈的表达式求值&&特殊矩阵的压缩存储
本文首先介绍了栈的应用之一——括号匹配,利用栈的特性实现左右括号的匹配检测。接着详细描述了南京理工大学的一道编程题,要求判断输入字符串中的括号是否正确匹配,并给出了完整的代码示例。此外,还探讨了栈在表达式求值中的应用,包括中缀、后缀和前缀表达式的转换与计算方法。最后,文章介绍了矩阵的压缩存储技术,涵盖对称矩阵、三角矩阵及稀疏矩阵的不同压缩存储策略,提高存储效率。
528 8
|
3月前
|
算法
计科一二班算法数据结构实验9答案
计科一二班算法数据结构实验9答案
24 0
|
2月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
290 9

热门文章

最新文章