实验报告

合集下载

科学实验报告【14篇】

科学实验报告【14篇】

科学实验报告【14篇】科学实验报告(精选14篇)科学实验报告篇1实验一:实验名称:二氧化碳能使澄清的石灰水变浑浊实验材料:制取一瓶二氧化碳备用,制取一瓶澄清的石灰水备用、烧杯一个实验过程:1)、将澄清的石灰水倒入烧杯中,观看澄清的石灰水是什么样子的,2)、倒入装有二氧化碳的瓶子,摇晃后观看现象。

实验结论:二氧化碳能使澄清的石灰水变浑浊实验二:实验名称:研究固体的热胀冷缩实验材料:固体体胀演示器、酒精灯、火柴、水槽、冷水实验过程:(1)铜球穿过铁圈(2)、给铜球加热,不能穿过铁圈(3)把铜球放入冷水中,铜球又穿过铁圈实验结论;固体有热胀冷缩的性质实验三:实验名称:研究液体的热胀冷缩实验材料:细管、胶塞、平底烧瓶、红颜色的水、水槽、热水实验过程:(1)细管插在胶塞中间,用胶塞塞住瓶口(2)、往瓶里加红颜色的水(3)把瓶子放入水槽中,记下细管里水的位置。

(4)往水槽里加热水,观看细管里水面的位置有什么变化。

实验结论;液体有热胀冷缩的性质实验四:实验名称:研究气体的热胀冷缩实验材料:气球、水槽2个、平底烧瓶、热水、冷水实验过程:(1)把气球套在平底烧瓶口(2)、把烧瓶放在热水中,欢察现象。

(3)把烧瓶放在冷水中,欢察现象。

实验结论:气体有热胀冷缩的性质实验五:实验名称:空气的成分实验材料:水槽、蜡烛、玻璃片、去掉底的饮料瓶、火柴实验过程:(1)把蜡烛放在水槽中点燃,罩上饮料瓶,拧紧瓶塞。

观看现象。

(2)、把水槽内的水加到饮料瓶里的高度。

(3)拧开瓶盖,迅速将火柴插入瓶内,观看现象实验结论:空气中至少有两种气体,一种气体支持燃烧,另一种气体不支持燃烧。

科学实验报告篇2实验目的1.掌握可逆电池电动势的测量原理和电位差计的操作技术2.学会几种电极和盐桥的制备方法3.学会测定原电池电动势并计算相关的电极电势实验原理但凡能使化学能转变为电能的装置都称之为电池(或原电池)。

可逆电池应满足如下条件:(1)电池反响可逆,亦即电池电极反响可逆;(2)电池中不同意存在任何不可逆的液接界;(3)电池必须在可逆的情况下工作,即充放电过程必须在平衡态下进行,即测量时通过电池的电流应为无限小。

学生实验报告(通用9篇)

学生实验报告(通用9篇)

学生实验报告(通用9篇)学生实验报告第1篇思考:把一根筷子插入装着米的杯子中,然后将筷子上提,筷子会把米和杯子提起吗?材料:塑料杯一个、米一杯、竹筷子一根操作:1、将米倒满塑料杯。

2、用手将杯子里的米按一按。

3、用手按住米,从手指缝间插入筷子。

4、用手轻轻提起筷子,杯子和米一起被提起来了。

讲解:由于杯内米粒之间的挤压,使杯内的空气被挤出来,杯子外面的压力大于杯内的压力,使筷子和米粒之间紧紧地结合在一起,所以筷子就能将成米的杯子提起来。

学生实验报告第2篇一、实验目的通过本实验,使学生能够掌握各种会计核算方法,真正领会各种方法在反映经济业务至报出会计信息这一过程中的内在联系,实现由感性认识到理性认识的升华,并在此过程中,培养学生独立完成科目设置、登记账簿、编制会计报表(简表)的能力,使之达到会计从业人员的水平,为会计从业资格做准备。

二、实验内容和步骤第一部分会计凭证的认识和填制方法教学目的与要求:会计基础知识中的“七大”核算方法,期中重要的方法之一是填制和审核会计凭证。

本部分内容是要求学生认识实物,在实验己身临其境的模拟环境对会计凭证的种类、格式及填制方法有直观的感性认识,并能够掌握具体操作,为后几部分的实验内容奠定基础。

