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

合集下载

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

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

合肥学院计算机科学与技术系课程设计报告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语言课程设计矩阵运算

课程设计任务书一、课程设计题目:矩阵运算二、课程设计工作自2008年9月8日起至2008年9月12日止三、课程设计内容:运用所学的C语言知识,编制和调试程序,具有如下功能:(1)两个矩阵加、减、乘等运算(2)对某一矩阵增加一行或一列(3)对某一矩阵减少一行或一列(4)自己再增加一项或两项功能四、课程设计要求:程序质量:贯彻结构化程序设计思想。

用户界面友好,功能明确,操作方便;可以加以其它功能或修饰。

用户界面中的菜单至少应包括“输入数据”、“算术运算”、“增行”、“减行”、“退出”5项。

代码应适当缩进,并给出必要的注释,以增强程序的可读性。

课程设计说明书:课程结束后,上交课程设计说明书(打印稿和电子稿),其内容如下:封面课程设计任务书目录需求分析(分析题目的要求)程序流程图(总体流程图和主要功能模块流程图)核心技术的实现说明及相应程序段个人总结参考资料源程序及适当的注释指导教师:学生签名:成绩:教师评语:目录一、需求分析 (1)二、程序流程图 (2)三、核心技术的实现说明及相应程序段 (8)四、个人总结 (18)五、参考资料 (19)六、源程序 (19)一、需求分析经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,其中每一个模块对应一个函数,他们的功能分别是:加运算函数(jia),减运算函数(jian),乘运算函数(cheng),增行函数(jiahang),减列函数(jianlie)以及求最大值函数(fun)。

在这些函数当中,前五个函数的实现严格按照题目的要求,而最后一个函数为自行设计的函数。

1、增加运算函数主要实现将两矩阵相加的功能;2、减运算函数实现的功能是将两矩阵相减;3、乘运算函数主要实现将两矩阵相乘的功能;4、增行函数实现的是在所选的矩阵中增加一行的功能;5、减列函数实现的是在所选的矩阵中减掉一列的功能;6、求取最大值函数实现的功能是找到并输出所给矩阵最大值。

程序的一次运行当中可以循环执行所有的功能,并根据需要终止程序的执行。

数据结构矩阵相关操作的课程设计

数据结构矩阵相关操作的课程设计

课程设计题目矩阵乘法教学院计算机学院专业09计算机科学与技术班级姓名指导教师年月日目录1 概述 (3)2 设计目的 (3)3 设计功能说明 (3)4 详细设计说明 (3)5 流程图 (4)6 调试及结果 (5)1程序调试 (5)2运行编译连接过程......................................................... 5-8 7 总结 (9)附录...........................................................................10-24 参考文献 (25)成绩评定表 (26)1 概述数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。

通过课程设计,不仅可以加深学生对数据结构基本概念的了解,巩固学习成果,还能够提高实动手力。

为学生后继课程的学习打下良好的基础。

2 设计目的《数据结构》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。

因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。

通过程序的编译掌握对程序的调试方法及思想,并且让学生学会使用一些编程技巧。

促使学生养成良好的编程习惯。

1.使学生能够较全面地巩固和应用课堂中所学的的基本理论和程序设计方法,能够较熟练地完成程序的设计和调试。

2.培养学生综合运用所学知识独立完成程序课题的能力。

3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。

