数据结构课程设计(矩阵的运算)

合集下载

矩阵的加法运算问题-数据结构与算法课程设计报告

矩阵的加法运算问题-数据结构与算法课程设计报告

合肥学院计算机科学与技术系课程设计报告2009 ~2010 学年第二学期课程数据结构与算法课程设计名称矩阵的加法运算问题学生姓名胡九铭学号0804012039专业班级计算机科学与技术08级(2)班指导教师王昆仑张贯虹2010 年6 月一、问题分析和任务定义1、问题分析此程序需要完成如下要求:设计十字链表表示稀疏矩阵,并实现矩阵的加法运算。

并且要求能够要检查有关运算的条件,并对错误的条件产生报警。

2、(1)设计函数建立稀疏矩阵。

(2)设计函数输出稀疏矩阵的值。

(3)构造函数进行两个稀疏矩阵相加,(4)构造函数进行两个稀疏矩阵相加时是否能够符合运算要求,即检查有关运算的条件,并对错误的条件产生错误警报。

(5)登录函数,即需要口令才可以登录并使用计算器(6)退出系统3、原始数据的输入和输出格式由于该问题是关于矩阵的运算方面的内容,所以输入时是对矩阵中的非零元分别进行插入矩阵中,输入格式是:行、列、元素值,以数字的形式输入。

输出时,为了能更易于用户的观察和比较所以选用矩阵表的格式输出,这可以更加方便看出结果的正确与否,也有利于在编写程序的时候修改和改善程序的源代码。

4、算法应能实现的功能该算法应能实现:正确的用十字链表的存储结构建立数个稀疏矩阵;正确的输出用户建立的矩阵;能进行数个矩阵的相加运算;能对加法运算的运算条件进行判断并能对其产生报警提示。

5、该问题测试用例(a)两个行列分别相同的矩阵0 0 0 9 0 05 0 0 + 5 2 00 0 9 0 0 0预测结果:9 0 0= 10 2 00 0 9(b)两个行列数不相同的矩阵3 0 0 0 0 0 00 0 6 06 0 0 + 0 0 0 02 0 0 00 0 0 0 0 0 0预测结果:输出:不能进行加法运算,矩阵的行数和列数应分别相同!!!(c)两个以上的矩阵相加0 0 0 0 0 1 0 0 0 00 6 0 0 0 0 -3 0 0 05 0 3 0 0 + 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 00 0 0 5 02 0 0 0 01 0 0 0 00 0 0 0 00 5 0 0 0预测结果:1 0 0 5 02 3 0 0 0= 6 0 3 0 00 0 0 0 00 5 0 0 0二、数据结构的选择和概要设计1、主界面设计:为了实现对稀疏矩阵的多种算法功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户交互式使用本系统。

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

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

数据结构课程设计报告题目:专业:班级:学号:姓名:指导老师:时间:一、课程设计题目及所涉及知识点设计题目是“矩阵的运算”;所涉及的知识点主要是: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列的和。

c课程设计矩阵加减乘

c课程设计矩阵加减乘

c 课程设计 矩阵加减乘一、课程目标知识目标:1. 理解矩阵加减乘的基本概念和运算法则。

2. 掌握矩阵加减乘的计算步骤,能够准确进行相关运算。

3. 了解矩阵加减乘在实际问题中的应用。

技能目标:1. 能够正确运用矩阵加减乘的法则,解决相关问题。

2. 能够通过矩阵加减乘的计算,提高数学逻辑思维能力和问题解决能力。

3. 能够运用矩阵加减乘的知识,解决一些简单的实际问题。

情感态度价值观目标:1. 培养学生对矩阵加减乘学习的兴趣,激发学生的求知欲。

2. 培养学生团队协作精神,提高学生在小组讨论中的沟通能力。

3. 培养学生严谨、细心的学习态度,养成良好的数学素养。

课程性质:本课程为数学课程,以矩阵加减乘为基础,培养学生的数学运算能力和实际问题解决能力。

学生特点:学生为初中生,具备一定的数学基础,对新鲜事物充满好奇心,但注意力容易分散。

教学要求:结合学生特点,注重启发式教学,引导学生主动参与课堂讨论,提高学生的实际操作能力。

同时,关注学生的情感态度,激发学生的学习兴趣。

通过本课程的学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。

二、教学内容1. 矩阵的基本概念:介绍矩阵的定义、元素、行列数等基本概念,使学生理解矩阵的结构和特点。