原始凭证的认识和填制记账凭证的认识和填制第二部分会计账簿的认识和登记方法教学目的与要求:“登记会计账簿”也是会计基础的重要方法之一,本部分内容的实验要求学生了解各种会计账簿的格式和种类,并能够理解其用途,熟练掌握几种主要账簿的登记方法,并了解“账簿”与“凭证”的关系。

日记账的认识和登记总分类账的认识和登记明细分类账的认识和登记第三部分会计业务的处理教学目的与要求:本部分实验是在运用会计凭证和账簿进行业务处理后,要求学生对以下内容进行会计实务的处理。

要求学生能够理解“凭证”、“账簿”与“业务处理”的关系,并熟练的按程序进行会计业务的处理。

资金筹集业务采购业务生产销售业务损益计算业务第四部分会计报表的编制教学目的与要求:本部分实验内容只对“三大”会计报表中的资产负债表和利润表得编制进行实务模拟,要求学生理解“凭证”、“账簿”、“业务处理”、“报表”之间的关系,熟练掌握资产负债表和利润表的编制程序与方法。

实验报告总结15篇

实验报告总结15篇

实验报告总结实验报告总结15篇总结是对某一特定时间段内的学习和工作生活等表现情况加以回顾和分析的一种书面材料,它在我们的学习、工作中起到呈上启下的作用,快快来写一份总结吧。

总结怎么写才不会千篇一律呢?下面是小编为大家整理的实验报告总结,欢迎阅读,希望大家能够喜欢。

实验报告总结1实训一数控车床认识及基本操作实训一. 实训目的:了解数控车床掌握基本操作二. 实训内容:用数控车床车一零件三. 实训设备:数控车床四. 实训思考题1.简述数控车床的安全操作规程.答:1、学生必须在教师指导下进行数控机床操作。

2、禁止多人同时操作,强调机床单人操作。

3、学生必须在操作步骤完全清楚时进行操作,遇到问题立即向教师询问,禁止在不知道规程的情况下进行尝试性操作。

4、操作中如机床出现异常,必须立即向指导教师报告。

5、手动原点回归时,注意机床各轴位置要距离原点-100mm以上。

6、手工操作前,应先按下手动按钮后再进行操作。

7、学生编完程序或将程序输入机床后,要通过指导教师检查无误后方可进行试运行。

8、学生进行机床试运行及自动加工时必须在指导教师监督下进行。

9、程序运行注意事项:(1)刀具要距离工件200mm以上。

(2)光标要放在主程序头。

(3)检查机床各功能按键的位置是否正确(4)启动程序时一定要一只手按开始按钮,另一只手按停止按钮,程序在运行当中手不能离开停止按钮,如有紧急情况立即按下停止按钮。

10、机床在运行当中要将防护门关闭以免铁屑、润滑油飞出伤人。

11、在程序中有暂停测量工件尺寸时,要待机床完全停止、主轴停转后方可进行测量。

此时千万注意不要触及开始按钮,以免发生人身事故。

12、关机时,要等主轴停转3分钟后方可关机。

2.机床回零的主要作用是什么?答:正确地在机床工作时建立机床坐标系3.机床的开启、运行、停止有那些注意事项?答:首先安全第一,关机前要先按急停按钮再切断系统电源开关、最后切断电源开关,开机时顺序相反,开机后刀架要进行回零,主轴要低速热运转几分钟才能进行正常加工,如果停机时间过长要多运转一会,而且刀架也要空运行几下再加工。

实验报告范文通用13篇

实验报告范文通用13篇

实验报告范文通用1实验名称:测量电源稳定性实验目的:通过对电源的稳定性测试,了解电源的性能指标,为后续电路设计提供依据。

实验器材:电源测试仪,数字万用表实验步骤:1.连接测试电路:将电源测试仪的输出端连接到需要测试的电路上。

2.打开电源:开启电源,调整电源测试仪的参数。

3.测量电源指标:分别测量电源的输出电压、输出电流和波动率。

4.记录实验数据:记录每次测量的数据,计算平均值和标准差。

实验结果:1.输出电压:10V2.输出电流:1A3.波动率:0.2%结论:通过本次实验可以得出,该电源的输出电压稳定且波动率较低,可以满足需求。

