数据结构课程设计报告---矩阵的运算
- 格式:doc
- 大小:128.00 KB
- 文档页数:12
数据结构实验报告稀疏矩阵运算实验目的:1.学习并理解稀疏矩阵的概念、特点以及存储方式。
2.掌握稀疏矩阵加法、乘法运算的基本思想和算法。
3.实现稀疏矩阵加法、乘法的算法,并进行性能测试和分析。
实验原理:稀疏矩阵是指矩阵中绝大多数元素为0的矩阵。
在实际问题中,有许多矩阵具有稀疏性,例如文本矩阵、图像矩阵等。
由于存储稀疏矩阵时,对于大量的零元素进行存储是一种浪费空间的行为,因此需要采用一种特殊的存储方式。
常见的稀疏矩阵的存储方式有三元组顺序表、十字链表、行逻辑链接表等。
其中,三元组顺序表是最简单直观的一种方式,它是将非零元素按行优先的顺序存储起来,每个元素由三个参数组成:行号、列号和元素值。
此外,还需要记录稀疏矩阵的行数、列数和非零元素个数。
稀疏矩阵加法的原理是将两个稀疏矩阵按照相同的行、列顺序进行遍历,对于相同位置的元素进行相加,得到结果矩阵。
稀疏矩阵乘法的原理是将两个稀疏矩阵按照乘法的定义进行计算,即行乘以列的和。
实验步骤:1.实现稀疏矩阵的三元组顺序表存储方式,并完成稀疏矩阵的初始化、转置、打印等基本操作。
2.实现稀疏矩阵的加法运算,并进行性能测试和分析。
3.实现稀疏矩阵的乘法运算,并进行性能测试和分析。
4.编写实验报告。
实验结果:经过实验测试,稀疏矩阵的加法和乘法算法都能正确运行,并且在处理稀疏矩阵时能够有效节省存储空间。
性能测试结果表明,稀疏矩阵加法、乘法的运行时间与非零元素个数有关,当非零元素个数较少时,运算速度较快;当非零元素个数较多时,运算速度较慢。
实验分析:稀疏矩阵的运算相对于普通矩阵的运算有明显的优势,可以节省存储空间和运算时间。
在实际应用中,稀疏矩阵的存储方式和运算算法都可以进行优化。
例如,可以采用行逻辑链接表的方式存储稀疏矩阵,进一步减少存储空间的占用;可以采用并行计算的策略加快稀疏矩阵的运算速度。
总结:通过本次实验,我深入学习了稀疏矩阵的概念、特点和存储方式,掌握了稀疏矩阵加法、乘法的基本思想和算法,并通过实验实现了稀疏矩阵的加法、乘法运算。
课程设计任务书一、课程设计题目:矩阵运算二、课程设计工作自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.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。
数学矩阵算法范文一、基本概念1.矩阵:矩阵是一个按照长方阵列排列的数,可以表示为一个m×n 的矩阵,其中m表示矩阵的行数,n表示矩阵的列数。
矩阵中的每个元素都可以用一个小写字母表示,例如A或B。
2.矩阵的运算:矩阵的运算包括加法、减法、乘法等操作。
两个相同大小的矩阵可以进行加法和减法,其结果矩阵的对应元素分别是原始矩阵对应元素的和或差。
矩阵的乘法也是常见的操作,它的结果是一个新的矩阵,其中每个元素是原始矩阵中对应行和对应列元素的乘积之和。
3.矩阵的转置:矩阵的转置是将矩阵的行和列互换得到的新矩阵。
转置后的矩阵以T表示,例如A的转置表示为AT。
二、常用操作1.矩阵的加法:两个相同大小的矩阵可以进行加法运算,即对应位置的数字相加。
例如,矩阵A和矩阵B的加法运算可以表示为C=A+B,其中C的元素等于A和B的对应元素之和。
2.矩阵的减法:两个相同大小的矩阵可以进行减法运算,即对应位置的数字相减。
例如,矩阵A和矩阵B的减法运算可以表示为C=A-B,其中C的元素等于A和B的对应元素之差。
3.矩阵的乘法:两个矩阵的乘法需要满足第一个矩阵的列数等于第二个矩阵的行数。
例如,矩阵A为m×n矩阵,矩阵B为n×p矩阵,则A和B的乘积表示为C=AB,其中C为一个m×p的矩阵,其中C的第i行第j 列元素等于A的第i行和B的第j列元素乘积之和。
4.矩阵的转置:矩阵的转置是矩阵的行和列互换得到的新矩阵。
例如,矩阵A的转置表示为AT。
三、应用领域1.线性代数:矩阵在线性代数中有广泛的应用,例如求解线性方程组、求解特征值和特征向量、计算矩阵的逆等。
2.概率论与统计学:矩阵在概率论和统计学中有重要的应用,例如用矩阵来表示随机变量的联合分布矩阵、协方差矩阵等。
3.图论:矩阵在图论中用于表示图的邻接矩阵、路径矩阵等,通过矩阵运算可以解决图论中的一些问题,如最短路径、最小生成树等。
4.信号处理:矩阵在信号处理中被广泛应用,例如用矩阵来表示信号的采样矩阵、变换矩阵等,通过矩阵运算可以实现信号的滤波、降噪、压缩等处理。
c语言课程设计矩阵运算一、教学目标本节课的教学目标是使学生掌握C语言实现矩阵运算的基本方法,包括矩阵的创建、矩阵的加减法、矩阵的转置以及矩阵的乘法。
知识目标要求学生理解矩阵运算的数学原理,能够运用C语言实现矩阵的基本运算;技能目标要求学生熟练使用C语言进行矩阵运算的编程实践;情感态度价值观目标则是培养学生的逻辑思维能力,提高学生对计算机编程的兴趣。
二、教学内容本节课的教学内容主要包括矩阵运算的数学原理介绍、C语言实现矩阵运算的编程实践和代码调试。
教学大纲安排如下:1.引入矩阵的概念和矩阵运算的基本定义。
2.讲解矩阵的创建、矩阵的加减法、矩阵的转置以及矩阵的乘法的数学原理。
3.引导学生运用C语言实现矩阵的基本运算。
4.通过编程实践和代码调试,使学生熟练掌握C语言实现矩阵运算的方法。
三、教学方法本节课采用讲授法、讨论法和实验法相结合的教学方法。
首先,通过讲授法向学生讲解矩阵运算的数学原理和C语言实现方法;其次,通过讨论法引导学生相互交流和讨论,提高他们对矩阵运算的理解;最后,通过实验法让学生动手实践,调试代码,提高他们的编程能力。
四、教学资源本节课的教学资源主要包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于为学生提供理论知识和编程技巧;多媒体资料用于辅助讲解和演示矩阵运算的原理和实现方法;实验设备则是学生进行编程实践和代码调试的必要工具。
五、教学评估本节课的教学评估主要包括平时表现、作业和考试三个部分。
平时表现主要评估学生在课堂上的参与程度、提问和回答问题的积极性等;作业则是对学生掌握矩阵运算能力的考察,要求学生独立完成并提交;考试则是对学生综合运用C语言实现矩阵运算能力的评估,包括理论知识和编程实践。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本节课的教学安排如下:总共安排4个课时,第1课时介绍矩阵运算的数学原理,第2课时讲解C语言实现矩阵运算的方法,第3课时进行编程实践和代码调试,第4课时进行教学评估。
c 课程设计矩阵运算一、教学目标本节课的教学目标是让学生掌握矩阵的基本运算,包括矩阵的加法、减法、数乘以及矩阵的乘法。
通过学习,学生应能理解矩阵运算的定义和规则,并能运用这些运算解决实际问题。
此外,学生还应掌握矩阵运算的数学原理,提高逻辑思维和数学运算能力。
在情感态度价值观方面,学生应培养对数学学科的兴趣,增强自信心,培养团队合作精神。
二、教学内容本节课的教学内容主要包括矩阵的基本运算和数学原理。
首先,介绍矩阵的加法、减法、数乘和矩阵的乘法,通过举例说明这些运算的定义和规则。
然后,讲解矩阵运算的数学原理,包括线性方程组的解法、行列式的计算以及矩阵的逆矩阵。
最后,通过实际案例让学生运用矩阵运算解决实际问题,提高学生的应用能力。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。
首先,采用讲授法,清晰地讲解矩阵运算的定义和规则,以及数学原理。
其次,采用讨论法,让学生分组讨论矩阵运算的应用案例,培养学生的思考和表达能力。
此外,还采用案例分析法,让学生分析实际问题,运用矩阵运算解决问题。
最后,通过实验法,让学生动手实践,加深对矩阵运算的理解。
四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源。
首先,教材和相关参考书,为学生提供系统的学习资料。
其次,多媒体资料,如PPT、教学视频等,用于直观地展示矩阵运算的过程和应用案例。
此外,还将提供实验设备,如计算器、电脑等,让学生进行实际操作,提高实践能力。
通过丰富多样的教学资源,丰富学生的学习体验,提高学习效果。
五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观地评价学生的学习成果。
评估方式包括平时表现、作业、考试等。
平时表现主要评估学生的课堂参与度、提问回答等,通过观察学生的表现来了解他们的学习状态。
作业方面,将布置适量的练习题,要求学生在规定时间内完成,通过批改作业了解学生对矩阵运算的理解和掌握程度。
考试方面,将设置期中考试和期末考试,考试内容涵盖本节课的全部知识点,通过考试来检验学生的学习成果。
数据结构课程设计报告题目:专业:班级:学号:姓名:指导老师:时间:一、课程设计题目及所涉及知识点设计题目是“矩阵的运算”,所涉及的知识点主要是: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中存放每个数据。
矩阵运算实验报告实验目的:通过矩阵运算实验,探究矩阵的基本运算规则、性质及应用,并加深对矩阵运算的理解。
实验原理:矩阵是一个由元素按照行和列排列成的矩形阵列,可以进行加法、减法、乘法等基本的运算。
矩阵的加法与减法满足交换律、结合律和分配律;矩阵的乘法满足结合律、分配律和左乘右乘不一定相等的性质。
实验步骤:1. 实验前的准备:准备两个矩阵A和B,并确定其维度。
2. 进行矩阵加法运算:将矩阵A与矩阵B的对应元素相加,得到新的矩阵C。
3. 进行矩阵减法运算:将矩阵A与矩阵B的对应元素相减,得到新的矩阵D。
4. 进行矩阵乘法运算:将矩阵A的行元素与矩阵B的列元素对应相乘,并将结果相加,得到新的矩阵E。
5. 对矩阵进行转置:将矩阵A的行与列互换,得到新的矩阵F。
6. 求矩阵的逆:若矩阵A可逆,则找到矩阵A的逆矩阵G。
实验结果:1. 矩阵加法运算的结果:得到新的矩阵C,其维度与矩阵A和B相同,且C(i,j) = A(i,j) + B(i,j)。
2. 矩阵减法运算的结果:得到新的矩阵D,其维度与矩阵A和B相同,且D(i,j) = A(i,j) - B(i,j)。
3. 矩阵乘法运算的结果:得到新的矩阵E,其维度为A的行数乘以B的列数,且E(i,j) = Σ(A(i,k)*B(k,j)),k的取值范围为1到B的行数(或A的列数)。
4. 矩阵转置的结果:得到新的矩阵F,其维度与矩阵A相反,即F的行数等于A的列数,F的列数等于A的行数,且F(i,j) = A(j,i)。
5. 矩阵逆矩阵的结果:得到新的矩阵G,其与矩阵A的乘积为单位矩阵,即A*G = G*A = I,其中I为单位矩阵。
实验分析:1. 从矩阵加法与减法运算的结果可以看出,矩阵的加法和减法满足交换律、结合律和分配律。
这说明矩阵加法和减法具有良好的运算性质。
2. 从矩阵乘法运算的结果可以看出,矩阵的乘法满足结合律和分配律,但左乘右乘不一定相等,即AB≠BA。
序号:学号:------------课程设计设计课程名称:C语言课程设计题目:矩阵的运算学生姓名:**********学院(系):********* 专业班级:*********指导教师:******* 专业技术职务:设计时间:**** 年* 月** 日 ****年* 月**日目录1.矩阵运算任务书 (3)2.描述及绘制出系统的功能结构框图 (7)3.C语言程序代码 (8)4.使用说明 (15)5.设计日志及心得体会 (16)"矩阵运算"任务书一、目的要求本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成一个矩阵运算子程序集,并能最终实现本系统的功能要求。
二、功能要求【题目描述】矩阵运算是大多数科学运算的必要工具。
假定所有矩阵均以文本文件形式保存,试编写程序,处理简单的矩阵运算。
矩阵文件每一行以文本保存矩阵中一行数据每个数据之间以一个或者多个空格隔开。
目前矩阵仅保存整数值。
下面是一个矩阵文件例子:文件名:matrix1.txt1 123 -43 1 -14 52 0 0 5 65 6 7 8 910 11 12 14 13你的程序需要实现以下功能:1.矩阵加法。
2.矩阵转置3.矩阵乘法【程序要求】(1)程序正确。
能够严格实现任务书中描述的功能;(2)界面友好。
尽可能使界面友好、直观、易操作;(3)风格友好。
源程序应有良好的编码风格,使程序容易阅读。
(4)从文件中读矩阵,将矩阵写入文件,矩阵3个操作均需要以子程序形式编写。
【输入/输出要求】(1)每项功能在选择后,应提示用户输入源矩阵所在文件名,并检验该文件是否存在,但是并不读取该文件内容。
然后再提示用户输入结果矩阵文件名。
通过子程序读取矩阵数据,将运算结果同时输出到文件和屏幕上。
(2)所有源矩阵均可使用记事本生成。
(3)若main函数带有参数repeat则所有读取矩阵和运算函数操作均需重复10000次。
课 程 设 计学 号: 200940410101题 目矩阵乘法教 学 院计算机学院 专 业09计算机科学与技术 班 级 09计科(1)班姓名张祥 指导教师祁文青2010 年 12 月 25 日课程设计(论文)课程设计任务书(2010~2011学年第一学期)学生姓名:张祥专业班级:09计算机科学与技术(1)班指导教师:祈文青工作部门:计算机学院一、课程设计题目矩阵乘法二、课程设计内容1.矩阵的存储2.矩阵的乘法3.矩阵的的加法与减法三、进度安排1.分析问题,给出数学模型,选择数据结构.2.设计算法,给出算法描述3.给出源程序清单4. 编辑、编译、调试源程序5. 撰写课程设计报告四、基本要求1.用C语言实现矩阵的运算.2.利用链表实现矩阵运算的存储.3.该程序具有加法、减法、乘法基本运算功能.4. 程序的各个功能模块要求用函数的形式实现.5. 完成设计任务并书写课程设计报告。
教研室主任签名:年月日课程设计(论文)目录一、作品及人员信息 (3)二、概述 (3)三、设计目的 (3)四、运行/开发环境 (3)五、流程图 (4)六、功能介绍 (5)七、算法分析 (5)八、测试过程中所用过的数据及说明 (9)九、使用价值及优点 (11)十、总结 (11)附录(一):参考文献 (11)附录(二):成绩评定表 (12)课程设计(论文)一、作品及人员信息1、开发项目的名称:矩阵乘法2、本项目的提出者:祈文青3、本项目的开发者:张祥、张宁、黄小强、龚江华二、概述数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。
通过课程设计,不仅可以加深学生对数据结构基本概念的了解,巩固学习成果,还能够提高实动手力。
为学生后继课程的学习打下良好的基础。
三、设计目的1. 使学生能够较全面地巩固和应用课堂中所学的的基本理论和程序设计方法,能够较熟练地完成程序的设计和调试。
实验报告--矩阵运算一.实验目的。
1.通过实践加强对程序设计语言课程知识点的理解和掌握,培养对课程知识综合运用能力、实际分析问题能力及编程能力,养成良好的编程习惯。
2.通过实践进一步领会程序设计的特点和应用,提高运用C++ 语言以及面向对象知识解决实际问题的能力。
3.通过实践掌握用C++ 语言编写面向对象的实用程序的设计方法,对面向对象方法和思想增加感性的认识;4.学会利用C++程序设计语言编写出一些短小、可靠的Windows实用程序,切实提高面向对象的程序设计能力。
为后续的相关课程的学习打下基础。
二.实验要求。
1.学会建立模板类;2.实现矩阵的“加”、“减”、“乘”、“数乘”、“转置” ;3.动态内存分配并用随机数填充;4.注意“加”、“减”、“乘” 要进行条件的判断;三.设计思路。
3.1算法基本流程1)获取用户输入的矩阵1的行数和列数,动态生成一个一维数组2)利用随机数生成数组成员,并利用两个循环输出数组,使其符合矩阵的格式3)矩阵2同矩阵1的处理方法4)通过两个矩阵的行数和列数比较来判断能否进行加减乘等运算,如不能,输出相关信息5)如能够进行计算,则利用数组进行相应运算,并按照正确格式输出6)通过改变一维数组中元素的顺序来实现转置并输出3.2算法流程图四.基本界面。
五.关键代码。
5.1关键类的声明class CMatrixclass{public:CMatrixclass(){int m_Row = 0; //行int m_Col = 0; //列m_pElements = NULL; //一维数组};virtual ~CMatrixclass(){delete [] m_pElements;}public:int m_Row;int m_Col;int * m_pElements;};5.2关键函数代码void CMyView::OnCHECKadd(){m_nums.SetCheck(0);m_combine.SetCheck(0);m_subtrict.SetCheck(0);}void CMyView::OnCHECKsubtrict(){m_add.SetCheck(0);m_combine.SetCheck(0);m_nums.SetCheck(0);}void CMyView::OnCHECKcombine(){m_add.SetCheck(0);m_nums.SetCheck(0);m_subtrict.SetCheck(0);}void CMyView::OnCHECKnums(){m_add.SetCheck(0);m_combine.SetCheck(0);m_subtrict.SetCheck(0);}void CMyView::OnBUTTONcompute(){UpdateData(TRUE);// TODO: Add your control notification handler code hereif(m_add.GetState()==1){if(op1->imax!=op2->imax||op1->jmax!=op2->jmax||op1==NULL||op2==NU LL){m_result="行数列数不等无法相加!";}else{matrix<int> c(op1->imax,op1->jmax);c=*op1+*op2;m_result="matrix1+matrix2";m_result+="\r\n";m_result+=c.my_show();}}else if(m_subtrict.GetState()==1){if(op1->imax!=op2->imax||op1->jmax!=op2->jmax||op1==NULL||op2==NU LL){m_result="行数列数不等无法相减!";}else{matrix<int> c(op1->imax,op1->jmax);c=*op1-*op2;m_result="matrix1-matrix2";m_result+="\r\n";m_result+=c.my_show();}}else if(m_combine.GetState()==1){if(op1->jmax!=op2->imax||op1==NULL||op2==NULL){m_result="以上无法相乘!";}else{matrix<int> c(op1->imax,op2->jmax);c=(*op1)*(*op2);m_result="matrix1*matrix2";m_result+="\r\n";m_result+=c.my_show();}}else if(m_nums.GetState()==1){if(op2==NULL){m_result="运算不出结果!";}else{matrix<int> c(op2->imax,op2->jmax); c=m_k*(*op2);m_result="k*matrix2";m_result+="\r\n";m_result+=c.my_show();}}else{m_result="请先选定一个算法!";}UpdateData(FALSE);}void CMyView::OnBUTTONrotate(){UpdateData(TRUE);if(m_r1.GetState()==1){if(op1==NULL){m_result="请先输入矩阵!";}else{matrix<int> c=rotate(*op1);m_result="matrix1转置";m_result+="\r\n";m_result+=c.my_show();}}else if(m_r2.GetState()==1){if(op2==NULL){m_result="请先输入矩阵!";}else{matrix<int> c=rotate(*op2);m_result="matrix2转置";m_result+="\r\n";m_result+=c.my_show();}}else{m_result="请选择一个矩阵!";}UpdateData(FALSE);}void CMyView::OnCHECKr1(){UpdateData(TRUE);m_r2.SetCheck(0);UpdateData(FALSE);}void CMyView::OnCHECKr2(){UpdateData(TRUE);m_r1.SetCheck(0);UpdateData(FALSE);}六.实验心得与编程收获。
C语言程序设计报告矩阵运算矩阵运算是计算机科学中重要的基础知识,它在多个领域中都有广泛的应用。
本报告将介绍C语言中的矩阵运算,包括矩阵的定义、基本运算、以及一些常见的算法。
一、矩阵的定义在C语言中,我们可以用二维数组来表示一个矩阵。
一个矩阵可以定义为一个m行n列的矩形数组,其中每个元素可以通过矩阵的行标和列标来访问。
例如,我们可以定义一个3行3列的矩阵如下:```int matrix[3][3] ={1,2,3},{4,5,6},{7,8,9}};```二、矩阵的基本运算1.矩阵的加法矩阵的加法是指两个相同行列数的矩阵对应元素相加的运算。
例如,对于两个3行3列的矩阵A和B,它们的加法可以表示为C=A+B,其中C 的每个元素等于A和B对应元素的和。
2.矩阵的减法矩阵的减法是指两个相同行列数的矩阵对应元素相减的运算。
例如,对于两个3行3列的矩阵A和B,它们的减法可以表示为C=A-B,其中C 的每个元素等于A和B对应元素的差。
3.矩阵的乘法矩阵的乘法是指矩阵与矩阵或者矩阵与向量之间的运算。
对于两个矩阵A和B,它们的乘法可以表示为C=A*B,其中C的每个元素等于A的对应行与B的对应列的乘积之和。
三、常见的矩阵运算算法除了基本的矩阵运算,还有一些常见的算法用于解决特定的问题。
下面介绍两个常见的算法。
1.矩阵的转置矩阵的转置是指将矩阵的行和列对调的操作。
例如,对于一个3行2列的矩阵A,它的转置矩阵可以表示为B=A^T,其中B的第i行第j列的元素等于A的第j行第i列的元素。
2.矩阵的行列式矩阵的行列式是一个标量值,可以表示为,A,其中A是一个n行n 列的矩阵。
行列式可以用于判断一个方阵是否可逆,以及求解线性方程组等问题。
四、实现一个矩阵运算的示例程序下面通过一个示例程序来演示如何实现一个矩阵的加法和乘法运算。
```c#include <stdio.h>#define ROW 3#define COL 3void matrix_add(int A[ROW][COL], int B[ROW][COL], intC[ROW][COL])for (int i = 0; i < ROW; i++)for (int j = 0; j < COL; j++)C[i][j]=A[i][j]+B[i][j];}}void matrix_multiply(int A[ROW][COL], int B[COL][ROW], int C[ROW][ROW])for (int i = 0; i < ROW; i++)for (int j = 0; j < ROW; j++)C[i][j]=0;for (int k = 0; k < COL; k++)C[i][j]+=A[i][k]*B[k][j];}}}void print_matrix(int matrix[ROW][COL]) for (int i = 0; i < ROW; i++)for (int j = 0; j < COL; j++)printf("%d ", matrix[i][j]);}printf("\n");}int maiint A[ROW][COL] ={1,2,3},{4,5,6},{7,8,9}};int B[ROW][COL] ={9,8,7},{6,5,4},{3,2,1}};int C[ROW][COL];matrix_add(A, B, C);printf("A + B:\n");print_matrix(C);int D[ROW][ROW];matrix_multiply(A, B, D);printf("A * B:\n");print_matrix(D);return 0;```以上示例代码定义了三个函数,分别实现了矩阵的加法、乘法以及打印矩阵的功能。
一、问题描述十字链表实现稀疏矩阵的加法1、功能要求:根据用户输入的矩阵,实现稀疏矩阵的求和运算,并输出结果。
2、输入要求:矩阵的数据在程序运行的时候由用户提供,先由用户输入稀疏矩阵的行数、列数和非零元个数。
再根据非零元个数,输入这些非零元,还需要用户为这些非零元输入行、列和非零元的值。
这样,一个稀疏矩阵就输入完成。
若输入4 3 2则表示这个稀疏矩阵有4行3列2个非零元然后用户需要为这两个非零元输入行、列、非零元的值如:1 2 24 1 1表示第一个非零元行为1,列为2,,值为2;第二个非零元行为4,列为1,值为1。
此过程输入的稀疏矩阵为:0 2 00 0 00 0 01 0 03、输出要求:输出按矩阵输出,按行列依次输出,非零元则输出非零元的值,不是非零元则输出“0”。
各元素之间用空格隔开。
最后输出完整的矩阵。
二、概要设计1.稀疏矩阵的抽象数据类型定义如下:ADT SparseMatrix {数据对象: D={a ij|i=1,2,3……m,j=1,2,3……n;a ij属于ElemSet,m和n分别是稀疏矩阵的行数和列数}数据关系: R={ Row, Col }Row={<a ij,a ij+1>|1<=i<=m,1<=j<=n-1}Col={<a ij,a i+1j>|1<=i<=m-1,1<=j<=n}基本操作:CreateSMatrix(&M);//建立稀疏矩阵MDestroySMatrix(&M);//销毁稀疏矩阵M;TransposeSMatrix(M);//求稀疏矩阵的转置矩阵AddSMatrix(&M,&N);//求稀疏矩阵M和N之和MulSMatrix(&M,&N);//求稀疏矩阵M和N之积}ADT SparseMatrix2、存储结构选择采用十字链表存储稀疏矩阵,它是稀疏矩阵链式表示的一种较好的表示方法。
- - 数据结构课程设计报告题目:专业:班级:学号:姓名:指导教师:时间:一、课程设计题目及所涉及知识点设计题目是“矩阵的运算〞;所涉及的知识点主要是: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列的和。
特殊矩阵运算1.1程序功能简介对特殊矩阵能够在界面上以人们熟悉的方式显示,可以对特殊矩阵进行加法运算和减法运算,矩阵转置。
按照要求使用了多种数据结构来求解问题,具体为二维数组和类似图的数据结构。
由于题目要求使用多种数据结构,因此分开写了两段程序,均实现了上述要求的功能,以下将分开说明。
先说明的是用二维数组实现的程序,后说明的是用图结构实现的程序。
1.2关于输入、输出形式及数据范围1.2.1使用二维数组实现的程序输入、输出范围为:-73786976294838206000到73786976294838206000,足以解决绝大多数的矩阵运算问题。
1.2.2输入的格式进入程序后首先展现的是功能选择界面,如下图:此时可通过输入对应功能的数字来选择功能。
在此程序中不同功能输入格式不同:选择功能 1.矩阵转置时需要输入要进行转置操作的矩阵,首先输入矩阵的行数和列数,以逗号隔开,之后依次按矩阵形式输入矩阵即可,各数值之间以空格隔开。
选择功能2.矩阵数乘时需要输入要进行数乘操作的矩阵,此输入格式同上,之后输入一个实数,即要进行数乘的数即可。
功能3.矩阵加法与4.矩阵减法输入格式和5.矩阵乘法相同,按上述操作输入两个矩阵即可,需要注意的是矩阵减法默认顺序为先输入的矩阵减去后输入的矩阵。
当按照格式输入时可以实现以上功能,但输入错误数据时,例如进行行列数不同的矩阵相加减时则会返回无法操作,请重新输入的提示。
具体情况见下文测试部分。
1.3.1使用图结构实现的稀疏矩阵运算器程序输入、输出范围同上。
1.3.2输入的格式进入程序后首先展现的是功能选择界面,如下图:选择功能部分输入同上。
在进行矩阵输入时采取三元组的形式,这是由于稀疏矩阵的多零元性质。
首先输入矩阵的行数、列数、非零元个数,以空格隔开,输入完毕后确认,开始输入各个非零元。
输入非零元时按“所在行下标所在列下标值”的形式输入,需要注意的是输入时只能从所在行小的开始按顺序输入,不能先输入行数大的数据再输入行数小的数据。
矩阵运算的课程设计一、课程目标知识目标:1. 理解矩阵的定义,掌握矩阵的基本元素和结构特点;2. 学会矩阵的加、减、乘运算,并能够运用这些运算解决实际问题;3. 掌握矩阵的转置、逆矩阵的概念及其运算方法;4. 了解矩阵运算在现实生活中的应用,如线性方程组求解、图像处理等。
技能目标:1. 能够熟练运用矩阵运算公式进行计算,提高解题速度和准确性;2. 能够运用矩阵运算解决实际问题,培养分析问题和解决问题的能力;3. 能够运用矩阵软件(如MATLAB)进行矩阵运算,提高计算效率。
情感态度价值观目标:1. 培养学生对矩阵运算的兴趣,激发学习热情;2. 培养学生的团队协作精神,学会与他人共同探讨问题;3. 引导学生认识到矩阵运算在科学技术发展中的重要性,增强学生的国家使命感和社会责任感。
课程性质:本课程为高中数学选修课程,适用于对数学有一定基础的学生。
学生特点:学生具备一定的代数基础,对矩阵概念有一定了解,但对矩阵运算尚不熟悉。
教学要求:结合学生特点,注重启发式教学,通过实例分析、问题解决等方法,使学生掌握矩阵运算的基本技能,并培养其运用矩阵运算解决实际问题的能力。
在教学过程中,关注学生的情感态度价值观的培养,提高学生的学习兴趣和积极性。
最终实现课程目标的分解与达成。
二、教学内容1. 矩阵的定义与基本概念:回顾矩阵的定义,讨论矩阵的行、列、元素等基本属性。
教材章节:第二章第一节2. 矩阵的加、减运算:讲解矩阵加、减法的规则,通过例题演示运算方法。
教材章节:第二章第二节3. 矩阵的乘法运算:介绍矩阵乘法法则,分析矩阵乘法与实数乘法的异同。
教材章节:第二章第三节4. 矩阵的转置与逆矩阵:阐述转置矩阵的概念,探讨逆矩阵的定义及性质。
教材章节:第二章第四节5. 矩阵的应用:介绍矩阵在解决线性方程组、图像处理等方面的应用。
教材章节:第二章第五节6. 矩阵运算软件实践:指导学生使用MATLAB软件进行矩阵运算,提高计算效率。
合肥学院计算机科学与技术系课程设计报告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列的和。
这样就实现了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++)。