- 教材章节:第一章 矩阵与线性方程组,第1节 矩阵的基本概念2. 矩阵的加减法:讲解矩阵加减法的规则,通过实例演示运算过程,让学生掌握矩阵加减法的运算方法。

- 教材章节:第一章 矩阵与线性方程组,第2节 矩阵的运算,1. 矩阵的加减法3. 矩阵的乘法:介绍矩阵乘法的法则,通过实际例题,让学生熟练运用矩阵乘法解决问题。

- 教材章节:第一章 矩阵与线性方程组,第2节 矩阵的运算,2. 矩阵的乘法4. 矩阵的应用:分析矩阵在实际问题中的应用,如线性方程组、图像处理等领域,提高学生的实际问题解决能力。

- 教材章节:第一章 矩阵与线性方程组,第3节 矩阵的应用5. 课堂练习与讨论:针对教学内容,设计不同难度的练习题,让学生在课堂上进行实际操作,加强知识点的巩固。

c语言课程设计矩阵运算

c语言课程设计矩阵运算

c语言课程设计矩阵运算一、教学目标本节课的教学目标是使学生掌握C语言实现矩阵运算的基本方法,包括矩阵的创建、矩阵的加减法、矩阵的转置以及矩阵的乘法。

知识目标要求学生理解矩阵运算的数学原理,能够运用C语言实现矩阵的基本运算;技能目标要求学生熟练使用C语言进行矩阵运算的编程实践;情感态度价值观目标则是培养学生的逻辑思维能力,提高学生对计算机编程的兴趣。

二、教学内容本节课的教学内容主要包括矩阵运算的数学原理介绍、C语言实现矩阵运算的编程实践和代码调试。

教学大纲安排如下:1.引入矩阵的概念和矩阵运算的基本定义。

2.讲解矩阵的创建、矩阵的加减法、矩阵的转置以及矩阵的乘法的数学原理。

3.引导学生运用C语言实现矩阵的基本运算。

4.通过编程实践和代码调试,使学生熟练掌握C语言实现矩阵运算的方法。

三、教学方法本节课采用讲授法、讨论法和实验法相结合的教学方法。

首先,通过讲授法向学生讲解矩阵运算的数学原理和C语言实现方法;其次,通过讨论法引导学生相互交流和讨论,提高他们对矩阵运算的理解;最后,通过实验法让学生动手实践,调试代码,提高他们的编程能力。

四、教学资源本节课的教学资源主要包括教材、参考书、多媒体资料和实验设备。

教材和参考书用于为学生提供理论知识和编程技巧;多媒体资料用于辅助讲解和演示矩阵运算的原理和实现方法;实验设备则是学生进行编程实践和代码调试的必要工具。

五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。

平时表现主要评估学生在课堂上的参与程度、提问和回答问题的积极性等;作业则是对学生掌握矩阵运算能力的考察,要求学生独立完成并提交;考试则是对学生综合运用C语言实现矩阵运算能力的评估,包括理论知识和编程实践。

评估方式应客观、公正,能够全面反映学生的学习成果。

六、教学安排本节课的教学安排如下:总共安排4个课时,第1课时介绍矩阵运算的数学原理,第2课时讲解C语言实现矩阵运算的方法,第3课时进行编程实践和代码调试,第4课时进行教学评估。

c课程设计矩阵运算

c课程设计矩阵运算

c 课程设计矩阵运算一、教学目标本节课的教学目标是让学生掌握矩阵的基本运算,包括矩阵的加法、减法、数乘以及矩阵的乘法。

通过学习,学生应能理解矩阵运算的定义和规则,并能运用这些运算解决实际问题。

此外,学生还应掌握矩阵运算的数学原理,提高逻辑思维和数学运算能力。

在情感态度价值观方面,学生应培养对数学学科的兴趣,增强自信心,培养团队合作精神。

二、教学内容本节课的教学内容主要包括矩阵的基本运算和数学原理。

首先,介绍矩阵的加法、减法、数乘和矩阵的乘法,通过举例说明这些运算的定义和规则。

然后,讲解矩阵运算的数学原理,包括线性方程组的解法、行列式的计算以及矩阵的逆矩阵。

最后,通过实际案例让学生运用矩阵运算解决实际问题,提高学生的应用能力。

三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。

首先,采用讲授法,清晰地讲解矩阵运算的定义和规则,以及数学原理。

其次,采用讨论法,让学生分组讨论矩阵运算的应用案例,培养学生的思考和表达能力。

此外,还采用案例分析法,让学生分析实际问题,运用矩阵运算解决问题。

最后,通过实验法,让学生动手实践,加深对矩阵运算的理解。

四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源。