实验名称:LED亮度测试实验目的:测试不同电源电压下LED的亮度情况,为后续电路设计提供参考。

实验器材:电源测试仪,LED灯,数字万用表实验步骤:1.连接测试电路:将LED灯连接到电路中,连接电源测试仪进行测试。

2.设置电源电压:调整电源测试仪的输出电压,依次测试不同电压下LED的亮度情况。

3.记录实验数据:记录每次测量的数据,计算平均值和标准差。

实验结果:在不同电压下,LED的亮度如下表所示:电压(V)亮度(lm)5 507 809 10011 12013 130结论:通过本次实验可以得出,随着电压的升高,LED的亮度也呈现上升趋势,但在一定电压范围内,增加的亮度逐渐减少。

实验名称:运放放大器增益测试实验目的:测试不同负载情况下运放放大器的增益大小,为后续电路设计提供依据。

实验器材:运放放大器,数字万用表实验步骤:1.连接测试电路:将运放放大器连接到电路中,设置不同的负载电阻。

2.调整电平:调整电源输出电压,使运放放大器的输入电平符合要求。

3.测量增益:通过测量输出电压和输入电压大小,计算出运放放大器的增益大小。

4.记录实验数据:记录每次测量的数据,计算平均值和标准差。

实验结果:在不同负载电阻下,运放放大器的增益如下表所示:负载电阻(Ω)增益10 2050 40100 60200 80500 100结论:通过本次实验可以得出,在一定范围内,随着负载电阻的增加,运放放大器的增益也呈现上升趋势。

实验报告参考6篇

实验报告参考6篇

实验报告参考6篇实验报告参考1为期二周的钳工实训结束了,在实训期间虽然很累,但我们很快乐,因为我们在学到了很多很有用的东西的同时还锻炼了自己的动手能力。

虽然实训期只有短短的两周,在我们三年的大学生活中它只是小小的一部分,却是非常重要的一部分,对我们来说,它是很难忘记的,毕竟是一次真正的体验社会、体验生活。

要进行钳工实训,安全问题肯定是摆在第一位的。

通过师傅的讲解,我们了解了实训中同学们易犯的危险的操作动作。

比如在车间里打闹嬉戏,不经师傅的许可便私自操作机床,以及操作时方法、姿势不正确,等等。

一个无意的动作或是一个小小的疏忽,都可能导致机械事故甚至人身安全事故。

通过这次钳工实训,我了解了金属加工的基本知识、基本操作方法。

主要学习了以下几方面的知识:金属加工基本工种包括钳工、车工、铸焊工等的操作。

第一项:辛苦的钳工在钳工实训中,我们知道了钳工的主要内容为刮研、钻孔、攻套丝、锯割、锉削、装配、划线;了解了锉刀的构造、分类、选用、锉削姿势、锉削方法和质量的检测。

首先要正确的握锉刀,锉削平面时保持锉刀的平直运动是锉削的关键,锉削力有水平推力和垂直压力两种。

锉刀推进时,前手压力逐渐减小后手压力大则后小,锉刀推到中间位置时,两手压力相同,继续推进锉刀时,前手压力逐渐减小后压力加大。

锉刀返回时不施加压力。

这样我们锉削也就比较简单了。

同时我也知道了钳工的安全技术为:1,钳台要放在便于工作和光线适宜的地方;钻床和砂轮一般应放在场地的边缘,以保证安全。

2,使用机床、工具(如钻床、砂轮、手电钻等),要经常检查,发现损坏不得使用,需要修好再用。

3,台虎钳夹持工具时,不得用锤子锤击台虎手柄或钢管施加夹紧力。

接着便是刮削、研磨、钻孔、扩孔、攻螺纹等。

虽然不是很标准,但却是我们汗水的结晶,是我们两天来奋斗的结果钳工的实训说实话是很枯燥的,可能干一个上午却都是在反反复复着一个动作,还要有力气,还要做到位,那就是手握锉刀在工件上来来回回的锉,锉到中午时,整个人的手都酸疼酸疼的,腿也站的有一些僵直了,然而每每累时,却能看见老师在一旁指导,并且亲自示范,他也是满头的汗水,气喘呼呼的,看到这每每给我以动力。