4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的素质。

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 来定义类型)。

  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 ........ w hile语句来实现功能的循环操作。

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 100 typedef 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");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(" f**************************** **\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");} for(int t2=0; t2<l4.i;t2++) { for(intt3=0;t3<l4.j;t3++)printf(" f**************************** **\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(" f**************************** **\n");void niyunsuan( tsmatrix s)// 矩阵的逆运算{printf("%10.3f",l6.b[t2][t3]);printf("\t");}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");}{ tsmatrix s1;printf("f**************************** **\n"); 矩阵的乘法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");3\n printf(" 矩阵转置运算请按1\n 矩阵的加法运算请按2\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(" f**************************** **\n");jiafa(l,l3);}if(m1==3){阵的行数方可进行计算)\n\n");printf(" 请输入第一个矩阵的行数和列数:\n"); scanf("%d",&n);scanf("%d",&m);l.i=n;l.j=m;printf(" f**************************** **\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(" f**************************** **\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);(3)、矩阵的加法运算:層选择进行的操忙是矩阵的转置运覧 [青输入你要转置柜阵的行数、列数和非零元的个数 请BA 你蠻荐置矩阳E 零元的彳rr 标、列下标t 从⑴⑴开始庄左至右由上到F 戍其数据t 按个磕X? 1 2 32转置后的数据是:幕K KKICK 3CX 梵耳插M NWNMT 梵比寰注共基寰廉8(0,000 0.000 32.000 0.0002、 运行结果(如下图): (1)、执行的首界面: 〔7回丨厉I‘■J SJ faJHIfaJial ■ iaihJ ,hi 2, Ldh ■也 • W 參竞结闵\炖匚noEoE Visjal $tudio\Co m mor\M^D ev^8\B i n\Ce bug\5fd.eie r 歿直运算请按1柄加法运鼻请:[ 髒養蹩堡 屮址运第请抉 (2)、矩阵的转置运算: ■ G '啟拒结甘."vlicro Ec/ft 7 su a I Stud i o' Cc mmonVM 5D ev^B\ Bin\te bug-sfd .e>e' 口1卄1 2 34栗卄丄按按擾 -W 浚士早冃土冃安 L 丁 E 主養昱霍 进*算运运运“畀 要"运袪注迭运0: 尔卄置加乘诚逆按 丿卄書的的的请艮进讦的操作;■ * ttuid IC\C D m rron\M De-/^ £\G i n\De bug d. exe"请输入第一个钉代列的矩阵2您送择诜行的輾作是矩阵的加法运算请输入矩陆的行数和列数:请输入笫二个2行北列的矩阵1 3(4)、矩阵的减法运算:F青土<戶怖mh圭冃JuJ_lrtJI请输人矩眩的行数和列熱请艳入第一个刘亍2列的矩库1 21 2阵相减后的结果;-1.000-1.000请输入第二个羽冠列的楚阵1 3!=□' 3:1 数気结吃\|V i crosoft Visual ^tudio\Canrmor;M i D BV9&'.BinVCebug\wtd.exe'*MMw234卄按请请请按卄请*MX请卄算运运运*卄运法S法运B:z辭的的的请HHEEELUJ士匸”(5)、矩阵的乘法(7)、矩阵可以循环运算:二 2 3 4 -1615 一一按请请请按=请 ……算运运运算 一运法法袪运B: …奮的的的请卄X 二疆薯餐粵歩阵的;亍数方可进行计算〉青输入第一个矩阵的行数和列救: 请输入第一个彭刃列的矩阵 12 3 £34 MK HK NK MK MK MM XK M-M M MX MM HM MM HM M~K MT肾備*t ■・!廉釜・從科■科■・・K■ ■■ M Miift 甘禅f t请输入第二个矩陈的右数和列姝 (6)、矩阵的逆运算: SS t e f f i - ■ I -f 、I F ^-_n 请亶 一舁运运L g 畀运」法法法一疋0; 置 t a l s f e 临的的请5 冃至冃宀夏 您选择邀亍的操作是矩阵的世运算 请输入矩阵的维数唧行和列相等的矩阻:肯输尔劳讲fT 的唤l.WO -1.560 -3.960 1.WU -2-060 2.see -i.wu 请输人怖3列比矩萍 1 2 d2 2 11 4 3 'G '裁笔塔陀\M crosoft Visual &tud ic \Corrmon\M£De\,Q£^lEin'^Debuq 1'exc" 丄書F 按请请语按M 运运左B 阵隆区算E 的給里: U 虏r 柠青土 IL青按 41^1 '_1 - 1 J J J 诰异專异诗 M 运运运算 B 秤書 需的的的诘六、指导老师评语及成绩。

相关文档
最新文档