首先,教材和相关参考书,为学生提供系统的学习资料。

其次,多媒体资料,如PPT、教学视频等,用于直观地展示矩阵运算的过程和应用案例。

此外,还将提供实验设备,如计算器、电脑等,让学生进行实际操作,提高实践能力。

通过丰富多样的教学资源,丰富学生的学习体验,提高学习效果。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观地评价学生的学习成果。

评估方式包括平时表现、作业、考试等。

平时表现主要评估学生的课堂参与度、提问回答等,通过观察学生的表现来了解他们的学习状态。

作业方面,将布置适量的练习题,要求学生在规定时间内完成,通过批改作业了解学生对矩阵运算的理解和掌握程度。

考试方面,将设置期中考试和期末考试,考试内容涵盖本节课的全部知识点,通过考试来检验学生的学习成果。

矩阵运算的课程设计

矩阵运算的课程设计

矩阵运算的课程设计一、课程目标知识目标:1. 理解矩阵的定义,掌握矩阵的基本元素和结构特点;2. 学会矩阵的加、减、乘运算,并能够运用这些运算解决实际问题;3. 掌握矩阵的转置、逆矩阵的概念及其运算方法;4. 了解矩阵运算在现实生活中的应用,如线性方程组求解、图像处理等。

技能目标:1. 能够熟练运用矩阵运算公式进行计算,提高解题速度和准确性;2. 能够运用矩阵运算解决实际问题,培养分析问题和解决问题的能力;3. 能够运用矩阵软件(如MATLAB)进行矩阵运算,提高计算效率。

情感态度价值观目标:1. 培养学生对矩阵运算的兴趣,激发学习热情;2. 培养学生的团队协作精神,学会与他人共同探讨问题;3. 引导学生认识到矩阵运算在科学技术发展中的重要性,增强学生的国家使命感和社会责任感。

课程性质:本课程为高中数学选修课程,适用于对数学有一定基础的学生。

学生特点:学生具备一定的代数基础,对矩阵概念有一定了解,但对矩阵运算尚不熟悉。

教学要求:结合学生特点,注重启发式教学,通过实例分析、问题解决等方法,使学生掌握矩阵运算的基本技能,并培养其运用矩阵运算解决实际问题的能力。

在教学过程中,关注学生的情感态度价值观的培养,提高学生的学习兴趣和积极性。

最终实现课程目标的分解与达成。

二、教学内容1. 矩阵的定义与基本概念:回顾矩阵的定义,讨论矩阵的行、列、元素等基本属性。

教材章节:第二章第一节2. 矩阵的加、减运算:讲解矩阵加、减法的规则,通过例题演示运算方法。

教材章节:第二章第二节3. 矩阵的乘法运算:介绍矩阵乘法法则,分析矩阵乘法与实数乘法的异同。

教材章节:第二章第三节4. 矩阵的转置与逆矩阵:阐述转置矩阵的概念,探讨逆矩阵的定义及性质。

教材章节:第二章第四节5. 矩阵的应用:介绍矩阵在解决线性方程组、图像处理等方面的应用。

教材章节:第二章第五节6. 矩阵运算软件实践:指导学生使用MATLAB软件进行矩阵运算,提高计算效率。

数据结构课程设计(矩阵的运算)

数据结构课程设计报告题目:_____________________________________专业:_____________________________________班级:_____________________________________学号:_____________________________________姓名:_____________________________________指导老师:__________________________________时间:_____________________________________、课程设计题目及所涉及知识点设计题目是“矩阵的运算” ,所涉及的知识点主要是:1、数据结构中的对于结构体的定义,用typedef struct 来实现,根据所设计的问题在结构体里面定义数据类型及其变量,用define 定义数组的大小,然后利用typedef 来实现对于变量的未知类型确定正确的类型。

2、利用数组的形式来储存数据,在实现不同操作过程中,有的用一维结构体数组(三元组顺序表)来存储,有的用二维数组来储存。

3、转置的过程中利用的是快速转置的方法,附设了num 和cpot 两个辅助变量。

4、矩阵的加法、减法、乘法、逆运算的基本算法方式。

5、通过调用每个函数,来实现每个算法的功能。

、课程设计思路及算法描述设计思路:1、首先是对于转置的考虑,要运用快速转置的方法实现,必须用三元组顺序表来储存数据,所以在第一个结构体中存在int 类型的行数(mu )列数(nu )以及非零元素的个数(tu );然后第二个结构体中分别有非零元素的行下标(i)、列下标(j)和元素数值(e),最后在第一个结构体中实现对第二个结构体成为数组结构体类型。