实验报告总结8篇

实验报告总结8篇

《实验报告总结》实验报告总结(一):一个长学期的电路原理,让我学到了很多东西,从最开始的什么都不懂,到此刻的略懂一二。

在学习知识上面,开始的时候完全是老师讲什么就做什么,感觉速度还是比较快的,跟理论也没什么差距。

但是之后就觉得越来越麻烦了。

从最开始的误差分析,实验报告写了很多,但是真正掌握的确不多,到最后的回转器,负阻,感觉都是理论没有很好的跟上实践,很多状况下是在实验出现象以后在去想理论。

在实验这门课中给我最大的感受就是,必须要先弄清楚原理,在做实验,这样又快又好。

在养成习惯方面,最开始的时候我做实验都是没有什么条理,想到哪里就做到哪里。

比如说测量三相电,有很多种状况,有中线,无中线,三角形接线法还是Y形接线法,在这个实验中,如果选取恰当的顺序就能够减少很多接线,做实验就应要有良好的习惯,就应在做实验之前想好这个实验要求什么,有几个步骤,就应怎样安排才最合理,其实这也映射到做事情,不管做什么事情,就应都要想想目的和过程,这样才能高效的完成。

电原实验开始的几周上课时间不是很固定,实验报告也累计了很多,第一次感觉有那么多实验报告要写,在交实验报告的前一天很多同学都通宵了的,这说明我们都没有合理的安排好自己的时间,我就应从这件事情中吸取教训,合理安排自己的时间,完成就应完成的学习任务。

这学期做的一些实验都需要严谨的态度。

在负阻的实验中,我和同组的同学连了两三次才把负阻链接好,又浪费时间,又没有效果,在这个实验中,有很多线,很容易插错,所以要个性仔细。

在最后的综合实验中,我更是受益匪浅。

完整的做出了一个红外测量角度的仪器,虽然不是个性准确。

我和我组员分工合作,各自完成自己的模块。

我负责的是单片机,和数码显示电路。

这两块都是比较简单的,但是数码显示个性需要细致,由于我自己是一个粗心的人,所以数码管我检查了很多遍,做了很多无用功。

总结:电路原理实验最后给我留下的是:严谨的学习态度。

做什么事情都要认真,争取一次性做好,人生没有太多时间去浪费。

实验实训报告7篇

实验实训报告7篇

实验实训报告7篇实验实训报告精选1一、实验目的:(1)了解萃取分液的基本原理。

(2)熟练掌握分液漏斗的选择及各项操作。

二、实验原理:利用某溶质在互不相溶的溶剂中的溶解度不同,用一种溶剂把溶质从它与另一种溶剂组成的溶液中提取出来,在利用分液的原理和方法将它们分离开来。

三、实验仪器和药品:药品:碘水、CCl4器材:分液漏斗、100ml烧杯、带铁圈的铁架台、20ml四、实验步骤:1、分液漏斗的选择和检验:验分液漏斗是否漏水,检查完毕将分液漏斗置于铁架台上;2、振荡萃取:用量筒量取10 ml碘水,倒入分液漏斗,再量取5 ml萃取剂CCl4加入分液漏斗,盖好玻璃塞,振荡、放气;需要重复几次振荡放气。

3、静置分层:将振荡后的分液漏斗放于铁架台上,漏斗下端管口紧靠烧怀内壁;4、分液:调整瓶塞凹槽对着瓶颈小孔,使漏斗内外空气相通,轻轻旋动活塞,按“上走上,下走下”的原则分离液体;五、实验室制备图:六、实验总结(注意事项):1、分液漏斗一般选择梨形漏斗,需要查漏。

方法为:关闭活塞,在漏斗中加少量水,盖好盖子,用右手压住分液漏斗口部,左手握住活塞部分,把分液漏斗倒转过来用力振荡,看是否漏水。

2、将溶液注入分液漏斗中,溶液总量不超过其容积的3/4;3、振荡操作要领:右手顶住玻璃塞,左手握住活塞,倒置振荡;振荡过程中要放气2—3次,让分液漏斗仍保持倾斜状态,旋开旋塞,放出蒸气或产生的气体,使内外压力平衡;4、要及时记录萃取前后的液面情况及颜色变化;振荡前,上层为黄色,下层为无色;振荡静置后,上层为无色(或淡黄色),下层为紫色;5、萃取剂的选择a、溶质在萃取剂的溶解度要比在原溶剂(水)大。