2、对于其余加法、减法、乘法和逆运算则是运用另一个结构体来实现,里面只有矩阵的行数、列数和一个二维数组(用float 来定义类型)。

矩阵计算c课程设计

矩阵计算c课程设计一、教学目标本课程的教学目标是让学生掌握矩阵计算的基本理论、方法和应用,培养学生运用矩阵计算解决实际问题的能力。

具体分为以下三个部分:1.知识目标:(1)理解矩阵的概念及其运算规则;(2)掌握矩阵的线性变换、特征值和特征向量;(3)了解矩阵计算在实际应用中的广泛性。

2.技能目标:(1)能够熟练运用矩阵计算解决数学问题;(2)能够运用矩阵计算进行数据分析;(3)能够运用矩阵计算优化问题求解。

3.情感态度价值观目标:(1)培养学生对矩阵计算的兴趣,激发学生主动学习的热情;(2)培养学生团队协作、讨论交流的良好学习习惯;(3)培养学生运用矩阵计算解决实际问题的责任感和使命感。

二、教学内容本课程的教学内容主要包括矩阵的基本运算、矩阵的线性变换、特征值和特征向量、以及矩阵计算在实际应用中的案例分析。

具体安排如下:1.矩阵的基本运算:矩阵的加法、减法、数乘、乘法;2.矩阵的线性变换:线性变换的定义、矩阵与线性变换的关系;3.特征值和特征向量:特征值、特征向量的定义及求解方法;4.矩阵计算在实际应用中的案例分析:线性方程组、线性规划、图像处理等。

三、教学方法本课程采用多种教学方法相结合,以提高学生的学习兴趣和主动性。

具体方法如下:1.讲授法:用于讲解矩阵计算的基本理论、方法和应用;2.讨论法:学生分组讨论,培养学生的团队协作能力和表达能力;3.案例分析法:分析实际应用中的矩阵计算问题,提高学生运用知识解决实际问题的能力;4.实验法:安排上机实验,让学生动手实践,巩固所学知识。

四、教学资源本课程的教学资源包括教材、参考书、多媒体资料和实验设备。

具体如下:1.教材:选用国内知名出版社出版的 Matrix Calculus 教材;2.参考书:推荐学生阅读矩阵计算相关的国内外专著;3.多媒体资料:制作精美的PPT,用于课堂演示;4.实验设备:配置计算机实验室,供学生上机实验使用。

五、教学评估本课程的教学评估采用多元化的评价方式,以全面客观地评价学生的学习成果。

数据结构程序设计-矩阵的运算