b、萃取剂与原溶剂(水)不互溶。

c、萃取剂与溶液不发生发应。

6、按“上走上,下走下”的原则分离液体是为了防止上层液体混带有下层液体。

七、问题:1、如果将萃取剂换成苯,实验现象是否相同?使用哪种有机溶剂做萃取剂更好些?为什么?实验实训报告精选2一、实验准备实验仪器、药品、材料:棉线,丝线200ML烧杯两个,硬纸片一张、滤纸若干、酒精灯一个、石棉网、带铁圈的铁架台、温度计、硫酸铜粉末若干、玻璃棒。

实验报告范文(精选10篇)

实验报告范文(精选10篇)

实验报告范⽂(精选10篇)实验报告范⽂(精选10篇) 随着⼈们⾃⾝素质提升,报告有着举⾜轻重的地位,报告成为了⼀种新兴产业。

那么⼤家知道标准正式的报告格式吗?以下是⼩编收集整理的实验报告范⽂,欢迎阅读与收藏。

实验报告篇1 ⼀、噪声的来源 噪声的种类很多,因其产⽣的条件不同⽽异。

地球上的噪声主要来源于⾃然界的噪声和⼈为活动产⽣的噪声。

⾃然界形成的这些噪声是不以⼈们的意志为转移,因此,⼈们是⽆法克服的。

我们所研究的噪声主要是指⼈为活动所产⽣的噪声,它的来源分为以下⼏种情况。

⑴交通噪声 在我国,道路交通噪声在城市中占的⽐重通常为40%以上,有的甚⾄在75%以上,随着城市车辆的拥有量不断增加,道路交通噪声的危害也将不断加剧。

系由各种交通运输⼯具产⽣的振动声、喇叭声、汽笛声、刹车声、排⽓声、防盗报警鸣笛声、穿越⽽过的铁路(包括地上、地下)和飞机起落时的噪声等。

⑵⼯业噪声 系由⼯业⽣产活动中的机械设备和动⼒装置产⽣的噪声。

⼯业噪声在我国城市环境噪声中所占的⽐重约为20%左右,在我国城市中,居民与⼚矿的混杂情况甚多,⼚矿噪声的强度⼤,作⽤时间长,使得居民对⼚矿声的反应特别强烈。

⑶建筑施⼯噪声 建筑⼯地地打桩声能传到数公⾥以外,且⼯期⼤都在⼀年以上,因⽽对周围居民地⼲扰是很⼤的。

⑷社会⽣活噪声 泛指⼈们因⽣活(商业⽂化、娱乐等)活动所产⽣的噪声。

⼆、噪声的危害 噪声污染已成为城市四⼤公害之⼀,其危害主要表现在⼀下及格⽅⾯: ⑴⼲扰和损害听⼒。

噪声污染可引起⽿鸣⽿痛、听⼒损伤等听⼒损害。

另外,噪声会⼲扰听⼒,掩⿐需要的声⾳,使⼈不易察觉⼀些危险的信号,从⽽容易造成重⼤事故。

⑵引起⼼⾎管系统、内分泌系统、消化系统、呼吸系统等⽅⾯的疾病。

⑶对⼼理、睡眠、神经系统、⼯作和⽣活产⽣影响。

噪声会使⼈⼼烦意乱、负⾯情绪增加;使感知判断能⼒、智⼒思维、瞬时记忆、视听反应速度和验收调能⼒下降。

⼈长时间在噪声刺激下就会患“神经衰弱症”。

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

实验报告实验题目:二叉树实验目的:1、熟悉二叉树的结点类型和二叉树的基本操作。

2、掌握二叉树的前序、中序和后序遍历的算法。

3、加深对二叉树的理解,逐步培养解决实际问题的编程能力。

基本要求:1.编写程序bitree.cpp实现ADTBiTree,要求使用二叉链表存储。

实现基本操作:InitBiTree(&T);DestroyBiTree(&T);PreOrder(T,visit());InOrder(T,visit());PostOrder(T,visit());2.编码实现以下算法:1)创建二叉树。

(以先序扩展序列给出)2)输出先序、中序和后序序列。

3)计算二叉树结点数、叶子结点数、高度。

测试数据:先序扩展序列:ABDF##G##E#H##C##输出:先序ABDFGEHC中序FDGBEHAC后序FGDHEBCA结点数:8叶子结点数:4高度:4。

实验拓展1)实现层次遍历。

2)查找:查值为X的结点、双亲结点、孩子结点、兄弟结点3)判断:判断一个二叉树是否为二叉排序树、完全二叉树、平衡和二叉树4)处理:左右子树互换、复制、删除子树、插入子树设计思路:1.在二叉树的存储结构为链式存储结构。

2.在具体实现的时候建立不同函数,在主程序中用循环菜单的形式调用函数提高了效率。

概要分析:二叉链表结构定义:typedef struct BiNode{ElemType data;struct BiNode *lchild,*rchild;}BiNode,*BiTree;CreatBiTree(BiTree &T);先序建立二叉树。

DestroyBiTree(BiTree &T);销毁二叉树;PreOrder(BiTree &T);先序遍历二叉树InOrder(BiTree &T);中序遍历二叉树PostOrder (BiTree &T);后序遍历二叉树PrintbyLev(BiTree &T);按层次遍历二叉树,利用队列的思想,从根结点开始将其放入一个数组中,用i记录子节点尚未放入数组的位置,再将i所指向节点的左右节点放入队列中,然后i+1,对下一个节点这样操作,直至最后一个节点是叶子节点。

IsLeaf(BiTree &T);判断是否为叶子节点(是否有左右子树)。

FullBiTree(BiTree &T);判断是否为完全二叉树,采用广度优先遍历,从根节点开始,入队列,如果队列不为空,循环。

遇到第一个没有左儿子或者右儿子的节点,设置标志位,如果之后再遇到有左/右儿子的节点,那么这不是一颗完全二叉树。

CountBiTree(BiTree &T);节点计数,用递归思想,对左右子树计数,再加起来。

LevelNum(BiTree& T,int t,int d);计算层数,利用递归思想,对左右子树计算层数并取较大值。

LeafNum(BiTree& T,int t,int d,int ln);叶子节点计数,利用递归思想,计算左右子树叶子再计算和。

Balance(BiTree &T,int i);判断是否为平衡二叉树,递归判断左右是否为平衡二叉树(有层数记录)。

Sort(BiTree &T,int i);判断是否为二叉排序树,判断此节点是否满足排序树定义,在判断其左右子树是否满足。

PrintChild(BiTree &T);打印左右子树。

FindNode(ElemType x,BiTree &T);查找算法,如果是根节点提示是根节点并返回指向根节点的指针,若果不是则调用Findx函数。

FindX(ElemType x,BiTree &temp,BiTree &T);查找算法,返回指向对应子树的根节点的指针。

CopyBiT(BiTree &T,BiTree &C);复制子树。

运行截图:主界面建立二叉树输出三序遍历及二叉树信息按层输出查找二叉树分析二叉树左右子树互换:对A 然后按层次输出删除以B为根节点的子树:(层次遍历)复制节点C增加节点B于A的左节点(层次遍历)结果与讨论:程序完成情况较好,由于实验内容比较多,所以写了很多函数,但有些函数之间是有调用关系,减轻了工作量。

同时利用循环菜单也让程序看起来更为简洁,调用子程序也更为方便。