二.概要设计:
1、抽象数据类型定义如下: ADT SparseMatrix{ 数据对象D:D={aij|i=1,2,3…,m;j=1,2,3…,n; ai ∈ElemSet,m和n分别称为矩阵的行数和列数} 数据关系R: R={Row,Col} Row={<ai,j,ai,j+1>|1≤i≤m, 1≤j≤n-1} Col={<ai,ai+1,j>|1≤i≤m-1, 1≤j≤n} 基本操作 本程序中,用三元组顺序表作为存储结构。 (1)、CreatSMatrix (TSMatrix &M) 操作结果:创建矩阵M。 (2)、AddSMatrix(TSMatrix A,TSMatrix B,TSMatrix &C,int n) 初始条件:矩阵A和B的行数和列数对应相等。 操作结果:求矩阵A、B的和C=A+B。 (3)、SubMatrix (TSMatrix *a,TSMatrix *b) 初始条件:矩阵A和B的行数和列数对应相等。 操作结果:求矩阵A、B的和C=A+B。 (4)、MultiplicationMatrixPow (TSMatrix *a,TSMatrix *b,TSMatrix *c) 初始条件:矩阵A和B的行数和列数匹配 操作结果:求矩阵A、B的和C=A*B。 (5) OutputSMatrix(TSMatrix M) 初始条件:矩阵M已存在 操作结果:输出矩阵M 2、 本程序包含5个模块
for(i=1;i<=M->mu;i++)//输出矩阵 { for(j=1;j<=M->nu;j++) printf("%5d",a[i][j]); printf("\n"); } } //*************矩阵的求和运算*****************// int AddSMatrix(TSMatrix *M,TSMatrix *N,TSMatrix *Q)//求 采用三元组顺序表存储表示的稀疏矩阵M和N的和,结果赋给矩阵Q { int i,j,p,q,x=0,y=0; if((M->mu<=0)||(M->nu<=0)||(M->tu<=0)||(N->mu<=0)||(N>nu<=0)||(N->tu<=0))//判断行数列数非零元素个数是否符合匹配 return ERROR; if(M->mu!=N->mu||M->nu!=N->nu)//判断A与B的行列数 是否相等的 return ERROR; Q->mu=M->mu;//矩阵Q的初始化 Q->nu=M->nu; Q->tu=0; for(i=1;i<=Q->mu;i++) { for(j=1;j<=Q->nu;j++)//寻找矩阵M,N中非零元素相等 的行列 { for(p=1;p<=M->tu;p++)//求矩阵M行列中所对应的 非零元素的值 赋值给X { if((i==M->data[p].row)&&(j==M->data[p].col))// 如果i是矩阵M中非零元素行,j是其列 { x=M->data[p].e;

c课程设计矩阵类

c 课程设计矩阵类一、教学目标本课程的教学目标是使学生掌握矩阵类的相关知识,包括矩阵的定义、矩阵的运算、矩阵的性质和矩阵的应用。

具体来说,知识目标要求学生能够准确地描述矩阵的概念,熟练地进行矩阵的加、减、乘、除等运算,理解矩阵的性质,如可逆性、行列式等,并能够应用矩阵解决实际问题。

技能目标要求学生能够运用矩阵的知识解决数学问题,如线性方程组的求解、矩阵的逆的求解等。

情感态度价值观目标要求学生对矩阵类知识产生兴趣,能够积极地参与课堂讨论和实践活动,培养学生的创新思维和团队合作精神。

二、教学内容本课程的教学内容主要包括矩阵的定义和运算、矩阵的性质和应用。

具体来说,首先介绍矩阵的概念,包括矩阵的元素、矩阵的行和列、矩阵的规模等;然后讲解矩阵的运算,包括矩阵的加、减、乘、除等,以及矩阵的运算规律和运算性质;接着介绍矩阵的性质,如可逆性、行列式等,以及矩阵的性质的应用;最后讲解矩阵的应用,如线性方程组的求解、矩阵的逆的求解等,以及矩阵在实际问题中的应用。

三、教学方法为了实现本课程的教学目标,采用多种教学方法进行教学。

首先,采用讲授法,向学生讲解矩阵类的相关知识,包括矩阵的定义、运算、性质和应用;其次,采用讨论法,学生进行小组讨论,让学生通过交流和合作解决问题,培养学生的创新思维和团队合作精神;再次,采用案例分析法,给学生提供实际的案例,让学生运用矩阵的知识解决问题,提高学生的应用能力;最后,采用实验法,让学生进行实验操作,验证矩阵的性质和运算规律,提高学生的实践能力。

四、教学资源为了支持本课程的教学内容和教学方法的实施,准备了一系列的教学资源。

主要使用的教材是《线性代数》,该书详细介绍了矩阵类的相关知识,包括矩阵的定义、运算、性质和应用。

此外,还准备了一些参考书籍,如《矩阵分析与应用》、《线性方程组及其求解方法》等,供学生进行深入学习。

同时,准备了一些多媒体资料,如教学视频、PPT课件等,用于辅助教学。

此外,还准备了一些实验设备,如计算器、计算机等,供学生进行实验操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计报告题目:专业:班级:学号:姓名:指导老师:时间:一、课程设计题目及所涉及知识点设计题目是“矩阵的运算”,所涉及的知识点主要是:1、数据结构中的对于结构体的定义,用typedef struct来实现,根据所设计的问题在结构体里面定义数据类型及其变量,用define定义数组的大小,然后利用typedef 来实现对于变量的未知类型确定正确的类型。

2、利用数组的形式来储存数据,在实现不同操作过程中,有的用一维结构体数组(三元组顺序表)来存储,有的用二维数组来储存。

3、转置的过程中利用的是快速转置的方法,附设了num和cpot两个辅助变量。

4、矩阵的加法、减法、乘法、逆运算的基本算法方式。

5、通过调用每个函数,来实现每个算法的功能。

二、课程设计思路及算法描述设计思路:1、首先是对于转置的考虑,要运用快速转置的方法实现,必须用三元组顺序表来储存数据,所以在第一个结构体中存在int类型的行数(mu)列数(nu)以及非零元素的个数(tu);然后第二个结构体中分别有非零元素的行下标(i)、列下标(j)和元素数值(e),最后在第一个结构体中实现对第二个结构体成为数组结构体类型。

2、对于其余加法、减法、乘法和逆运算则是运用另一个结构体来实现,里面只有矩阵的行数、列数和一个二维数组(用float来定义类型)。

3、在main函数里面,来实现对于数据的输入操作,利用if语句进行选择来执行操作,利用do……while语句来实现功能的循环操作。

4、分五个函数调用分别来实现转置、加法、乘法、和逆运算,每个里面都有最终输出结果的方式。

算法1:矩阵的转置输入:mu中存放矩阵的行数,tu存放矩阵的列数,i接收行下标的数值,j接收列下标的数值,e来存储数据。

输出:转置后的新矩阵。

输入两行两列数据,在第二行第一列中有个数据为12,其余都为0,则输出的结果为第一行第二列数据为12,其余为0。

算法2:矩阵的加法运算输入:i中存放矩阵的行数,j中存放矩阵的列数,二维数组b中存放每个数据。

输出:矩阵加完后的另一个新矩阵。

输入两个两行三列的矩阵,在第一个矩阵里面第一行第一列有个数据20,其余为0,在第二个矩阵里面第一行第二列中有个数据30,其余为0,则输出的结果为一个两行三列的矩阵,其中第一行第一列数据为20,第一行第二列数据为30,其余为0。

算法3:矩阵的减法运算输入:i中存放矩阵的行数,j中存放矩阵的列数,二维数组b中存放每个数据。

输出:矩阵相减后的另一个新矩阵。

输入两个两行三列的矩阵,在第一个矩阵里面第一行第一列有个数据20,其余为0,在第二个矩阵里面第一行第一列中有个数据30,其余为0,则输出的结果为一个两行三列的矩阵,其中第一行第一列数据为-10,其余为0。

算法4:矩阵的乘法运算输入:i中存放矩阵的行数,j中存放矩阵的列数,二维数组b中存放每个数据。

输出:矩阵加完后的另一个新矩阵。

输入两行两列的矩阵,第一个矩阵里面第一行第一列有个数据2第二列有个数据3,其余为0,在第二个矩阵里面第一行第一列有个数据2第二列中有个数据3,其余为0,则输出的结果为一个两行两列的矩阵,其中第一行第一列数据为4,第二列为6,第一行第二列数据为30,其余为0。

算法五:矩阵的逆运算输入:i中存放矩阵的行数,j中存放矩阵的列数,二维数组b中存放每个数据。

输出:矩阵进行逆运算完后的另一个新矩阵。

输入三行三列的矩阵,第一个矩阵里面第一行第一列有个数据3个数据分别为1,2,3;第二行的数据分别为2,2,1;第三行的暑假分别为3,4,3;则输出的结果为三行三列矩阵,其中第一行的数据为1,3,-2;第二行的数据分别为-1.5,-3,2.5;第三行的数据分别为1,1,-1。

三、课程设计中遇到的难点及解决办法1、在转置的过程中,要求把转置后的矩阵输出出来,因为用的是三元组顺序表的存储形式,所以不知道怎么去实现,然后通过进一步思考,运用先把一个矩阵存入零元素,然后在对其进行更改,最后完成了此项的工作。

2、就是对于矩阵的乘法运算和逆运算,掌握的不够熟练,先是通过书籍对于矩阵的乘法和逆运算得到更深的了解,然后通过一步步写程序最后实现了矩阵的乘法运算和逆运算。

四、总结通过此次课程设计,让我对于编程有了更深的认识,老师的精心指导让我学会到了很多,不仅仅是代码,最主要的让我的思维开阔了很多,在这个过程中,通过不断的尝试,不断的修改,最终克服了困难,完成了自己的任务,心里有种无比的喜悦,但同时又感觉到了自己的知识面的狭隘,还有好多知识的海洋还没有畅游,等待自己将是一回更大的考验。

对于现在的自己,对学习程序还是有很大的兴趣,它让我体验到了很多的快乐,我要进步跟进现在的课程,努力去发展自己,按照老师说的最主要的是具有了编程的思想,则具有了编程的能力,我想我可以成功完成自己的目标。

五、附录—主要源程序代码及运行结果1、主要源程序代码:# include <stdio.h># define max 100# define maxsize 100typedef float elemtype;typedef struct{ float b[max][max];int i;//矩阵的行数int j;// 矩阵的列数} tsmatrix;typedef struct {int i,j;//该非零元的行下标和列下标elemtype e;}triple;typedef struct{ triple data[maxsize+1];//非零元三元组,data[0]未用int mu,nu,tu;//矩阵的行数、列数和非零元个数}sqlist ;void zhuanzhi(sqlist s1,tsmatrix &l2)//矩阵的转置{ sqlist s2;int col,t9,p,q,a1,b1;int num[100],copt[100];s2.mu=s1.mu;s2.nu=s1.nu;s2.tu=s1.tu;if(s2.tu>0){ for(col=1;col<=s1.nu;++col) num[col]=0;for(t9=1;t9<=s1.tu;++t9)++num[s1.data[t9].j];//求s1中每一列含非零元个数copt[1]=1;//求第col列中第一个非零元在s2.data中序号for(col=2;col<=s1.nu;++col) copt[col]=copt[col-1]+num[col-1];for(p=1;p<=s1.tu;++p){ col=s1.data[p].j;q=copt[col];s2.data[q].i=s1.data[q].j; s2.data[q].j=s1.data[q].i;s2.data[q].e=s1.data[q].e;++copt[col];l2.b[s2.data[q].i][s2.data[q].j]=s2.data[q].e;}printf("转置后的数据是:\n");printf("**************************************\n");for(a1=1;a1<=s1.nu;a1++){ for(b1=1;b1<=s1.mu;b1++){printf("%10.3f",l2.b[a1][b1]);printf("\t");}printf("\n");}printf("************************************");printf("\n");}}void jiafa(tsmatrix l4, tsmatrix l5)//矩阵的加法{tsmatrix l6;for(int t=0; t<l4.i;t++){ for(int t1=0;t1<l4.j;t1++)l6.b[t][t1]=l4.b[t][t1]+l5.b[t][t1];}printf("矩阵加完后的结果:\n");printf("******************************\n");for(int t2=0; t2<l4.i;t2++){ for(int t3=0;t3<l4.j;t3++){printf("%10.3f",l6.b[t2][t3]);printf("\t");}printf("\n");}printf("******************************\n");}void jianfa(tsmatrix l4, tsmatrix l5)//矩阵的减法{tsmatrix l6;for(int t=0; t<l4.i;t++){ for(int t1=0;t1<l4.j;t1++)l6.b[t][t1]=l4.b[t][t1]-l5.b[t][t1];}printf("矩阵相减后的结果:\n");printf("******************************\n");for(int t2=0; t2<l4.i;t2++){ for(int t3=0;t3<l4.j;t3++){printf("%10.3f",l6.b[t2][t3]);printf("\t");}printf("\n");}printf("******************************\n");}void chengfa(tsmatrix l4, tsmatrix l5)//矩阵的乘法{ tsmatrix l6;for(int t=0;t<l4.i;t++)for(int t1=0;t1<l5.j;t1++){ l6.b[t][t1]=0;for(int k=0;k<l4.j;k++)l6.b[t][t1]+=l4.b[t][k]*l5.b[k][t1];}printf("矩阵乘完后的结果:\n");printf("******************************\n");for(int t2=0; t2<l4.i;t2++){ for(int t3=0;t3<l5.j;t3++){printf("%10.3f",l6.b[t2][t3]);printf("\t");}printf("\n");}printf("******************************\n");}void niyunsuan( tsmatrix s)//矩阵的逆运算{ tsmatrix s1;float t,x;int k,i,j;for(i=0;i<s.i;i++)for(j=0;j<(2*s.i);j++){ if(j<s.i) s1.b[i][j]=s.b[i][j];else if(j==s.i+i) s1.b[i][j]=1.0;else s1.b[i][j]=0.0;}for(i=0;i<s.i;i++){ for(k=0;k<s.i;k++){if(k!=i){ t=s1.b[k][i]/s1.b[i][i];for(j=0;j<(2*s.i);j++){ x=s1.b[i][j]*t;s1.b[k][j]=s1.b[k][j]-x;}}}}for(i=0;i<s.i;i++){ t=s1.b[i][i];for(j=0;j<(2*s.i);j++)s1.b[i][j]=s1.b[i][j]/t;}float y=1.0;for(i=0;i<s.i;i++) y=y*s1.b[i][i];if(y==0.0)printf("对不起,您输入的矩阵没有逆矩阵");else{ for(i=0;i<s.i;i++)for(j=0;j<s.i;j++)s.b[i][j]=s1.b[i][j+s.i];printf("矩阵逆运算后的结果:\n");for(i=0;i<s.i;i++){ for(j=0;j<s.i;j++)printf("%10.3f",s.b[i][j]);printf("\n");}}}void main(){ tsmatrix l,l1,l3; sqlist s;int m,n,m1,n1,n4,n5,t,t1,t2,t3,t4,t5,t6,t7,t8;do{ printf("请输入你要进行的操作:\n");printf("******************************\n");printf("矩阵转置运算请按1\n矩阵的加法运算请按2\n矩阵的乘法运算请按3\n 矩阵的减法运算请按4\n矩阵的逆运算请按5\n结束请按0:\n");printf("******************************\n");scanf("%d",&m1);if(m1==1){ printf("您选择进行的操作是矩阵的转置运算\n\n");printf("请输入你要转置矩阵的行数、列数和非零元的个数\n");scanf("%d",&t1);scanf("%d",&t2);scanf("%d",&t3);s.mu=t1;s.nu=t2;s.tu=t3;printf("请输入你要转置矩阵非零元的行下标、列下标(从[1][1]开始由左至右由上到下)及其数据(按行逐个输入)\n");for(t4=1;t4<=s.tu;t4++){scanf("%d",&t5);scanf("%d",&t6);s.data[t4].i=t5;s.data[t4].j=t6;scanf("%f",&s.data[t4].e);}for(t7=1;t7<=s.nu;t7++){ for(t8=1;t8<=s.mu;t8++)l1.b[t7][t8]=0.0;}zhuanzhi(s,l1);}if(m1==2){printf("您选择进行的操作是矩阵的加法运算\n\n");printf("请输入矩阵的行数和列数:\n");scanf("%d",&n);scanf("%d",&m);l.i=n;l.j=m;l3.i=n;l3.j=m;printf("******************************\n");printf("请输入第一个%d行%d列的矩阵\n",l.i,l.j); { for(t=0;t<l.i;t++)for(n1=0;n1<l.j;n1++)scanf("%f",&l.b[t][n1]);}printf("******************************\n");printf("******************************\n");printf("请输入第二个%d行%d列的矩阵\n",l3.i,l3.j);for(n4=0;n4<l3.i;n4++){ for(n5=0;n5<l3.j;n5++)scanf("%f",&l3.b[n4][n5]);}printf("******************************\n");jiafa(l,l3);}if(m1==3){printf("您选择进行的操作是矩阵的乘法运算\n(只有当第一个矩阵的列数等于第二个矩阵的行数方可进行计算)\n\n");printf("请输入第一个矩阵的行数和列数:\n");scanf("%d",&n);scanf("%d",&m);l.i=n;l.j=m;printf("******************************\n");printf("请输入第一个%d行%d列的矩阵\n",l.i,l.j);{ for(t=0;t<l.i;t++)for(n1=0;n1<l.j;n1++)scanf("%f",&l.b[t][n1]);}printf("******************************\n");printf("******************************\n");printf("请输入第二个矩阵的行数和列数:\n");scanf("%d",&n1);scanf("%d",&m1);l3.i=n1;l3.j=m1;printf("******************************\n");printf("请输入第二个%d行%d列的矩阵\n",l3.i,l3.j);for(n4=0;n4<l3.i;n4++){ for(n5=0;n5<l3.j;n5++)scanf("%f",&l3.b[n4][n5]);}printf("******************************\n");chengfa(l,l3);}if(m1==4){printf("您选择进行的操作是矩阵的减法运算\n\n");printf("请输入矩阵的行数和列数:\n");scanf("%d",&n);scanf("%d",&m);l.i=n;l.j=m;l3.i=n;l3.j=m;printf("******************************\n");printf("请输入第一个%d行%d列的矩阵\n",l.i,l.j);{ for(t=0;t<l.i;t++)for(n1=0;n1<l.j;n1++)scanf("%f",&l.b[t][n1]);}printf("******************************\n");printf("******************************\n");printf("请输入第二个%d行%d列的矩阵\n",l3.i,l3.j);for(n4=0;n4<l3.i;n4++){ for(n5=0;n5<l3.j;n5++)scanf("%f",&l3.b[n4][n5]);}printf("******************************\n");jianfa(l,l3);}if(m1==5){printf("您选择进行的操作是矩阵的逆运算\n\n");printf("请输入矩阵的维数(即行和列相等的矩阵):\n");scanf("%d",&n);l.i=n;l.j=n;printf("******************************\n");printf("请输入%d行%d列的矩阵\n",l.i,l.j);{ for(t=0;t<l.i;t++)for(n1=0;n1<l.j;n1++)scanf("%f",&l.b[t][n1]);}printf("******************************\n");niyunsuan(l);}}while(m1!=0);}2、运行结果(如下图):(1)、执行的首界面:(2)、矩阵的转置运算:(3)、矩阵的加法运算:(4)、矩阵的减法运算:(5)、矩阵的乘法(6)、矩阵的逆运算:(7)、矩阵可以循环运算:六、指导老师评语及成绩。

相关文档
最新文档