程序代码:#include <iostream>#include <stdio.h>#include <stdlib.h>#include <math.h>using namespace std;typedef int Status;typedef char ElemType; typedef struct BiNode{ElemType data;struct BiNode *lchild,*rchild; }BiNode,*BiTree;#define OK 1#define ERROR 0//先序遍历建立二叉树Status CreatBiTree(BiTree &T){ ElemType c;cin >> c;if(c=='.'){T=NULL;}else{T=(BiNode*)malloc(sizeof(BiNode));T->data=c;CreatBiTree(T->lchild);CreatBiTree(T->rchild);}return 1;}Status DestroyBiTree(BiTree &T){if(!T) return 1;else{DestroyBiTree(T->lchild);DestroyBiTree(T->rchild);free(T);T=NULL;return 1;}}Status PreOrder(BiTree &T){if(T){printf("%c",T->data);if(PreOrder(T->lchild))if(PreOrder(T->rchild)) return 1;return 0;}else return 1;}Status InOrder(BiTree &T){if(T){InOrder(T->lchild);printf("%c",T->data);InOrder(T->rchild);return 1;}else return 1;}Status PostOrder(BiTree &T){if(T){PostOrder(T->lchild);PostOrder(T->rchild);printf("%c",T->data);return 1;}//按层输出Status PrintbyLev(BiTree &T){int i=0;BiTree node[100];int nn=1;for(i=0;i<100;i++) node[i]=NULL;node[0]=T;i=0;while(node[i]){if(node[i]->lchild){node[nn]=node[i]->lchild;nn++;}if(node[i]->rchild){node[nn]=node[i]->rchild;nn++;}i++;//CreatQueue(T);for(i=0;node[i];i++){printf("%c",node[i]->data);}printf("\n");return 1;}int IsLeaf(BiTree &T){if(T->lchild==NULL&&T->rchild==NULL) return 1;//叶子节点else if(!T->lchild&&T->rchild) return 2;//有右无左else if(!T->rchild&&T->lchild) return 3;//有左无右else return 0; //有左有右}Status FullBiTree(BiTree &T){int i=0,j=0;BiTree node[100];int nn=1;for(i=0;i<100;i++) node[i]=NULL; node[0]=T;i=0;while(node[i]){if(node[i]->lchild){node[nn]=node[i]->lchild;nn++;}if(node[i]->rchild){node[nn]=node[i]->rchild;nn++;}i++;}i=0;while(node[i]){if(IsLeaf(node[i])==2) return 0;i++;}while(IsLeaf(node[j])==0){j++;printf("*");}//j++;指针停在非左右子树都存在的节点的下一位if(IsLeaf(node[j])==3||IsLeaf(node[j])==1) j++;while(node[j]!=NULL){if(IsLeaf(node[j])!=1) return 0;j++;printf("*");}return 1;}//计数int CountBiTree(BiTree &T){int m,n;if(T){m=CountBiTree(T->lchild);n=CountBiTree(T->rchild );return m+n+1;else return 0;}//层数int LevelNum(BiTree& T,int t,int d){ if(t>d) d=t;if(!T) return 0;if (T->lchild) {d=LevelNum(T->lchild,t+1,d);}if (T->rchild) {d=LevelNum(T->rchild,t+1,d);}return d;}//叶子节点计数int LeafNum(BiTree& T,int t,int d,int ln){ if(t==d) ln++;if(!T) return 0;if (T->lchild) {ln=LevelNum(T->lchild,t+1,ln);if (T->rchild) {ln=LevelNum(T->rchild,t+1,ln);}return ln;}//判断平衡int Balance(BiTree &T,int i){if (i==0) return i;if (!T) return i;if (abs(CountBiTree(T->lchild)-CountBiTree(T->rchild))>1){ i=0;return 0;}else {Balance(T->lchild,i);Balance(T->rchild,i);}return i;}//判断二叉排序树int Sort(BiTree &T,int i){if (i==0) return 0;if(!T) return i;if(T->lchild){if (T->data<T->lchild->data) return 0;i=Sort(T->lchild,i);}else if (T->rchild){if (T->data<T->rchild->data) return 0;i=Sort(T->rchild,i);}return i;}void judge(BiTree &T){if(FullBiTree(T))printf("是完全二叉树\n");if(Balance(T,1))printf("是平衡二叉树\n");if(Sort(T,1))printf("是二叉排序树\n");}//打印子树void PrintChild(BiTree &T){if(!T->lchild) printf("此节点无左子树\n");else printf("左子树为:%c\n",T->lchild->data);if(!T->rchild) printf("此节点无右子树\n");else printf("右子树为:%c\n",T->rchild->data); }BiTree FindX(ElemType x,BiTree &temp,BiTree &T){ if (temp!=NULL||T==NULL) return temp;if (T->lchild){if (T->lchild->data==x)return T;else {temp=FindX(x,temp,T->lchild);temp=FindX(x,temp,T->rchild);if(temp) return temp;}}if (T->rchild){//printf("**");if (T->rchild->data==x)return T;else {temp=FindX(x,temp,T->rchild);temp=FindX(x,temp,T->lchild);if(temp) return temp;}}return temp;}//找X节点BiTree FindNode(ElemType x,BiTree &T){if(T->data==x){printf("所找节点为根节点\n");PrintChild(T);return T;}BiTree Q=NULL;Q=FindX(x,Q,T);if(Q){printf("其双亲节点为:%c\n",Q->data);if(Q->lchild&&Q->lchild->data==x) {if (!Q->rchild) printf("其无兄弟节点\n");else printf("兄弟节点为%c\n",Q->rchild->data);PrintChild(Q->lchild);//return Q->lchild;}else{if (!Q->lchild) printf("其无兄弟节点\n");else printf("兄弟节点为%c\n",Q->lchild->data);PrintChild(Q->rchild);//return Q->rchild;}}return Q;}//三序输出void printBiTree(BiTree &T){int d,Ln,n;PreOrder(T);printf("\n");InOrder(T);printf("\n");PostOrder(T);printf("\n");n=CountBiTree(T);printf("节点数为:%d\n",n);d=LevelNum(T,1,1);printf("深度为:%d\n",d);Ln=LeafNum(T,1,d,0);printf("叶子节点个数为:%d\n",Ln); }Status CopyBiT(BiTree &T,BiTree &C){if(!T) C=NULL;else{C=(BiNode*)malloc(sizeof(BiNode));C->data=T->data;//C->lchild=T->lchild;//C->rchild=T->rchild;CopyBiT(T->lchild,C->lchild);CopyBiT(T->rchild,C->rchild);}return 1;}int main(){BiTree T,x,temp,temp1;int d,Ln,n,j=1;ElemType c;while(j){printf("1.建立二叉树\n");printf("2.前中后序输出二叉树\n");printf("3.按层输出二叉树\n");printf("4.查找二叉树\n");printf("5.分析二叉树\n");printf("6.左右子树互换\n");printf("7.删除子树\n");printf("8.复制子树\n");printf("9.增加子树\n");scanf("%d",&j);switch(j){case 1: CreatBiTree(T);break;case 2: printBiTree(T);break;case 3: PrintbyLev(T); break;case 4:printf("请输入要查询节点:\n");getchar();scanf("%c",&c);x=FindNode(c,T);break;case 5:judge(T);break;case 6:printf("输入根节点:\n");getchar();scanf("%c",&c);if(c==T->data){x=T;temp=x->lchild;x->lchild=x->rchild;x->rchild=temp;PrintChild(T);break;}x=FindNode(c,T);if(x->lchild&&x->lchild->data==c){ x=x->lchild;//x->lchild=NULL;}else if(x->rchild&&x->rchild->data==c) { x=x->rchild;// x->rchild=NULL;}temp=x->lchild;x->lchild=x->rchild;x->rchild=temp;printf("交换之后:\n");PrintChild(x);break;case 7:printf("输入根节点:\n");getchar();scanf("%c",&c);if(T->data==c){x=T;}else{x=FindNode(c,T);}if(x->lchild&&x->lchild->data==c){temp=x->lchild;x->lchild=NULL;}else if(x->rchild&&x->rchild->data==c) { temp=x->rchild;x->rchild=NULL;}//printBiTree(x);DestroyBiTree(temp);break;//x=NULL;case 8:printf("输入根节点:\n");getchar();scanf("%c",&c);x=FindNode(c,T);if(x->lchild&&x->lchild->data==c){temp=x->lchild;}else if(x->rchild&&x->rchild->data==c) { temp=x->rchild;// x->rchild=NULL;}CopyBiT(temp,temp1);printBiTree(temp1);break;case 9:printf("输入要插入的子树:\n");CreatBiTree(temp1);printf("输入插入根节点:\n");getchar();scanf("%c",&c);if(T->data==c){temp=T;}else{x=FindNode(c,T);if(x->lchild&&x->lchild->data==c){temp=x->lchild;}else if(x->rchild&&x->rchild->data==c) { temp=x->rchild;}}printf("1.左子树2.右子树\n");scanf("%d",&d);if(d==1) temp->lchild=temp1;else temp->rchild=temp1;//printBiTree(T);}}}。

相关文档
最新文档