第一篇:六年级实验课教案
电铃响丁当教案
一、教学目标: 过程与方法
●能够根据所给的材料制作一个电磁铁;
●能够做电磁铁的磁力大小跟哪些因素有关的实验; 知识与技能
●知道什么是电磁铁;
●知道电磁铁的磁力大小与电池的电量、导线缠绕的圈数有关; 情感、态度与价值观
●积极主动地研究电磁铁,体会探究的乐趣; ●乐于合作与交流。
二、教学准备:
教师准备:电池、导线、铁钉(用火烧过的)、大头针。学生准备:导线、电池盒、小铁片等。
三、教学形式
采用实际操作实验,教师归纳总结
四、过程:
一、制作电磁铁
1.教师提问:电铃每天为我们敲响上下课的信号?你想知道它是怎样工作的吗? 2.教师介绍,在电铃结构中有一个将漆包线缠绕在铁芯上的装置,它就是电磁铁。电磁铁由铁芯和线圈两部分构成。今天我们就来自己动手制作一个电磁铁。3.教师展示制作方法及过程要点。
讲解制作电磁铁的方法——提醒学生注意制作电磁铁线圈要始终朝一个方向缠绕,不能来回缠绕;线圈两端各预留出5厘米~10厘米的漆包线,作为连接电路的导线,线圈两端用胶布固定,避免松散。
4.(学生拿出材料。)学生制作电磁铁。5.教师提示:
(1)用铁钉的一端接近小铁钉,观察有什么现象?(2)然后切断电源,又有什么现象发生。说明电磁铁有什么性质?(3)电磁铁作为一种能量转化装置,它输人和输出的能量是什么? 学生实验,观察现象。
6、小结:
电磁铁通电后产生磁性,断电后磁性消失;电磁铁是一种将电能转化 成磁能的装置。电磁铁吸起铁钉的个数是不同的。
二、认识电磁铁磁力大小不同
1.讲述:
同学们,你们刚才都制作了电磁铁,为什么有的电磁铁吸起的大头针较多,有的电磁铁吸起的大头针较少。说明什么?
2.师生小结:
实验说明,电磁铁的磁力大小是不同的。
三、研究电磁铁磁力大小与什么因素有关系
1.谈话:
为什么有的同学制作的电磁铁的磁力很大?你们小组再研究一下,一会儿我们再来一次,你们有信心找到加大电磁铁磁力的方法吗?
2.小组实验,汇报方法。
3.对于你们的设想是否正确,我们来讨论几个问题:
(1)电磁铁的磁力大小可能与什么有关系?什么情况下磁力比较大?什么情况下磁力又比较小?
(2)电磁铁的磁力大小与连接的电池多少是否有关系?你用什么方法证明?实验时应注意什么问题?
(3)电磁铁的磁力大小与导线绕的圈数多少是否有关系?你用什么方法证明?实验时应注意什么问题?
4.分组实验,汇报实验结果。
5.师生小结:
实验证明,电磁铁的磁力大小与串联电池的数量和线圈匝数有关系,串联电池多、线圈匝数多,可以加大电磁铁的磁力。(板书 串联电池多 线圈匝数多)
6.谈话:
如果我们要制作一个磁力很大的电磁铁,使它能吸起很多大头针,应该怎么做?
7.分组实验,汇报实验结果:。
(1)你们制作的电磁铁吸起多少大头针?
(2)你们是怎样做的?用了多少节电池?线圈匝数是多少?
8.讨论:
这个实验说明了什么?
(串联电池多、线圈匝数多,可以加大电磁铁的磁力。)
三、认识电磁铁的应用
1.讲述:
上节课后,让同学们查找电磁铁在生产和生活中有什么广泛的应用。请你们来汇报一下。
2.学生汇报查找结果:
(电磁起重机、电铃、电话等)
3.讲解:
人们还利用电磁铁通电有磁性、断电后磁性消失的特性制成了电铃。在电铃这个装置中,有一个弹簧片,能使导线中的电流时通时断;这样,电磁铁就时而有磁性时而无磁性,于是就一下一下地吸引连着铃槌的铁片,使它带动铃槌不断敲打铃。由于敲打的速度很快,就发出连续的铃声。
(2)出示电磁起重机图片。
利用电磁铁可以制作电磁起重机。电磁起重机主要由一大块铁心和缠绕在铁心周围的线圈构成。通电后,可以吸起很多铁块、铁管、铁板等;断电后,可以自动将这些铁制的物体放下。电磁起重机多用在炼铁厂和搬运铁器的地方。
(4)出示电话听筒图和扬声器图片
四、总结: 通过这节课,你知道了哪些关于电磁铁的知识? 《电铃响丁当》教学反思:
上这一课很开心,教材的编排我觉得很好,而且总给学生一种层层深入的感觉,而且探究任务难度适中,课堂教学中给人其乐融融之感。
这课的教学分成很清晰的三个环节:一是了解什么是电磁铁,二是了解电磁铁与磁铁之间的共同之处,主要是吸引铁和有南北极两个性质;三是了解电磁铁的南北极是可以变化的,主要与电池的连接方法与线圈的缠绕方法有关。
探究实验中,关键要让学生关注变量和常量的一些注意点,基本上学生还是陶醉在自己的猜测与实验中。
值得提出的是,在改变电池的连接方法来改变电磁铁的南北极的时候,我发现有不少小组是存在无法改变的现象,即,改变电流方向后,仍旧与指南针的一头发生吸引现象,而且这种情况不止一个小组,起初我以为可能是小组实验中不够仔细,变量发生变化的同时,其他条件也发生变化,但我也去尝试了一下,发现去是有这样的情况,后来,我猜测可能是电池电量不足的情况下,是指南针发生的作用,因为新买来的电池是不会出现这样的情况的。
第二篇:实验课教案
实验课题:测量1分钟的心跳与脉搏次数
实验目标:
1、了解自己在正常情况下1分钟的心跳跳动的次数以及脉搏跳动的次数;
2、认识心跳与脉搏之间的关系
实验器材或药品:橡胶管、钟表
实验设想:一个人一分钟内心脏跳动多少次、人的脉搏速度是怎样的?心跳和脉搏有什么规律?
实验探究过程:
1、把橡胶管连在两个漏斗颈上,做成一个简易听诊器;
2、用听诊器与同学互相听心跳的声音,记录一分钟心跳的次数;
3、与同学互相摸脉搏,记录一分钟脉搏的次数;
4、边听对方的心跳边测他的脉搏,观察心跳与脉搏跳动有什么关系。
现象观察:人的心脏跳动一次,人的脉搏就搏动一次
实验结论:在正常情况下,人的心跳和脉搏是一致的实验课题:测肺活量
实验目标:
1、知道什么是肺活量,掌握测量肺活量的正确方法,并能测量自己的肺活量。
2、知道体育锻炼对呼吸和心脏带来的好处;认识到清新的空气,合理的运动,有助于我们的健康。
实验器材或药品:气球、卷尺、塑料瓶、直尺、吸管 实验设想:人的肺活量都一样吗? 实验探究过程:
一、制作肺活量测量器
1.沿塑料瓶的外壁由下向上贴上白纸条;
2.用100ml的烧杯装满水,倒入塑料瓶,小心不要把水倒在瓶外,然后用记号笔沿水面标上100ml的记号,依次进行,标到1000ml即可。
二、测肺活量
1.测量前,一定要先将塑料中装满水,并盖上盖子;
2.把塑料瓶倒扣在水槽中,瓶口一定要没在水的下方;
3.在水中旋开盖子,将直角弯头管的一头伸进塑料瓶;
4、吸足一口气,尽最大力气向水中吹气;
5、读出自己的肺活量,读的时候是读出瓶中空的体积,不是读出瓶中水的体积;
6、在第二个同学测之前,也一定要将瓶中的水装满。现象观察:每个人的肺活量不尽相同。实验结论:人的肺活量有大有小。实验课题:研究心脏的跳动和血液循环
实验目标:知道血液循环系统的组成及其作用;知道血液循环系统的组成及其作用。
实验器材或药品:水盆,水,塑料瓶
实验设想:心脏为什么要不停地跳动?心脏不停跳动究竟有什么作用呢?
实验探究过程:
一、模拟心脏跳动。1.在水中反复挤压和放松塑料瓶,仔细观察现象,实验时水槽中的水要适量。2.在水中挤压塑料瓶的活动可以利用输液管替换,效果更接近“原型”:找一些医院里的输液管(最好是新的),在中间的塑料小瓶子的两端各保留适当长度的管子,截掉多余部分,再用两个培养皿,往其中一个倒入适量红水,挤压塑料小瓶,仔细观察现象。
二、观察人体血管图。1.观察、介绍人体的血管。2.找一找,在人身体的哪些地方能摸到脉搏。3.感受自己的脉搏跳动。
三、测量1分钟的心跳和脉搏次数。1.脉搏和心跳最好同时测出,因为人的心跳次数并非固定不变。2.测量活动可以两人合作完成,同学帮助测脉搏,自己测心跳,然后轮换。3.边测量边记录数据。
现象观察:当我们模拟心脏跳动时,手有节奏地握紧与张开,手臂上的肌肉也随着一起紧张、放松。
实验结论:心脏总是在不停地跳动,并与脉搏跳动的次数一致。实验课题:研究杠杆的秘密(探究杠杆省力的秘密)实验目标:
1、认识什么东西叫作杠杆(即杠杆的特点)。
2、认识杠杆的巧妙作用及它是如何产生作用的。
3、能利用杠杆的原理解决生活中的一些难题。
实验器材或药品:带刻度的平衡尺、钩码、铁架台 实验设想:在什么情况下杠杆省力? 实验探究过程:
1.组装杠杆尺,并把杠杆尺调成平衡状态。
2.确定杠杆尺一侧的点为阻力点,挂一定数量的钩码。
3.在另一侧确定动力点的位臵,看看在不同位臵上需要挂多少钩码。才能使杠杆尺保持平衡,并记录结果。
4.改变阻力点的位臵,重复第二步,做三次实验。现象观察:
省力杠杆的特点是:用力点到支点的距离大于阻力点到支点的距离;费力杠杆的特点是:用力点到支点的距离小于阻力点到支点的距离;不省力也不费力杠杆的特点:用力点到支点的距离等于阻力点到支点的距离。
实验结论:平衡尺仍保持平衡尺,这说明杠杆省力与否与着力点到支点的距离有关。实验课题:研究轮轴的作用 实验目标:
1、认识轮轴的结构。知道利用轮带动轴可以省力,利用轴带动轮转动可以省距离。
2、能够识别生活中应用轮轴的实例,会分析它是怎样帮助人们提高工作效率的。
实验器材或药品:轮轴套装,细线,钩码,弹簧测力计 实验设想:轮轴有什么作用? 实验探究过程:
1、用一个轮轴实验装臵来研究轮轴的作用,记录实验数据,最后进行实验数据分析。
2、换一个大一点的轮,记录下更大的伦用多少钩码可以是轮轴保持平衡,记录数据。
现象观察:
把各组轮轴收起来,分两类放在一起。对比它们的轮和轴。发现:轴相等的情况下,轮越大越省力。
实验结论:
通过实验发现在轮轴的轮上用力能够省力,如果轴不变,轮越大越省力。由此我们也认识到轮轴也是一种机械。
实验课题:用定滑轮提起重物
实验目标:初步认识定滑轮,了解定滑轮在生活和实际中的应用。
实验器材或药品:铁架台,钩码,细线,定滑轮、弹簧测力计
实验设想:如何把货物运到高处? 实验探究过程:
1、安好定滑轮,在定滑轮上挂一根绳子,在绳子的两端任意挂上一些钩码,当绳子平衡时,两端的钩码数相同。
2、改变钩码的数量再做几次。现象观察:
当弹簧测力计斜向上拉时,拉力的示数会变大。实验结论:
定滑轮不能省力,但是可也改变用力方向。实验课题:用动滑轮提起重物
实验目标:初步认识动滑轮,了解动滑轮在生活和实际中的应用。
实验器材或药品:铁架台,钩码,细线,定滑轮、弹簧测力计
实验设想:使用动滑轮有什么好处? 实验探究过程: 1.组装好动滑轮;
2.用测力计分别直接提升1个钩码、2个钩码、3个钩码,测出用了多大的力;
3.分别在动滑轮上提升1个钩码、2个钩码、3个钩码,测出用了多大的力(每种做3次);
比较直接提升和用动滑轮提升升重物用力的不同。现象观察:使用动滑轮提升钩码,弹簧秤的示数约是钩码重的二分之一。在提升钩码的过程中也把动滑轮提升起来,当钩码重远大于动滑轮重时,动滑轮才可忽略不计,从而得出使用动滑轮可以省一半力的结论。
实验结论:动滑轮能够省力,但是不能改变用力的方向。实验课题:研究滑轮组的作用
实验目标:会根据滑轮组的挂线判断滑轮组的省力情况,会根据要求,正确组装滑轮组。
实验器材或药品:铁架台,钩码,细线,滑轮组,弹簧测力计
实验设想:
使用滑轮组的优点是什么? 实验探究过程: 1.组装好滑轮组;
2.用测力计分别直接提升1个钩码、2个钩码、3个钩码,测出用了多大的力;
3.分别在滑轮组上提升1个钩码、2个钩码、3个钩码,测出用了多大的力(每种做3次);
比较直接提升和用滑轮组提升重物用力的不同。现象观察:定滑轮的特点是:能改变用力方向,但不能省力。动滑轮的特点是:能省力,但不能改变用力方向。滑轮组既省力又能改变力的方向。
实验结论:滑轮组既省力又能改变力的方向。实验课题:研究斜面的作用
实验目标:认识像搭在汽车上的木板那样的简单机械叫斜面,斜面可以省力。
实验器材或药品:弹簧秤、小车、光滑的木板、木块 实验设想:“山上的公路和平地上的公路有什么区别?为什么要这样修建?”
实验探究过程:
1.用木板搭造一个斜面,在相同高度下,用测力计提升不同物体需要多大的力,记录数据,并分析实验结果;
2.再用不同坡度的斜面,提升相同的物体,测量需要多大的力,记录数据,分析实验结果。
现象观察:
对研究结果作出分析,发现其中的规律。(发现同一物体从斜面拉上用去的力都小于直接把物体垂直提上去用的力,所以斜面可以省力)
实验结论:斜面的角度越小所需的拉力越小。实验课题:研究不同坡度斜面的作用
实验目标:知道不同坡度的斜面作用不同,坡度越小越省力。
实验器材或药品:长木板,小车,弹簧测力计,小木块 实验设想:
不同坡度斜面的作用是一样的吗? 实验探究过程:
用测力计直接提升物体的力与沿斜面提升物体的力进行对比,然后改变斜面的不同坡度继续进行试验,做好记录为结果的分析提供依据。
现象观察:
斜面都有省力的作用,斜面坡度越小越省力,坡度越大的斜面越费力。
实验结论:斜面能够省力,而且斜面坡度越小越省力。实验课题:研究物体的形状与承受力的关系
实验目标:知道物体形状与承受力有关,改变其形状,承受力也会改变。
实验器材或药品:硬纸、砖块、厚书等重物 实验设想:物体的承受力真的与形状有关吗? 实验探究过程:
1、用大小差不多的纸做成不同形状的纸筒;
2、用胶水粘好后竖直放在桌上;
3、将书本、砖分别放在相关的纸筒上,比较它们的承重力。
现象观察:物体形状与承受力有关系。改变物体的形状,物体的承受力也会发生变化。
实验结论:不同形状的纸筒承受力是不同的,在不同的柱形纸筒中,圆柱形纸筒承受力较好。实验课题:测试纸拱的承重能力
实验目标:认识拱形能够增强抗弯曲的能力。实验器材或药品:小车,钩码,纸,木块
实验设想:让学生看一些拱桥的图片。问为什么桥要做成拱形,特别是在古代,材料还不是很多,强度也不是很好的年代。其原因在那里?
实验探究过程:
1、把纸圈成一圈后松开,做成一个拱形,用木块测试一下它能够承受多大的压力。
2、用两本书分别抵住两边的拱脚,使纸拱不会塌下来,测试一下它能够承受多大的压力。
3、用较多的书抵住脚拱。再测量能够承受多少个木块。现象观察:拱形可以向下和向外传递承受的压力,所以能够承受很大的压力。
实验结论:将纸做成拱形后它能够承载更大的压力,而且拱形受压会产生一个向外推的力,抵住这个力,拱就能承载很大的重量。实验课题:做简单的框架
实验目标:不同形状的框架,变形程度不同;三角形框架是最稳定的结构,从而进一步激发学生研究结构与稳定性关系的兴趣。
实验器材或药品:吸管、胶带、剪刀
实验设想:你对框架式结构有哪些认识?框架式结构好不好?它有哪些作用?
实验探究过程:
1、用三根吸管和胶带做一个三角形框架,试一试稳定性。
2、用四根吸管和胶带做一个四边形框架,试一试稳定性。
3、在四边形框架里面加两根斜杠,再试一试稳定性。与不加斜杠时的框架比一比,哪个坚固。
4、做一个正方体框架,试一试稳定性。
5、在正方体框架的每个面上都加两根斜杠试一试稳定性。
6、在正方体框架的每个面上都加两根直杠试一试稳定性。
7、比一比,4、5、6的不同情况哪种更坚固。
现象观察:通过实验我们知道了三角形是最稳固、最不容易变形的框架。
实验结论:制作框架时,三角形比四边形更加稳定。所能承受的压力也就会更大。实验课题:研究影子形成的原因及特点
实验目标:做光和影的实验,并将观察结果准确地进行记录;根据实验结果分析推理出光源、遮挡物、影之间的关系。
实验器材或药品:不透明物体、光源、白纸、铅笔 实验设想:猜猜看影子是怎样产生的? 实验探究过程:
1、桌面上放上一块长方体木块,打开手电筒开关,从不同位臵照射。
2、在桌面上放三块木块(与手电筒距离不一样),打开手电筒开关。
3、将1块木块平放在桌面上,打开手电筒开关,从水平和垂直方位照木块。
现象观察:影子产生需要的条件,光源、遮挡物、屏。实验结论:影子的产生需要光,垂直照射影子最短,平射影子最长。实验课题:观察阳光下影子的变化
实验目标:识别一天中影子的变化和阳光的变化 实验器材或药品:白纸,橡皮泥,铅笔,温度计 实验设想:想想看从清晨到黄昏,太阳在天空中的位臵在不断变化,阳光下物体的影子也在变化吗?是怎样变化的呢?
实验探究过程:
1.早晨,在校园里找一个物体,给它的影子做上记号,下课的时候再去画一画。
2.用橡皮泥把铅笔垂直固定在白纸上,确定好南北方向。
3.每到下课的时候画出阳光下铅笔的影子;
4.用温度计测出当时的温度,并在影子的顶端记下当时的温度和时间。
现象观察:一天中太阳在正午时最高,物体影子最短;太阳在清晨傍晚时最低,物体的影子最长。
实验结论:一天中,影子变化由长→短→长,温度变化由低→高→低。实验课题:验证光的传播路线 实验目标:了解光的传播路线
实验器材或药品:手电筒,三张小孔纸板,屏 实验设想:光传播的路线是怎样的? 实验探究过程:
1、在三张长方形卡纸的同一位臵打一个洞,把这些卡纸分别用夹子夹住横立在桌上,每张卡纸之间间隔15厘米,并排成整齐的一列,使卡纸的小孔在同一直线上。在最后一张卡纸之后约15厘米的地方,再放一个纸屏。
2、把手电筒放臵在离自己最近的卡纸前一定距离,让手电筒的光射进小孔。观察在纸屏上出现的现象。
3、把第二张卡纸向左移动5厘米,同样用手电筒的光对准离自己最近的卡纸上的小孔,仔细观察纸屏上的现象。
4、比较两次观察到的实验现象。现象观察:光是沿直线传播的 实验结论:光是沿直线传播的实验课题:小孔成像模拟实验
实验目标:知道光在均匀介质中沿直线传播,并能用来解释小孔成像原理;知道小孔成像所成的像的形状与孔的形状有关。
实验器材或药品:小刀,纸盒,铝箔纸,胶布,钉子 实验设想:小孔成像所成的像的形状与孔的形状有关吗?
实验探究过程:
1.在纸盒底部割出一个小窗;
2.在纸盒的另一头用透明纸蒙住;
3.用铝箔纸把小窗盖上,并用钉子(大头针)小心地在小窗中心钻一个孔;
4.观察:将有小窗的一面朝向窗户,前后移动纸盒,直至能在纸上看到清晰的影像为止。
5、分析小孔成像的原因。
现象观察:当孔比较小的时候,物的不同部分发出的光线会到达屏幕的不同的部分,而不会在屏幕上相互重叠,所以屏幕上的像就会比较清晰。但小孔小,到达屏幕的光线少,像不明亮。当孔比较大的时候,物的不同部分发出的光线会在屏幕上重叠,屏幕上的像自然也就不清晰。但小孔大,到达屏幕的光线少,像比较明亮。
实验结论:光在同一物质中是沿直线传播的。窗户上成的是一个倒立的实像。实验课题:让小灯泡发光
实验目标:能用多种方法让小灯泡亮起来,知道电池、导线、灯泡的作用。
实验器材或药品:导线,电池,小灯泡 实验设想:灯泡是如何发光的呢? 实验探究过程:
1、导线连接小灯泡的螺纹与电池底部的锌壳,电池铜帽与小灯泡的锡粒接触,观察现象。
2、导线连接小灯泡的锡粒与电池底部的锌壳,电池铜帽与小灯泡螺纹接触,观察现象。
3、导线连接电池铜帽与小灯泡螺纹,小灯泡的锡粒与电池底部的锌壳接触,观察现象。
现象观察:开关的作用是控制电路的通断,保证小灯泡根据需要亮或灭;灯座的两个金属片分别接在小灯泡尾部的锡点部分和金属壳的螺丝部分;电池盒的作用是装电池,先将电池的尾部的负极压在簧片上,再把正极压入电池盒内。
实验结论:一个简单的电路由电池、导线、灯泡和开关组成。实验课题:做个电路检测器 实验目标:制作一个电路检测器 实验器材或药品:电池,小电珠,导线
实验设想:提供一个出了故障的电路,并提出问题:小灯泡为什么不亮了? 实验探究过程:
1.一个由2个灯泡、灯座、1节电池、电池盒连接组成的出故障的电路,一个“电路检测器”。
2.先预测再用电路检测器检测电路中所发生的故障。
3.说出故障原因,并且采用替换法把电路重新接亮。现象观察:
(1)在检测电路时,应先把故障电路中的电池从电池盒中取出;(2)检测故障电路中的电池是否有电,应采用取出电路检测器的电池盒中的电池,将故障电路中的电池放在电路检测器的电池盒里,看看小灯泡会不会亮。
实验结论:连接到没故障的地方,小灯泡就亮,连接到有故障的地方,小灯泡就不会亮。实验课题:比较两种不同的电路连接(串并联)实验目标:能运用串联和并联两种用不同连接方法组成电路。
实验器材或药品:电池,小电珠,导线,回形针,图钉、木板
实验设想:出示二个小组组装的并联和串联的不同电路由学生进行比较,思考为什么同样是二节电池小灯泡的亮度即相差很多?
实验探究过程:
1、把电池装入电池盒里,把灯泡装在灯座上。
2、用导线把电池、灯泡、逐个串接法连起来。比较电池的串联和并联的特点。
3、用导线把电池、灯泡、逐个并接法连起来。比较灯泡的串联和并联的特点。
现象观察:一节电池的电压是1.5V,两节电池串联起来的电压是3V,所以小灯泡会特别亮。两节电池并联起来,电压还是1.5V,所以小灯泡不太亮。在总结的基础上形成板书:电池串联电压是两节电池之和,二节电池并联电压和一节电池的电压相等。
实验结论:并联电路的小灯泡比串联电路的亮。实验课题:检测导体与绝缘体
实验目标:检测区分各种物体是导体还是绝缘体 实验器材或药品:电路检测器,钥匙,木梳,纸板,橡皮,回形针等待检物品
实验设想:哪类物体是导体?哪类物体是绝缘体? 实验探究过程:
一、制作检测电路
1.把电池装入电池盒。2.把小电珠装入灯座,注意装小电珠时不要太用力。3.用导线把电池盒、小灯座、开关连接起来,并留出检测线,注意所用导线两头的绝缘层一定要事先剥去。4.检测电路的通电情况。
二、检测物品的导电性能
1.预测:哪些物体能导电?2.用检测电路分别检测物品的导电性能:将检测物品分别接入检测电路,通过小电珠的亮与灭来判断物品的导电性能。3.边实验边记录。
现象观察:生活中,人们利用导体把电流送到需要的地方,利用绝缘体阻止电流到人们不需要地方。
实验结论:容易导电的物体叫做导体,如钥匙、回形针、人体等;不容易导电的物体叫做绝缘体,如橡皮、纸板、木头等。
实验课题:磁铁能吸哪些物体
实验目标:磁铁能吸引铁制的物体,这种性质叫磁性 实验器材或药品:磁铁、纸板、铁钉、玻璃、橡胶、木块等
实验设想:磁铁能吸引什么物体?
实验探究过程:拿磁铁依次靠近纸板、铁钉、玻璃、橡胶、木块等材料,观察现象。
现象观察:磁铁主要能吸引铁一类的物体。
实验结论:能被磁铁吸引的物体都是铁材料制成的,不能被磁铁吸引的物体不是铁材料制成的。
实验课题:磁铁能隔着物体吸铁吗
实验目标:研究磁铁隔着一些物体能不能吸铁。实验器材或药品:磁铁、白纸,细铁屑 实验设想:磁铁能隔着物体吸铁吗? 实验探究过程:
1、在一张纸上面放上细铁屑。
2、把磁铁放在纸的下面,来回移动,看看能否吸住回形针。
3、记录观察的现象。
现象观察:磁铁隔着一些物体能吸住铁。实验结论:磁铁隔着一些白纸,也能吸铁。实验课题:磁铁什么地方磁力大
实验目标:认识磁铁上磁力最强的部分叫磁极,磁铁有两个磁极;学会正确运用“磁力” 进行表述。
实验器材或药品:磁铁,回形针
实验设想:磁铁各部分磁力大小一样吗?
实验探究过程:把磁铁分成四段,标上A/B/C/D/E,用磁铁的各部分去吸回形针记录各部分吸引回形针的个数。
现象观察:磁铁两端磁力最强、中间磁力最弱,科学家把两端磁性最强的地方,叫做磁极。
实验结论:磁铁两端磁性最强,磁铁上最强的部分称磁极,磁铁有两个磁极。实验课题:磁铁两极的研究
实验目标:通过实验,明白磁铁上磁力最强的部分称磁极,磁铁有两个磁极,两个磁极接近,有时互相吸引,有时互相排斥。
实验器材或药品:磁铁,水槽,泡沫
实验设想:一块磁铁有两个磁极,如果我们把两块磁铁的磁极互相靠近,又会发生什么有趣的现象呢?
实验探究过程:把两块磁铁的两端分别标上A/B/C/D,再将它们相互接近,观察结果。用符号“→←”表示相互吸引的情况,用符号“←→”表示相互排斥的情况,把实验的结果记录下来。
现象观察:B和C排斥,B和D相吸,A和C相吸,A和D排斥。
实验结论:当两块磁铁的磁极接近的时候出现了两种现象,吸在一块儿我们就叫做互相吸引,推开去叫做互相排斥。实验课题:磁极是怎样相互作用的
实验目标:能通过实验找到磁铁的南极与北极,探究磁极之间相互作用的规律及生活中的应用
实验器材或药品:条形磁铁,铅笔
实验设想:想想让两块磁铁的磁极相互靠近,共有几种情况?
实验探究过程:用两只手握住两块有标识的磁铁,将它们的磁极相互接近,S极与S极排斥;N极与N极排斥;S极与N极吸引;N极与S极吸引。
现象观察:当两块磁铁相互靠近时,同极相互排斥,异极相互吸引
实验结论:磁铁的同极相互排斥,异极相互吸引实验课题:探究磁铁磁力大小的变化
实验目标:知道磁电磁铁的磁力大小是可以改变的;电磁铁的磁力大小与电流的大小、线圈的圈数等有关。
实验器材或药品:电磁铁,大头针,电池,粗细不同的导线,粗细铁钉
实验设想:怎样使我们的自制电磁铁吸引更多的回形针?
实验探究过程:
1、用同一个电磁铁,改变电池个数的多少分别来吸引回形针,比比吸引回形针的数量有什么不同;
2、用导线匝数不同(铁钉粗细相同、电池个数一样多)的电磁铁分别去吸引回形针,看看哪个电磁铁吸引的回形针多,把观察到的现象记录下来;
3、用铁钉粗细不同的电磁铁(导线匝数相同、电池个数要样多)分别去吸引回形针,看看哪个电磁铁吸引的回形针多,把观察到的现象记录下来。
现象观察:电磁铁的磁力大小与电流大小、导线匝数有关。
实验结论:电流大磁力大,电流小磁力小;导线匝数多,磁力大,导线匝数少,磁力小。实验课题:制作铁钉电磁铁
实验目标:
1、要求学生知道电磁铁在通电条件下有磁性,电磁铁也有两极,它的两极是可以改变的。
2、培养学生的制作能力(学会制作电磁铁的方法),试验能力和归纳概括能力。
实验器材或药品:大铁钉、电池、电池座、绝缘导线、回形针若干
实验设想:学生动手制作铁钉电磁铁。接着引导认识电磁铁的结构,他由哪几部分构成?(铁芯、线圈两部分)
实验探究过程:
1.将带有绝缘层的细导线紧密绕在铁钉上,至少30圈;将导线与电池组成电路。
2.用自制电源接触回形针,观察现象。
现象观察:改变电池正负极的连接方法或改变线圈缠绕的方向会改变电磁铁的南北极。
实验结论:电磁铁是利用电流获得磁性的装臵。实验课题:用通电导线和指南针研究电和磁的关系 实验目标:通过实验使学生知道电流可以产生磁性,电流越强、线越多,磁性越大。线圈可以检测是否有电流。
实验器材或药品:大铁钉、电池、电池座、绝缘导线、回形针若干
实验设想:你觉得电和磁之间有关系吗?电路中放入电池灯泡会亮,如果把磁铁接在导线上能让灯泡发亮吗?磁铁不能让灯泡发亮。如果把导线接近指南针会怎样?电能不能产生磁?怎样证明电能不能产生磁?(如果指针偏转说明能产生磁。指针没动说明没磁性。)
实验探究过程:
1、在铁钉上缠绕一定圈数的漆包线,然后串联不同数量的电池,分别观察吸起大头针的数量。
2、在同一个铁钉上先后缠绕不同圈数的漆包线,然后串联相同节数的电池,分别观察吸起大头针的数量。
现象观察:电能产生磁,没电就没磁。
实验结论:
1、串联电池数量多的电磁铁,吸起的大头针多,说明它的磁力大一些。
2、缠绕圈数多的电磁铁,吸起的大头针多,说明它的磁力大一些。实验课题:研究铁钉电磁铁的南北极
实验目标:做研究电磁铁的南北极的实验,猜测电磁铁的南北极与什么有关,并通过对比实验来验证猜测,得出电磁 铁南北极与电池正负极接法和改变线圈绕向有关。
实验器材或药品:电磁铁,指南针
实验设想:对于普通的磁铁来说,磁性强的地方是磁极。电磁铁有磁极吗?我们可以验证电磁铁是否有磁极吗?怎么做?
实验探究过程:
(1)导线靠近指南针,指南针不偏转(2)导线接上电池靠近指南针,指南针偏转
现象观察:电磁铁具有接通电流产生磁性、断开电流磁性消失的基本性质。
实验结论:改变通过电磁铁中的电流方向(电池的正负极连接和线圈绕线方向)会改变电磁铁的南北极。实验课题:岩石的观察记录
实验目标:认识到岩石组成地球外壳,覆盖在地球表面; 知道常见岩石在颜色、结构、软硬程度及遇酸后的不同特征;认识岩石有三种类型:岩浆岩、沉积岩、变质岩
实验器材或药品:不同的岩石标本、放大镜、烧杯、钉锤、滴管、稀盐酸
实验设想:了解岩石的特征,你打算用哪些方法?(学生充分发言后,教师应当引导他们认识要从颜色、结构、软硬等方面,通过观察、实验来研究岩石的特征)
实验探究过程:
1.用水冲洗并检查每块岩石。摸摸每块岩石,是光滑的还是粗糙的?观察它的棱角,是圆的还是尖的?用刀片、铜钥匙、手指甲刻划每块岩石,测试其硬度大小。每块岩石的颜色又是怎样的?
2.观察岩石的内部。用手掰开或者用锤子敲开每块岩石,看一看,岩石的内部有什么东西?岩石内部和外部的颜色是相同的吗?有小沙粒掉下来吗?
3.在每块岩石上滴一滴盐酸(注意安全),冒泡吗? 现象观察:
岩石的结构比较复杂,同学们在观察时可以利用放大镜来判断岩石是层状的,还粒状的;是粗粒的,还是细粒的;是由同种颗粒构成的,还是由几种不同的颗粒构成的。
实验结论:花岗岩,花斑状,很硬块状结构,遇盐酸无反应。页岩,红褐色或灰色,较软,薄层状结构,遇盐酸无反应。石灰岩,青灰色或褐色,较硬,颗粒状结构,遇盐酸冒泡。
实验课题:认识几种常见的岩石,尝试用不同的标准对其分类(如颜色、形状、质地等)
实验目标:
1、观察、记录、描述几种常见岩石的颜色、结构和构造。
2、根据岩石的显著特征对照有关资料识别岩石。
3、根据需要对岩石进行观察、比较、以及查阅相关资料。
实验器材或药品:各种常见的岩石标本
实验设想:我们来看一看地质学家是怎样描述岩石的? 实验探究过程:
1、观察岩石的颜色、光泽等;
2、利用条痕板观察矿物的条痕,用指甲或小刀来估计硬度;
3、按三大类岩石进行分类;
4、观察火成岩的结构、构造,对火成岩进行分类;
5、观察沉积岩的颜色、成分、结构、构造,对沉积岩分类;
6、观察变质岩的矿物、结构、构造等。
现象观察:引导学生认识岩石学家对岩石种类作出判断的方法,如用放大镜和显微镜观察岩石薄片的成分和颗粒组成;岩石颗粒的大小和结构。
实验结论:岩石不都是粗糙的石块,表面光滑、色彩鲜艳、纹理美丽的鹅卵石、雨花石也是岩石,只是由于风化、流水的冲击摩擦等自然因素的影响而改变了她的模样。
实验课题:观察、描述矿物(条痕、软硬、透明度、光泽和形状)
实验目标:指导在学习过程中获取一些矿物颜色、条痕、软硬等方面的基本科学知识。
实验器材或药品:各种矿石标本,钥匙,小刀,放大镜等
实验设想:我们知道岩石是由矿物组成的,那我们会对矿物进行描述吗?哪些方面你觉得最能反映矿物的本质属性?
实验探究过程:
1、观察各种矿物的集合体形态(粒 状、片状、致密块状等集合体)和物理性质(颜色、光泽、解理等)
2、还可以利用条痕板观察矿物的条痕,用指甲或小刀来估计硬度;
3、对矿物进行分类。
现象观察:很多的矿物是以颜色的名字命名的,因为颜色是最容易观察到的矿物的特征,也是辨认矿物的重要依据之一。但有些矿物具有多种色彩,有些不同矿物却具有相同的色彩。
实验结论:在识别矿物时,清楚有些矿物具有多种色彩,有些不同的矿物具有相同的色彩,知道矿物的条痕颜色比矿物的外表颜色更可靠,一部分同学能适当举出例子。
实验课题:昼夜交替现象的模拟实验
实验目标:知道昼夜交替现象有多种可能的解释,初步理解昼夜交替现象与地球和太阳的相对圆周运动有关。
实验器材或药品:地球仪,电灯等
实验设想:昼夜交替现象的产生可能与什么有关? 假如太阳和地球,它俩都静止不动,能产生昼夜交替现象吗?为什么?
实验探究过程:
1、将实验室窗户适当遮挡。
2、在地球仪的中国北京贴上小红旗。手电筒代表太阳,六名同学围成圆圈,圆圈中间站一同学手中擎起地球仪。
3、假设地球和太阳的运动方式,并模拟,做好记录。现象观察:昼夜交替现象产生与太阳和地球运动有关。实验结论:地球是个球体,太阳只能照亮地球的一半,对着太阳的一面是白昼,背着太阳的一面是黑夜。地球不停地转动,昼夜现象就会交替出现。
实验课题:太阳运动与影子变化模拟实验
实验目标:能用简单的方法(借助身体和器物)进行观察,发现影子变化的规律;能继续观察和记录阳光下物体影子的变化;知道一天中气温和影子的变化与太阳的运动有关。
实验器材或药品:竹篾,电筒,橡皮泥,铅笔 实验设想:太阳每天从什么方向升起?在什么方向落下?阳光下的物体有什么特点?
实验探究过程:1.手电筒代表太阳,竹篾代表太阳运动的轨迹,小标杆代表地球上能产生影子的物体。2.围绕地球仪转动手电筒,观察地球仪上的明暗变化。3.固定电筒位臵,转动地球仪,观察地球仪上的明暗变化。
现象观察:太阳的位臵和高度决定了影子的方向和长短。太阳在东,影子在西……太阳高度高,影子则短,太阳高度低,影子则长。影子的长短变化和气温存在着一定的联系:一般情况下影子长,气温就低……但每天最高气温并不是影子最短的时侯,而是在下午1—2点之间,这是因为那时地球吸收太阳热辐射最多,故气温最高。
实验结论:太阳高度越高,影子越短;反之影子越长。
实验课题:模拟月相变化
实验目标:根据已有的现象进行简单集体模拟,同时学生能了解月球、地球、太阳的运行位臵以及初一的月相;利用模拟实验,清楚观察到月相,明白月相变化的规律。
实验器材或药品:月相盒套装
实验设想:月相怎样变化?月相为什么会发生变化? 实验探究过程:
1、把塑料球的一半用黑墨水涂黑;
2、在地面上画上直径一米和0.5米的两个同心圆,小圆代表地球,大圆代表月球的公转轨道。其中一名同学站在同心圆的圆心上;
3、一名同学手举塑料球站在图中标出的四个位臵上,站在中央的同学观察白半球的外形。
现象观察:月相变化是月球围绕地球公转过程中形成的,变化是有一定规律的:农历上半月由缺到圆,亮面向右;下半月由圆到缺,亮面向左。
实验结论:观察到塑料球的西半边先看到,而且越来越大,直至整个满月的出现,然后再是东半球亮,然后越来越小,直至什么也看不到。
第三篇:数据结构实验课教案
授课教案
(2016—2017学第一学期)
课程名称: 课程编码: 总学时: 课程类别:
任课教师: 开课单位: 职称: 授课专业: 授课班级:
数据结构 B13040009A 总学分: 专业课 李素若 计算机工程学院
教授 计算机科学与技术
2015级计算机科学与技术专业1、2班 授课进度第3周,第6次课(2学时)授课题目
(教学章、节实验一线性表的顺序存储结构 或主题)
授课日期
016年9月14日(9 2
月13日)
.掌握线性表顺序存储结构的特点:逻辑上相邻的数据元素其物理位置上也相邻。1 2.掌握线性表顺序存储结构的插入、删除操作特点移动操作。
教学
目标
1.线性表的顺序存储特点
教学 2.线性表的顺序存储的基本算法 重点
1.线性表的顺序存储的基本算法
教学 难点
请选择你授课时所采用的教学方法(在括号中画“√”):
讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学
谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习
方法
法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学
实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本
手段
﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业
[ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”):
参考
电出版社,2014.文献
教学过程及内容
一、实验内容
.输入一组整型元素序列,建立顺序表。1 2 .遍历该顺序表。3 .在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。4 .判断该顺序表中元素是否对称,对称返回1,否则返回0。5 .输入整型元素序列利用有序表插入算法建立一个有序表。6 .利用实验6建立两个递增有序表并把它们合并成一个递增有序表。7
二、实验指导
1.参考程序为:
voidCreateSqList(SqList*L){ intn,i; do{ printf(“请输入数据元素的个数:”);
scanf(“%d”,&n);
if(n<=0)printf(“输入错误n”); } while(n<=0); for(i=0;i
} 2 .参考程序为:
voidPrintList(SqListL){ inti;
for(i=0;i intFindelems(SqListL,ElemTypee){ inti; for(i=0;i return0; } 4.分析:从顺序表表头开始扫描,当数据元素为偶数时就从该数开始往后查找,一旦 — 1— 教学过程及内容 找到奇数,则将该偶数与此奇数交换。顺序表中所有数据全部扫描结束后,所有奇数就排列 在表的前端。参考程序为: voidChangeVal(SqList*L){ inti,j,temp; for(i=0;i if(L>elem[j]%2!=0){ temp=L>elem[i]; L>elem[i]=L>elem[j]; L>elem[j]=temp; break; } } if(j==L>length)break; } } } 5.参考程序为: intYesNo_Symmetry(SqListL){ inti,j; j=L.length1; for(i=0;i return0; } return1; } 6 .参考程序为: voidInsert_OrderList(SqList*L,intx){ inti,j; for(i=0;i — 2— 教学过程及内容 L>elem[j+1]=L>elem[j]; L>elem[i]=x; L>length++; } voidCreate_OrderList(SqList*L){ intn,i,input; do{ printf(“请输入数据元素的个数:”); scanf(“%d”,&n); if(n<=0)printf(“输入错误n”); while(n<=0); } for(i=0;i Insert_OrderList(L,input); } } 7 .参考程序为: SqList*Merge_OrderList(SqListA,SqListB)//将有序顺序表A和B合并到有序顺序表C中返回 { inti=0,j=0,k=0; SqList*C=(SqList*)malloc(sizeof(SqList)); C>length=0; while(j C>elem[i++]=A.elem[j++]; else C>elem[i++]=B.elem[k++]; } if(j==A.length) while(k } — 3— 授课进度第4周,第8次课(2学时)授课题目 (教学章、节实验二单向链表 或主题) 授课日期 016年9月21日(9 2 月20日) .掌握线性链表的操作特点,即指针是逻辑关系的映像。1 .掌握动态产生单链表的方法。2 3 .熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。 教学 目标 1.掌握动态产生单链表的方法。 教学 2.熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。重点 1.熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。 教学 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 .随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。1 .遍历单向链表。2 3 .把单向链表中元素逆置(不允许申请新的结点空间)。.在单向链表中删除所有的偶数元素结点。4 5 .编写在非递减有序链表中插入一个元素使链表元素仍有序的函数,并利用该函数建 立一个非递减有序单向链表。 .利用实验5建立两个递增有序单向链表,然后合并成一个递增链表。6 7 .利用实验1建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个 全部为偶数(尽量利用已知的存储空间)。 二、实验指导 1.参考程序为: LinkListCreateListH(void)//头插法产生带头结点单链表 { intch; LinkListhead=(LinkList)malloc(sizeof(LNode)); LinkLists; head>next=NULL; while(scanf(“%d”,&ch)==1)//输入数据类型错误时结束单链表的生成 { s=(LinkList)malloc(sizeof(LNode)); s>data=ch; s>next=head>next; head>next=s; } returnhead; } LinkListCreateListRand(void)//利用随机函数产生带头结点单链表(头插法){ intch,i; LinkListhead=(LinkList)malloc(sizeof(LNode)); LinkLists; head>next=NULL; srand((unsigned)time(NULL)); printf(“PleaseinputCreateNnmbers:”); scanf(“%d”,&ch); for(i=0;i s>data=rand()%50;//随机产生0~49之间的数 — 1— 教学过程及内容 s>next=head>next; head>next=s; } returnhead; } 2 .参考程序为: voidPrintLinkList(LNodeL){ LinkListp; p=L.next; while(p){ printf(“%d”,p>data); p=p>next; } printf(“n”); } 3.参考程序为: voidInverse_set(LinkListhead){ LNode*r,*m=NULL,*p; p=head>next; while(p!=NULL){ r=m;m=p; p=p>next; m>next=r; } head>next=m; } 4.参考程序为: voidDelEvenLinkList(LinkListhead){ LinkListq,p; p=head>next; q=head; while(p){ if(p>data%2==0){ q>next=p>next; free(p); — 2— 教学过程及内容 p=q>next; } else { q=p; p=p>next; } } } 5 .参考程序为: voidInsertIncr(LinkListhead,ElemTypex)//将结点插入递增的单链表 { LinkListq,p,s; s=(LinkList)malloc(sizeof(LNode)); s>data=x; q=head; p=head>next; while(p&&p>data p=p>next; } s>next=q>next; q>next=s; } LinkListCreateListIncr(void)//通过调用插入有序链表函数生成递增单链表 { intch; LinkListhead=(LinkList)malloc(sizeof(LNode)); LinkLists; head>next=NULL; while(scanf(“%d”,&ch)==1)//输入数据类型错误时结束单链表的生成 InsertIncr(head,ch); returnhead; } 6 .参考程序为: LinkListLinkListCat(LinkListhead1,LinkListhead2){ LinkListh1,h2,h; LinkListhead=(LinkList)malloc(sizeof(LNode)); head>next=NULL; — 3— 教学过程及内容 h1=head1>next; h2=head2>next; h=head; while(h1&&h2){ if(h1>data h1=h1>next; } else { h>next=h2; h=h>next; h2=h2>next; } } if(h1)h>next=h1; if(h2)h>next=h2; returnhead; } 7 .参考程序为: # include voidPrintLinkList(LNodeL){ LinkListp; p=L.next; while(p){ printf(“%d”,p>data); p=p>next; — 4— 教学过程及内容 } printf(“n”); } voidDecoLinkList(LNodehead,LinkListhead1,LinkListhead2)//将单链表head拆分奇数链head1和偶数链head2 { LinkListh,h1,h2; h=head.next; h1=head1; h2=head2; while(h){ if(h>data%2==0){ h2>next=h; h=h>next; h2=h2>next; } else { h1>next=h; h=h>next; h1=h1>next; } } h1>next=NULL; h2>next=NULL; } main(){ LinkListhead; LinkListhead1=(LinkList)malloc(sizeof(LNode)); LinkListhead2=(LinkList)malloc(sizeof(LNode)); head=CreateListIncr(); PrintLinkList(*head); DecoLinkList(*head,head1,head2); PrintLinkList(*head1); PrintLinkList(*head2); } — 5— 授课进度第5周,第10次课(2学时)授课题目 (教学章、节实验三栈的存储及基本运算 或主题) 授课日期 016年9月28日(9 2 月27日) .掌握栈这种数据结构特性及其主要存储结构,并能在现实生活中灵活运用。1 2.了解和掌握递归程序设计的基本原理和方法。 教学 目标 .掌握栈的两种存储结构 1.栈的基本运算 教学 2.了解栈在递归函数中的作用 重点 3.掌握栈的两种存储结构 1 教学 2.栈的基本运算 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 .采用顺序存储实现栈的初始化、入栈、出栈操作。1 2 .采用链式存储实现栈的初始化、入栈、出栈操作。3 .写一个程序,将输入的十进制数据M转换为八进制数据M8,将其调试通过。在此 基础上修改程序,实现十进制数据M向N进制(2或8或16)的转换。(1)采用顺序存储结构实现栈。(2)采用链表结构实现栈。 二、实验指导 .参考程序为: 1 # include //用来存放栈中元素的一维数组 //用来存放栈顶元素的下标 } SqStack; intInitStack(SqStack**s)//初始化顺序栈 {(*s)=(SqStack*)malloc(sizeof(SqStack)); if((*s)==NULL)returnERROR;(*s)>top=1; returnOK; } intEmptyStack(SqStacks)//判断栈空 { if(s.top==1) { printf(“stackisempty!n”); returnOK; } returnERROR; } intGetTop(SqStacks,int*e)//取栈顶元算 { if(EmptyStack(s))returnERROR; *e=s.elem[s.top]; — 1— 教学过程及内容 returnOK; } intPush(SqStack*s,inte)//入栈 { if(s>top==Stack_Size1) { printf(“stackisfull!n”); returnERROR; } s>top++; s>elem[s>top]=e; returnOK; } voidPrintStack(SqStacks)//打印栈中数据 { inti; for(i=0;i<=s.top;i++)printf(“%d”,s.elem[i]); printf(“n”); } intPop_Stack(SqStack*s,int*e)//出栈 { if(EmptyStack(*s)) returnERROR; *e=s>elem[s>top]; s>top; returnOK; } voidmain(){ intcord,e,x,y; SqStack*s; do { printf(“nMainMenun”); printf(“1CreatStackn”); printf(“2GetTopElementn”); printf(“3Pushn”); printf(“4Popn”); printf(“5Printn”); printf(“6quitn”); scanf(“%d”,&cord); — 2— 教学过程及内容 switch(cord){ case1: InitStack(&s); break; case2: if(GetTop(*s,&y)) printf(“StackTop=[%d]n”,y); break; case3: printf(“Pleaseinputpushelement:”); scanf(“%d”,&e); Push(s,e); break; case4: if(Pop_Stack(s,&x)) printf(“Popstack=[%d]n”,x); break; case5: PrintStack(*s); break; case6: return; } } while(cord<=6); } 2 .参考程序为: include structstacknode*next; } StackNode; typedefstruct { StackNode*top;/*栈顶指针*/ LinkStack; } — 3— 教学过程及内容 voidInitStack(LinkStack*s)//初始化栈 { s>top=NULL; } intEmptyStack(LinkStacks)//判断栈空 { if(s.top==NULL)returnOK; elsereturnERROR; } intGetTop(LinkStacks,int*e)//取栈顶元素 { if(EmptyStack(s))returnERROR; *e=s.top>data; } voidPush(LinkStack*s,inte)//入栈 { StackNode*p=(StackNode*)malloc(sizeof(StackNode)); p>data=e; p>next=s>top; s>top=p; } intPop_Stack(LinkStack*s,int*e)//出栈 { StackNode*p; if(EmptyStack(*s))returnERROR; p=s>top; *e=p>data; s>top=p>next; free(p); returnOK; } voidPrintStack(LinkStacks)//打印栈中元素 { StackNode*p=s.top; while(p){ printf(“%d”,p>data); p=p>next; } } voidmain() — 4— 教学过程及内容 { intcord,e,x,y; LinkStacks; do { printf(“nMainMenun”); printf(“1CreatStackn”); printf(“2GetTopElementn”); printf(“3Pushn”); printf(“4Popn”); printf(“5Printn”); printf(“6quitn”); scanf(“%d”,&cord); switch(cord){ case1: InitStack(&s); break; case2: if(GetTop(s,&y)) printf(“StackTop=[%d]n”,y); break; case3: printf(“Pleaseinputpushelement:”); scanf(“%d”,&e); Push(&s,e); case4: break; if(Pop_Stack(&s,&x)) printf(“Popstack=[%d]n”,x); break; case5: PrintStack(s); break; case6: return; } } while(cord<=6); } 3 .参考程序为: 1)(— 5— 教学过程及内容 voidConversion(SqStack*S){ intN,n1,t; printf(“输入一个十进制数字:n”); scanf(“%d”,&N);//输入一个十进制数字 printf(“输入要转换的n进制数字(2、8、16):n”); scanf(“%d”,&n1);//输入要转换的进制 while(N){ Push(S,N%n1); N=N/n1; } printf(“该数转化为%d进制数为:t”,n1); if(n1==16){ while(!EmptyStack(*S)){ Pop_Stack(S,&t); if(t==10){printf(“A”);continue;} if(t==11){printf(“B”);continue;} if(t==12){printf(“C”);continue;} if(t==13){printf(“D”);continue;} if(t==14){printf(“E”);continue;} if(t==15){printf(“F”);continue;} printf(“%d”,t); } } else PrintStack(*S); } voidmain(){ SqStack*S; InitStack(&S); Conversion(S); }(2) voidConversion(LinkStack*S){ intN,n1,t; printf(“输入一个十进制数字:n”); scanf(“%d”,&N);//输入一个十进制数字 — 6— 教学过程及内容 printf(“输入要转换的n进制数字(2、8、16):n”); scanf(“%d”,&n1);//输入要转换的进制 while(N){ Push(S,N%n1); N=N/n1; } printf(“该数转化为%d进制数为:t”,n1); if(n1==16){ while(!EmptyStack(*S)){ Pop_Stack(S,&t); if(t==10){printf(“A”);continue;} if(t==11){printf(“B”);continue;} if(t==12){printf(“C”);continue;} if(t==13){printf(“D”);continue;} if(t==14){printf(“E”);continue;} if(t==15){printf(“F”);continue;} printf(“%d”,t); } } else PrintStack(*S); } voidmain(){ LinkStackS; InitStack(&S); Conversion(&S); } — 7— 授课进度第8周,第14次课(2学时)授课题目 (教学章、节实验四队列 或主题) 授课日期 016年10月19日(10 2 月18日) .掌握队列这种数据结构的逻辑特性及其主要存储结构。1 2.在简单情况下会使用顺序结构的实现队列,熟练掌握循环队列的使用。.在复杂情况下会使用链表结构的队列,并能在现实生活中灵活运用。3 教学 目标 1.熟练掌握循环队列的使用。 教学 2.在复杂情况下会使用链表结构的队列。重点 1.链队列的使用。 教学 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 .采用顺序存储实现循环队列的初始化、入队、出队操作。1 2 .采用链式存储实现队列的初始化、入队、出队操作。3 .编写一个程序,使用两个链队q1和q2,用来分别存储由计算机随机产生的20个 100以内的奇数和偶数,然后每行输出q1和q2的一个值,即奇数和偶数配对输出,直到任 一队列为空为止。 二、实验说明 .循环队列类型采用如下结构: 1 defineMAXSIZE100//最大队列长度 # typedefintElemType; typedefstruct{ ElemTypedata[MAXSIZE]; intfront,rear;//队头、队尾指针 SqQueue; } .链队类型采用如下结构: 2 typedefstructQNode { ElemTypedata; structQNode*next; QNode,*QueuePtr; } typedefstruct { QueuePtrfront; QueuePtrrear; LinkQueue; } 三、实验指导 1.参考程序为: intInitQueue(SqQueue**Q)//初始化循环队列 { * Q=(SqQueue*)malloc(sizeof(SqQueue)); if(!(*Q)) return0; *Q)>front=(*Q)>rear=0;(return1; } intQueueEmpty(SqQueueQ)//判断队空 { returnQ.front==Q.rear; } — 1— 教学过程及内容 intQueueFull(SqQueueQ)//判断队满 { return(Q.rear+1)%MAXSIZE==Q.front; } intEnQueue(SqQueue*Q,ElemTypee)//入队操作 { if(QueueFull(*Q)) /队列满 return0; /Q>data[Q>rear]=e; Q>rear=(Q>rear+1)%MAXSIZE; return1; } intDeQueue(SqQueue*Q,ElemType*e)//出队操作 { if(QueueEmpty(*Q))return0; else { *e=Q>data[Q>front]; Q>front=(Q>front+1)%MAXSIZE; return1; } } 2 .参考程序为: intInitQueue(LinkQueue*Q)//将Q初始化为一个空的链队列 { Q>front=Q>rear=(QueuePtr)malloc(sizeof(QNode)); if(Q>front==NULL) return0; Q>front>next=NULL; return1; } intQueueEmpty(LinkQueueQ)//判断队空 { returnQ.front==Q.rear; } intEnQueue(LinkQueue*Q,ElemTypee)//入队操作 { QueuePtrp; p=(QueuePtr)malloc(sizeof(QNode)); if(!p) return0; — 2— 教学过程及内容 p>data=e; p>next=NULL; Q>rear>next=p; Q>rear=p; return1; } intDeQueue(LinkQueue*Q,ElemType*e)//出队操作 { QueuePtrp; if(QueueEmpty(*Q))return0;//若队列Q为空队列 p=Q>front>next; *e=p>data; Q>front>next=p>next; if(Q>rear==p) Q>rear=Q>front;//若Q只有一个结点 free(p); return1; } 3 .参考程序为: intmain(){ LinkQueueq1,q2; inti=0,j=0,num; InitQueue(&q1); InitQueue(&q2); srand((unsigned)time(NULL)); while(i<20||j<20){ num=rand()%100; if(num%2==0&&i<20){ EnQueue(&q1,num); i++; } if(num%2!=0&&j<20){ EnQueue(&q2,num); j++; } } while(!QueueEmpty(q1)&&!QueueEmpty(q2)) — 3— 教学过程及内容 { DeQueue(&q1,&i);DeQueue(&q2,&j); printf(“%3d%3dn”,i,j); } free(q1.front); free(q2.front); return0; } — 4— 授课进度 授课题目 第9周,第16次课(2学时)授课日期 016年10月26日(10 2 月25日) (教学章、节实验五二叉树(Ⅰ)或主题).掌握二叉树的存储实现。1 .掌握二叉树的遍历思想。2 教学 目标 .掌握二叉树的存储实现。1 .掌握二叉树的遍历思想。教学 2 重点 1.掌握二叉树的遍历思想。 教学 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 1.数据域为字符的一棵二叉树用广义表形式输入,创建一个采用二叉链表存储的二叉 树,并按广义表的形式输出这棵二叉树。 .在实验1的基础上完成这棵二叉树的中序遍历的递归算法。2 .在实验1的基础上完成这棵二叉树的中序遍历的非递归算法。3 二、实验指导 .参考代码为: 1 # defineMaxSize100 voidCreateBTNode(BTree*b,char*str)//广义表形式输入二叉树,按二叉链表存储二叉树 { BTNode*St[MaxSize],*p=NULL; inttop=1,k,j=0; charch; *b=NULL; ch=str[j]; while(ch!=' '){ switch(ch){ case'(':top++;St[top]=p;k=1;break; case')':top;break; case',':k=2;break; default:p=(BTNode*)malloc(sizeof(BTNode)); p>data=ch;p>lchild=p>rchild=NULL; if(*b==NULL)*b=p; else { switch(k){ case1:St[top]>lchild=p;break; case2:St[top]>rchild=p;break; } } } j++; ch=str[j]; } } voidDispBTNode(BTNode*b)//广义表输出二叉树 — 1— 教学过程及内容 { if(b!=NULL){ printf(“%c”,b>data); if(b>lchild!=NULL||b>rchild!=NULL){ printf(“(”); DispBTNode(b>lchild); if(b>rchild!=NULL)printf(“,”); DispBTNode(b>rchild); printf(“)”); } } } 2 .参考代码为: voidInOrder(BTreeT)//中序递归遍历 { if(T){ InOrder(T>lchild);/*中遍历左子树*/ printf(“%3c”,T>data);/*访问根结束*/ InOrder(T>rchild); } } 3 .参考代码为: voidInOrder1(BTreeT)//非递归中序遍历 { SqStack*S;BTreeP=T; InitStack(&S); do{ /*从树或子树根出发往左到叶子*/ while(P){ Push(S,P); P=P>lchild; } if(S>top!=1){/*P为NULL要么是叶子,要么是没有左子树*/ Pop(S,&P); printf(“%3c”,P>data); P=P>rchild; } } while((S>top!=1)||P); } /*中根遍历右子树*/ — 2— 授课进度第11周,第20次课(2学时)授课题目 (教学章、节实验五二叉树(Ⅱ)或主题).二叉树的常用算法。1 2 .二叉树线索化及遍历。 授课日期 016年11月9日(11 2 月8日) 教学 目标 1.二叉树的常用算法。 教学 重点 1.二叉树的常用算法。 教学 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 .求二叉树的宽度。1 2 .求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。.输出二叉树中从每个叶子结点到根结点的路径。3 4 .建立前序线索二叉树,并实现前序遍历。 二、实验指导 1.参考代码为: intBTWidth(BTNode*b)//求二叉树宽度 { struct { /结点的层次编号 intlno; /BTNode*p; //结点指针 Qu[MaxSize];//定义顺序非循环队列 } intfront,rear; //定义队首和队尾指针 intlnum,max,i,n; front=rear=0;//置队列为空 if(b!=NULL){ rear++; //根结点指针入队 Qu[rear].p=b; Qu[rear].lno=1; //根结点的层次编号为1 //队列不为空 while(rear!=front) { front++; b=Qu[front].p; //队头出队 //左孩子入队 lnum=Qu[front].lno; if(b>lchild!=NULL){ rear++; Qu[rear].p=b>lchild; Qu[rear].lno=lnum+1; } if(b>rchild!=NULL){ rear++; Qu[rear].p=b>rchild; Qu[rear].lno=lnum+1; } } — 1— //右孩子入队 教学过程及内容 max=0;lnum=1;i=1; while(i<=rear){ n=0; while(i<=rear&&Qu[i].lno==lnum){ /求每层的结点数 n++;i++; /} lnum=Qu[i].lno; if(n>max)max=n; } returnmax; } else return0; } 2 .参考代码为: intBTNodeDepth(BTNode*b)//求二叉树b的深度 { intlchilddep,rchilddep; if(b==NULL)return(0); else { lchilddep=BTNodeDepth(b>lchild);//左子数的高度 rchilddep=BTNodeDepth(b>rchild);//右子树的高度 return(lchilddep>rchilddep)?(lchilddep+1):(rchilddep+1); } } voidLong(BTreeT){ if(T!=NULL)//在T不为空的情况下 { printf(“%3c”,T>data);//访问节点 if(BTNodeDepth(T>lchild)>BTNodeDepth(T>rchild))//判断往左走还是往右走 Long(T>lchild); else Long(T>rchild); } } 3.参考代码为: — 2— 教学过程及内容 voidPrintStack(SqStack*S)//使用线性栈辅助操作 { inti; for(i=0;i<=S>top;i++)printf(“%3c”,S>elem[i]); printf(“n”); } voidAllPath(BTreeT,SqStack*S)//输出二叉树上从根到所有叶子结点的路径 { charch; if(T){ Push(S,T>data); if(!T>lchild&&!T>rchild)//如果左指针和右指针同时为空,才说明该节点为叶子节 点 PrintStack(S); else { AllPath(T>lchild,S); AllPath(T>rchild,S); } Pop(S,&ch); } } 4.参考代码为: BiThrTreepre; voidPreThreading(BiThrTreep)//先序线索化 { if(p){ if(!p>lchild) { p>LTag=Thread; p>lchild=pre; //前驱线索 } if(!pre>rchild) { pre>RTag=Thread; pre>rchild=p; //后继线索 } pre=p; if(p>LTag==Link) PreThreading(p>lchild);//左子树线索化 if(p>RTag==Link) — 3— 教学过程及内容 PreThreading(p>rchild);//右子树线索化 } } BiThrTreePreOrderThreading(BiThrTreeT)//先序线索二叉树 { BiThrTreethrt; if(!(thrt=(BiThrTree)malloc(sizeof(BiThrNode)))) returnNULL; thrt>LTag=Link; thrt>RTag=Thread;//建头结点 thrt>rchild=thrt;//右指针回指 if(!T)thrt>lchild=thrt;//空二叉树 else { thrt>lchild=T; pre=thrt; PreThreading(T);//先序遍历进行先序线索化 pre>rchild=thrt;pre>RTag=Thread;//最后一个结点线索化 thrt>rchild=pre; } returnthrt; } voidPreOrderTraverse_Thr(BiThrTreethrt)//先序遍历二叉树 { BiThrTreep; printf(“先序遍历结果为:”); p=thrt>lchild; while(p!=thrt){ printf(“%3c”,p>data); while(p>LTag==Link){ p=p>lchild; printf(“%3c”,p>data); } p=p>rchild; } printf(“n”); } — 4— 授课进度第13周,第24次课(2学时)授课题目 (教学章、节实验六哈夫曼树 或主题) 授课日期 016年11月23日(11 2 月22日) .理解哈夫曼树的特征及其应用。1.在对哈夫曼树进行理解的基础上,构造哈夫曼树,并用构造的哈夫曼树进行编 2 码和译码。 教学 目标 3.通过该实验,使学生对数据结构的应用有更深层次的理解。 1.哈夫曼树构造。 教学 2.哈夫曼编码和译码。重点 1.哈夫曼树构造。 教学 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 1.哈夫曼树问题。 利用哈夫曼编码进行通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据进行预先编码;在接受端将传来的数据 进行解码(复原)对于双工信道(即可以双向传输的信道),每端都要有一个完整的编/译码 系统。试为这样的信息收发站写一个哈夫曼的编译码系统。 基本要求;(1)从终端读入字符集大小为n(即字符的个数),逐一输入n个字符和相应的n个权 值(即字符出现的频度),建立哈夫曼树,进行编码,最后输出并存于文件hfmtree中。 2)利用已建好的哈夫曼编码文件hfmtree,对键盘输入的正文进行译码。输出字符正(文,再输出该文的二进制码。 3)测试数据。(用表2.1中给出的字符集(n=27)和频度的实际统计数据建立哈夫曼树。 表2.1用于测试的字符集合频度 并实现以下报文的译码和输出:“THISPROGRAMISMYFAVORITE”。 2.思考题:利用哈夫曼树及哈夫曼编码的原理编写一个算法,n个自然数之间经过加 减运算后结果最小的值是多少。注意:只能进行加减运算,且最后结果和运算的中间结果不 能为负。 二、实验指导 # include weight; parent,lchild,rchild; } HTNode,*HuffmanTree; typedefchar **HuffmanCode; typedefstruct{ unsignedint s1; unsignedint s2; } MinCode; MinCodeSelect(HuffmanTreeHT,unsignedintn); HuffmanCodeHuffmanCoding(HuffmanTree*H1,unsignedint*w,char*ch,unsignedintn)//求哈夫曼树及哈夫曼编码,将哈夫曼编码写入文本文件 { — 1— 教学过程及内容 unsignedinti,s1=0,s2=0; HuffmanTreep,HT; HuffmanCodeHC; char *cd; unsignedintf,c,start,m; MinCodemin; FILE*fp; if((fp=fopen(“Huffman.txt”,“wt”))==NULL){ printf(“CannotopenfileHuffman.txtanykeyexit!”); exit(1); } if(n<=1){ printf(“Codetoosmall!n”);exit(1);} m=2*n1; HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); for(p=HT,i=0;i<=n;i++,p++,w++){ p>weight=*w;p>parent=0; p>lchild=0;p>rchild=0; } for(;i<=m;i++,p++){ p>weight=0;p>parent=0; p>lchild=0;p>rchild=0; } for(i=n+1;i<=m;i++){ min=Select(HT,i1); s1=min.s1;s2=min.s2; HT[s1].parent=i;HT[s2].parent=i; HT[i].lchild=s1;HT[i].rchild=s2; HT[i].weight=HT[s1].weight+HT[s2].weight; } HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); cd=(char*)malloc(n*sizeof(char*)); cd[n1]=' '; for(i=1;i<=n;i++){ start=n1; for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) if(HT[f].lchild==c)cd[start]='0'; — 2— 教学过程及内容 elsecd[start]='1'; HC[i]=(char*)malloc((nstart)*sizeof(char)); strcpy(HC[i],&cd[start]); } free(cd); for(i=1;i<=n;i++)fprintf(fp,“%c%sn”,ch[i],HC[i]); fclose(fp); H1=HT; * returnHC; } MinCodeSelect(HuffmanTreeHT,unsignedintn)//求权值的最小值和次最小值 { unsignedintmin,secmin; unsignedinttemp; unsignedinti,s1,s2; MinCodecode; s1=1;s2=1; for(i=1;i<=n;i++)if(HT[i].parent==0){ min=HT[i].weight; s1=i; break; } for(;i<=n;i++)if(HT[i].weight s2=i; break; } for(i=1;i<=n;i++)if(HT[i].weight — 3— 教学过程及内容 s2=i; } code.s1=s1; code.s2=s2; returncode; } voidTranscodeing(intn,char*Char_Code,char*Huffman_Code)//从文本文件中读取哈夫曼编码,并字符编码转为哈夫曼编码 { FILE*fp; charstr[215],ch[50]={' '}; HuffmanCodeHC=NULL; inti=0,len,j,k; HC=(HuffmanCode)malloc((n+1)*sizeof(char*)); if((fp=fopen(“Huffman.txt”,“rt”))==NULL){ printf(“CannotopenfileHuffman.txtanykeyexit!”); exit(1); } while(!feof(fp)){ memset(str,0,sizeof(str)); fgets(str,215,fp); if(str[0]==0)break; len=strlen(str); ch[i]=str[0]; HC[i]=(char*)malloc((len1)*sizeof(char*)); memcpy(HC[i],&str[1],len2); HC[i][len2]=0; i++; } fclose(fp); i=0;k=0; while(Char_Code[i]!=' '){ for(j=0;j — 4— 教学过程及内容 free(HC); } intmain(){ HuffmanTreeHT=NULL; HuffmanCodeHC=NULL; unsignedint*w=NULL,i,n; charch[50]={' '},Huffman_Code[1024]={' '}; charChar_Code[]=“THISPROGRAMISMYFAVORITE”; printf(“Inputn:n”); scanf(“%d”,&n); w=(unsignedint*)malloc((n+1)*sizeof(unsignedint)); w[0]=0; printf(“Enterweight,character:n”); for(i=1;i<=n;i++){ printf(“w[%d],ch[%d]=”,i,i); scanf(“%d,%c”,&w[i],&ch[i]); } HC=HuffmanCoding(&HT,w,ch,n); Transcodeing(n,Char_Code,Huffman_Code); printf(“%sn”,Huffman_Code); free(w); return0; } — 5— 授课进度第14周,第26次课(2学时)授课题目 (教学章、节实验七图的遍历(Ⅰ)或主题) 授课日期 016年11月30日(11 2 月29日) .掌握图常用的邻接矩阵存储存储结构。1.掌握图的邻接矩阵存储结构上的两种遍历图的方法,即深度优先遍历和广度优 2 先遍历。 教学 目标 1.图的邻接存储结构。 教学 2.图的邻接矩阵存储结构下的两种遍历。重点 1.图的邻接矩阵存储结构下的两种遍历。 教学 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 图的邻接矩阵存储结构如下: #defineMaxVerNum100//设置邻接矩阵的最大顶点数 typedefcharVertexType;//设置图的顶点信息为字符 //设置边上权值为整型 typedefintEdgeType; typedefstruct{ VertexTypevexs[MaxVerNum];//图的顶点信息表 EdgeTypeedges[MaxVerNum][MaxVerNum];//图的邻接矩阵 //图的顶点数和边数 intn,e; MGraph;//图的邻接矩阵表示结构定义 } 1.键盘输入数据,建立一个图的邻接矩阵,并进行图的深度优先遍历和广度优先遍历。 二、实验指导 .参考代码为: 1 # include //设置边上权值为整型 typedefintEdgeType; typedefstruct{ VertexTypevexs[MaxVerNum];//图的顶点信息表 EdgeTypeedges[MaxVerNum][MaxVerNum];//图的邻接矩阵 //图的顶点数和边数 intn,e; MGraph;//图的邻接矩阵表示结构定义 } typedefenum{FALSE,TRUE}boolean; booleanvisited[MaxVerNum];//顶点访问标记向量 structlinkqueuenode { intdata; structlinkqueuenode*next; } ; typedefstruct { structlinkqueuenode*front; structlinkqueuenode*rear; linkque; } voidInitQueue(linkque*q){ structlinkqueuenode*p; p=(structlinkqueuenode*)malloc(sizeof(structlinkqueuenode)); p>next=NULL; — 1— 教学过程及内容 q>front=p;q>rear=p; } intQueueEmpty(linkqueq){ inti; if(q.front==q.rear)i=1; elsei=0; return(i); } voidEnQueue(linkque*q,intx){ structlinkqueuenode*p; p=(structlinkqueuenode*)malloc(sizeof(structlinkqueuenode)); p>data=x;p>next=NULL; if(QueueEmpty(*q)){ q>front>next=p; q>rear=p; } else { q>rear>next=p; q>rear=p; } } intDeQueue(linkque*q,int*x){ structlinkqueuenode*p; if(QueueEmpty(*q)){printf(“queueisempty!n”);return(0);} else { p=q>front>next; *x=p>data; q>front>next=p>next; if(p>next==NULL) q>rear=q>front; free(p); return(1); } } linkqueQ; voidCreateMGraph(MGraph*g)//建立图g的邻接矩阵表示 — 2— 教学过程及内容 { inti,j,k,w; intflag; printf(“创建:有限图选0,无向图选1n”); scanf(“%d”,&flag); printf(“请输入顶点数和边数(格式为:顶点数,边数)n”); scanf(“%d,%d”,&g>n,&g>e); printf(“输入顶点的信息,每个顶点以回车作为结束:n”); for(i=0;i scanf(“%c”,&(g>vexs[i])); } /将邻接矩阵数组初始化 for(i=0;i //构造无向图 if(flag) g>edges[j][i]=w; } } voidDFSM(MGraph*g,inti)//对以邻接矩阵表示的图,以序号为i的顶点为出发点进行深度优先搜索 { intj; printf(“%c”,g>vexs[i]);//访问序号为i的顶点 visited[i]=TRUE;//将序号为i的顶点设置访问过标记 for(j=0;j if((g>edges[i][j]!=0)&&(!visited[j]))//寻找序号为i的顶点的未访问过的邻接点 设序号为j)({ printf(“>”); DFSM(g,j);//以序号为j的顶点为出发点进行深度优先搜索 } } voidDFSMTraverse(MGraph*g,intstart)//对以邻接矩阵表示的图,从最初顶点start出发进行深度优先搜索 { inti; for(i=0;i — 3— 教学过程及内容 visited[i]=FALSE; DFSM(g,start);//对图进行深度优先搜索 printf(“n”); } voidBFSM(MGraph*g,intk)//对以邻接矩阵表示的图,以序号为k的顶点为出发点进行广度优先搜索 { inti,j; InitQueue(&Q); printf(“%c”,g>vexs[k]);//访问序号为k的顶点 visited[k]=TRUE;//将序号为k是结点设置为已访问过 EnQueue(&Q,k);//将序号为k的顶点入队 while(!QueueEmpty(Q)){ DeQueue(&Q,&i); for(j=0;j if((g>edges[i][j]!=0)&&(!visited[j])) //若序号为i的顶点有未访问过邻接点 { printf(“>%c”,g>vexs[j]);//访问序号为j的顶点 visited[j]=TRUE;//设置序号为j的顶点访问过标记 EnQueue(&Q,j);//将序号为j的顶点入队 } } } voidBFSMTraverse(MGraph*g,intstart)//对以邻接矩阵表示的图,从最初顶点start开始进行广度优先搜索 { inti; for(i=0;i } voidmain(){ MGraph*g=(MGraph*)malloc(sizeof(MGraph));//申请图g的邻接矩阵表示空间 CreateMGraph(g);//建立图 DFSMTraverse(g,0);//从顶点0出发进行图的深度搜索遍历 BFSMTraverse(g,0);//从顶点0出发进行图的广度搜索遍历 } — 4— 授课进度 授课题目 第15周,第28次课(2学时)授课日期 016年12月7日(12 2 月6日) (教学章、节实验七图的遍历(Ⅱ)或主题).掌握图常用的邻接表存储存储结构。1.掌握图的邻接表存储结构上的两种遍历图的方法,即深度优先遍历和广度优先 2 遍历。 教学 目标 1.图的邻接表存储结构。 教学 2.图的邻接表存储结构下的两种遍历。重点 1.图的邻接表存储结构下的两种遍历。 教学 难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 教学过程及内容 一、实验内容 图的邻接表存储结构如下: #defineMaxVerNum100//定义最大顶点数为100 typedefcharVertexType;//设置图的顶点信息为字符 //边表表结点结构 typedefstructNode{ intadjvex; structNode*next; } EdgeNode; typedefstructVNode{//顶点结点结构 VertexTypevertex; EdgeNode*firstedge; } VNode,AdjList[MaxVerNum]; typedefstruct{ AdjListadjlist; //顶点数和边数 intn,e; intkind; //有向图为0,无向图为1 } ALGraph; 1.键盘输入数据,建立一个图的邻接邻接表,并进行图的深度优先遍历和广度优先遍 历。 二、实验指导 1.参考代码为: # include //边表表结点结构 typedefstructNode{ intadjvex; structNode*next; } EdgeNode; typedefstructVNode{//顶点结点结构 VertexTypevertex; EdgeNode*firstedge; } VNode,AdjList[MaxVerNum]; typedefstruct{ AdjListadjlist; //顶点数和边数 intn,e; intkind; //有向图为0,无向图为1 } ALGraph; typedefenum{FALSE,TRUE}boolean; booleanvisited[MaxVerNum];//顶点访问标记向量 — 1— 教学过程及内容 structlinkqueuenode { intdata; structlinkqueuenode*next; } ; typedefstruct { structlinkqueuenode*front; structlinkqueuenode*rear; linkque; } voidInitQueue(linkque*q){ structlinkqueuenode*p; p=(structlinkqueuenode*)malloc(sizeof(structlinkqueuenode)); p>next=NULL; q>front=p;q>rear=p; } intQueueEmpty(linkqueq){ inti; if(q.front==q.rear)i=1; elsei=0; return(i); } voidEnQueue(linkque*q,intx){ structlinkqueuenode*p; p=(structlinkqueuenode*)malloc(sizeof(structlinkqueuenode)); p>data=x;p>next=NULL; if(QueueEmpty(*q)){ q>front>next=p; q>rear=p; } else { q>rear>next=p; q>rear=p; } } intDeQueue(linkque*q,int*x){ — 2— 教学过程及内容 structlinkqueuenode*p; if(QueueEmpty(*q)){printf(“queueisempty!n”);return(0);} else { p=q>front>next; *x=p>data; q>front>next=p>next; if(p>next==NULL) q>rear=q>front; free(p); return(1); } } linkqueQ; voidCreateALGraph(ALGraph*g)//建立图的邻接矩阵表示 { inti,j,k; intflag; EdgeNode*s1,*s2; printf(“创建:有向图选0,无向图选1n”); scanf(“%d”,&flag); printf(“请输入顶点数和边数(格式为:顶点数,边数)n”); g>kind=flag; scanf(“%d,%d”,&g>n,&g>e);//输入图的顶点数和边数 printf(“输入顶点的信息,每个顶点以回车作为结束:n”); for(i=0;i s1=(EdgeNode*)malloc(sizeof(EdgeNode)); s1>adjvex=j; s1>next=g>adjlist[i].firstedge; g>adjlist[i].firstedge=s1; } } — 3— 教学过程及内容 else { //无向图 for(k=1;k<=g>e;k++){ scanf(“%d,%d”,&i,&j); s1=(EdgeNode*)malloc(sizeof(EdgeNode)); s1>adjvex=j; s2=(EdgeNode*)malloc(sizeof(EdgeNode)); s2>adjvex=i; s1>next=g>adjlist[i].firstedge; g>adjlist[i].firstedge=s1; s2>next=g>adjlist[j].firstedge; g>adjlist[j].firstedge=s2; } } } voidDFSAL(ALGraph*g,inti)//对以邻接表表示的图,以序号为i的顶点为出发点进行深度优先搜索 { EdgeNode*p; printf(“%c”,g>adjlist[i].vertex);//访问序号为i的顶点 visited[i]=TRUE;//将序号为i的顶点设置访问过标记 p=g>adjlist[i].firstedge; while(p){ if(!visited[p>adjvex]){ printf(“>”);DFSAL(g,p>adjvex); } p=p>next; } } voidDFSALTraverse(ALGraph*g,intstart)//对以邻接表表示的图,从最初顶点start出发进行深度优先搜索 { inti; for(i=0;i visited[i]=FALSE; DFSAL(g,start);//对图进行深度优先搜索 printf(“n”); } voidBFSAL(ALGraph*g,intk)//对以邻接表表示的图,以序号为i的顶点为出发点进行广度优先搜索 { inti; — 4— 教学过程及内容 EdgeNode*p; InitQueue(&Q); printf(“%c”,g>adjlist[k].vertex);//访问序号为k的顶点 visited[k]=TRUE;//将序号为k是结点设置为已访问过 EnQueue(&Q,k);//将序号为k的顶点入队 while(!QueueEmpty(Q)){ DeQueue(&Q,&i); p=g>adjlist[i].firstedge; while(p){ if(!visited[p>adjvex]){ printf(“>%c”,g>adjlist[p>adjvex].vertex);//访问p>adjvex的顶点 visited[p>adjvex]=TRUE; EnQueue(&Q,p>adjvex); } p=p>next; } } } voidBFSALTraverse(ALGraph*g,intstart)//对以邻接矩阵表示的图,从最初顶点start出发进行广度优先搜索 { inti; for(i=0;i DFSALTraverse(g,0);//从顶点0出发进行深度优先搜索 BFSALTraverse(g,0);//从顶点0出发进行广度优先搜索 } — 5— 授课进度第16周,第30次课(2学时)授课题目 (教学章、节实验八查找 或主题) 授课日期 016年12月14日(12 2 月13日) .掌握顺序查找、折半查找算法的思想及程序实现。1 2 .掌握二叉排序树、AVL树的查找、插入、删除、建立算法的思想及程序实现。.掌握散列存储结构的思想,能选择合适散列函数,实现不同冲突处理方法的散 3 教学 目标 列表的查找、建立。 .掌握顺序查找、折半查找算法的思想及程序实现。1 .掌握散列存储结构的思想,能选择合适散列函数,实现不同冲突处理方法的散 教学 2 重点 列表的查找、建立。 1.掌握散列存储结构的思想,能选择合适散列函数,实现不同冲突处理方法的散 教学 列表的查找、建立。难点 请选择你授课时所采用的教学方法(在括号中画“√”): 讲授法﹝﹞,讨论法﹝﹞,演示法﹝﹞,案例法﹝﹞,发现法﹝﹞,探究法﹝﹞,教学 谈话法﹝﹞,实验法﹝√﹞,参观法﹝﹞,考察法﹝﹞,自学辅导法﹝﹞,练习 方法 法(习题或操作课)﹝√﹞,读书指导法﹝﹞,听说法﹝﹞,写生法﹝﹞,视唱 法﹝﹞,工序法(技能课)﹝﹞,实习作业法﹝﹞,其他﹝﹞ 教学 实物﹝﹞,多媒体﹝﹞,投影﹝﹞,影像﹝﹞,CAI课件﹝﹞,PPT﹝√﹞,标本 手段 ﹝﹞,挂图﹝﹞,模型﹝﹞,其他﹝﹞ 讨 论、思考 题、作业 [ 1]李素若,陈万华,游明坤主编.数据结构.北京:中国水利水电出版社,2014.[ 2]李素若,陈万华,游明坤主编.数据结构习题集及上机指导.北京:中国水利水 请选择你授课时所采用的教学手段(在括号中画“√”): 参考 电出版社,2014.文献 电工学实验课教案 实验一 基尔霍夫定律的验证 实验二 电压源与电流源的等效变换 实验三 叠加原理的验证 实验四 戴维南定理的验证 实验五 日光灯线路的连接 实验六 功率因数的提高 实验七 三相负载Y.的接线方法 实验八 三相负载Δ的接线方法 实验九 三相异步电动机启动控制 实验十 三相异步电动机正;反转控制系统实验一 电位、电压的测定及电路图绘制 一 实验目的: 1理解电路中电位及电压的概念。通过实验数据证明电位具有相对性而电压具有绝对性。3学会电位图的绘制方法。 二 实验原理:在一个确定的闭合电路中,各点电位的高低视所选参考点的不同而变。但任意两点间电位差是不变的。它不因参考点电位的变化而改变。 FI 1R1510I 3AR21KI 2B+12V510R3+6v--R4300三 实验内容: E510DC 分别将两路直流稳压电源调为E1= 6V。E2=12V,接入电路中。2 以图中A点为电位参考点,分别测量B C D E F 各点电位值及相邻两点间的电压值,Uab Ubc Ucd Ude Uef Ufa.2 以D点为参考点。分别测量以上2中数据。四 注意事项: 测量时万用表黑表笔与参考点相连,红表笔与待测点相连。实验二 基尔霍夫定律的验证 一 实验目的:学会使用直流电压表、电流表和数字万用表测支路电压、电流,验证基尔霍夫定律。 二 实验原理:KLC即∑I=0 任一节点的电流代数和为零。 KVL即∑U=0 任一回路,各元件电压代数和应为零。 FS1I 1R1510I 3AR21KI 2BS2+12V1-S1R4R3510+I I-S2S36vS3300D三 实验步骤:如图 E510DC 1. 熟悉电工试验台上各元件性能及稳压电源使用方法;将直流稳压电源调为6V,12V。注意切换开关位置; 2.熟悉数字万用表、电压表、电流表各量程掌握电压并电流串的测量方法。 3.用万用表测各电阻值,并记录。 4.任意设定各支路电流参考方向,选定电路中的任意节点验证KCL的正确性,5.选定电路中的任意回路验证KVL的正确性。6.数据记入表22.四:注意事项 : 1。严禁带电测量电阻;防止并联电阻存在;注意仪表极性,量程; 2。记录数据时注意正负号; 实验三 电压源与电流源等效变换 一 实验目的: 掌握电源外特性的测试方法。2 验证电压源与电流源等效变换的条件。 6v+Is=US/R0Us-Ro Us=IsR0-RLR0=R0IsRo RL+二 实验原理: 电压源模型 电流源模型 实际电源摸型:一个电源可以用两种不同的电路模型来表示,及电压源模型与电流源模型。其中电压源模型为理想电压源与电阻串联构成,R0 = 0。电流源模型为理想电流源与电阻并联构成R0 = ∽ 为理想电流源。2 电源模型的外特性: 电源模型的外特性:指输出电压与输出电流间的变化关系。即 U = F(I) (1)电压源模型的外特性 :伏安关系式,即U = U —I R,作的曲Us Uoc IO O Is RIs线称外特性曲 I s 线如图A。 U A B(2)电流源模型的外特性 :即U = I R — I R,作的曲线称外特性曲线,如图B;(3)电压源与电流源的等效变换 同一个实际电源的两种电路模型外特性是完全一致的,两者可以等效替换。等效(互换)的条件为:US=IS X R0,电阻一致。 注:A电压源与电流源的等效关系只对外电路而言,对电源内部则是不等效的。 B 理想的电压源与理想的电流源不能等效互换。三 实验内容及步骤: 1.测定电压源的外特性; +mA-mA+6vV+R1200+R1-Ro 1512006v--R2470R2470 按图连接线路 Us = 6V R1=20,R2=O—470 可调电阻。调节R2由大到小变化,测出R0 = O或R0=51 两种情况下的U I 值。记入表3—1中。 2.测定直流电流源与恒流源的外特性: mAIs+Ro- RL V 470/2W 5m A 按图连接线路,R0 =1K Is = 5mA R0= R0 = 1KΩ。 与 RO = ∽ 两种情况下.调节RL 0—470Ω 数据记入表3—2中。3.测定电源等效变换的条件: 按图3—5连接线路,先记录A图中V I 值,而后调节B图中恒流源,使B图中V I 数据和A图中数据相等。记录恒流源输出IS,验证IS=US / R0。的电源等效变换的条件。 四 注意事项: 1恒流源负载禁止开路,电压不可超过20V。2 换接线路时,必须关闭电源。3仪表接入应注意级性和量程。实验四 叠加原理的验证 一 目的:验证线性电路叠加原理的正确性,从而加深对线性电路的叠加性和齐次性的认识和理解。 二 原理:在有几个电源共同作用的线性电路中,通过任一支路的电流或两端电压等于每个电源单独作用时在该支路产生的电流或电压的代数和。在单一电源作用的电路,若激励信号增加或减小K倍,电路的响应也将增加或减少K倍,为齐次性 FS1I 1R1510I 3AR21KI 2BS2+12V1-S1R4R3510+I I-S2S36vS3300D三 实验步骤:如图 E510DC 1. 将直流稳压电源调为6V,12V。注意切换开关位置; 2. 将S3开关拨向300Ω电阻,E1单独作用时,去掉E2,S2拨向短路测;E2单独作用时,去掉E1,S1拨向短路测各支路电流;及各元件电压,测E1,E2共同作用时,各支路电流I1 I2 I3,及各元件电压值。数据记入表4 – 1。 3. 将开关S3拨向二极管侧,重复2的内容,数据记入表4-2。四:注意事项 : 1。注意仪表极性,量程; 2。记录数据时注意正负号; 3.E1单独作用时,E2不要短路 实验五 戴维南定理的验证 一 目的:掌握有源两端网络等效参数的测定方法,加深对戴维南定理的理解并验证该定理的正确性。 二 原理:任何一个线性有源两端网络,对外电路而定,总可以用一个理想的电压源和电阻和串联来代替R1R2AU0C10mAVRLR4R3R0RL。 12V 三 实验步骤:如图;按图连线路,将电压源调为12V,电流源调为10mA可变电阻箱接入电路中RL,测UOC,ISC得到RO记入表中5-1; 2有源两端网络外特性的测定,调节电阻箱改变RL,数据记录表5-2 3 验证代维南定理:将稳压电源调致U0C;1K 电位器调致R0数值,两者串联等效,再接上负载电阻箱,按步骤2测其外特性。数据记入表5 – 3。 4.用零示法测VOC。按图接好线路,在RL端接一可调稳压源,调整稳压源使安培表读数为零,电压表读数即为UOC 四 注意事项: 接线注意电源+-; 测量注意仪表量程;改变线路时注意关掉电源 实验六 日光灯线路的联接及测量 一 实验目的 学会日光灯线路的接线方法 2 学会功率表的使用及接线方法 掌握测量交流电路元件等效参数的方法。二 实验步骤:如图 *A*WL220VVRLS 1按图连结线路测W、U、I。VL、VR 2讨论:VR+ VL≠220V(交流)为什么? 三 注意事项: 因电源为220V(交流)接线注意安全 2 功率表注意电流串,电压并的原则。3 电流表电压表注意量程 实验七 功率因数的提高 一 目的:理解提高功率因数的意义 掌握感性负载提高功率因数的意义、方法及原理; ISI1RULICUICIC二 实验原理: 如图:K断开时,总电流 I = I1,COSΨ1=P/UI1 IL K闭和时,总电流 I = I1+IC COSΨ=P/U(I1+IC) ∵I < I1 ∴COSΨ > COSΨ1 三 实验步骤:如图 *A*WSL220VC2C3SRLC1 1.按图连结线路;电压调为220V。电容分别为0、2.2 4.7 6.9UF时,测量Pw、UV、IA、IL、IC值,数据记入表8 – 1。2.说明提高功率因数的意义; 四 注意事项: 1.功率表的接线方法; 2. 注意仪表量程; 实验八 三相负载Y星接法 一 实验目的: 1. 掌握三相负载Y连接方法,2. 验证三相负载对称情况下,Y接法时,线电压与相电压,线电流与相电流之间的关系。 3. 充分理解三相五线制供电,中线的作用。二 实验原理: Y形接法如图; ASS BFULALSCFULAAN 对称负载,线电流 = 相电流IL = IP,线电压UL = √3 UP In = O,中线可以省去。不对称负载,中线电流≠O,无中线时三相电压不对称,三相负载不能正常工作,故中线不能省去。三 实验内容: 1. 将线电压调为220V,把三相灯负载接成Y形,分别测量UAB UBC UCA,UA0、UB0、UC0,IA、IB、IC、I0、及中点电压。2. 了解中线的作用。四.注意事项: 1. 注意安全;不可带电接线,2. 严格遵守先接线、后通电;先断电、后拆线的操作要求。 实验九 三相负载Δ接法 一 实验目的: 1. 握三相负载Δ连接方法 2. 掌握三相负载对称情况下,Δ接法时,线电压与相电压,线电流与相电流之间的关系。二 实验原理: 三相负载Δ接法时,线电压UL = UP,负载对称时,三相电压、电流对称,IL = √3 I P 负载不对称时,三相负载电流不对称 IL ≠√3¯ IP 三 实验内容: SAS BSFU1LAFU2LDS1-3DS2-3AFU3LCNADS3-3 将线电压调为220V,把三相灯负载接成Δ形,负载对称和不对称时,分别测量Uab Ubc Uca,Iab、Ibc、Ica、、及Ia、Ib、Ic 四.注意事项: 1.注意安全;不可带电接线,2.严格遵守先接线、后通电;先断电、后拆线的操作要求。3.防止短路事故。 实验八 三相交流电压.电流的测量 一实验目的: 1掌握三相负载Y.Δ的接线方法 2验证三相负载对称是Y.Δ接法时,各自的线电压,相电压,线电流,相电流方向的数值关系; 3熟悉三相四线制中线的作用; 二 原理: 1.三相负载Y形连接时,对称负载 IL = IP I0 = O 中线可以省去。UL = √3UP 不对称负载;电压不对称,I0 ≠ O 中线不能省去。 2.三相负载Δ形连接时,UL = UP,对称负载 IL = √3IP 不对称负载; IL ≠√3IP 三 实验步骤: 1. 2. 3. 将电源调为线电压220V(交流) 将三相灯负载接成Y,测UL、UP、IP、IN 将三相灯负载接成Δ,测UL、IL、IP 根据灯亮暗程度,注意电线的作用。四 注意事项噶: 1注意安全。Δ接法防止短路。∽ 实验九 三相异步电动机启动控制 一 实验目的: 1. 2. 3. 4. 熟悉电动机的铭牌数据并记录 熟悉电动机结构及各引线端 测量电机绕组与外壳的绝缘电阻 练习正确接线,直接起动及反转 二 原理: 见原理图: A B CSWFUFRSB2SB1KM2KMKMKMFRM3 熟悉电动机的各项技术指标 掌握使用兆欧表的方法测量电动机绝缘电阻,熟悉电路图,用刀闸直接起动电动机 三 实验步骤: 1熟悉接触器。按钮。热继电器。电机等控制元件的构造,并记录其型号,规格。 2检查接触器。按扭的常开。常闭。触点是否正常 3按图连接线路 4启动电机。看是否运转正常。四:注意事项: 1. 严禁带电操作 2. 测电机绝缘电阻时应将兆欧表引线端接触良好 3. 合电源刀闸时,应检查无误,并使刀闸接触良好4。按电机铭牌所注额定电压和接线方式接线(Y△) 实验十 三相异步电动机正。反转控制系统一 实验目的: 1学习三相异步电动机正。反转控制线路的连接。 2加深理解三相异步电动机正。反转控制线路的工作原理,及线路中“自锁”和“互锁”环节的作用。 A B CSWFUFRSB3SB1KM1KM2KM1KM1KM2SB2KM1KM2KM2FR二 原理:见原理图。三 实验步骤: M3 按图连接线路,接成点动控制,再加自锁和互锁。使电动机正。反转运转正常。四 注意事项: 1严禁带电操作 2连好线路要认真检查,防止短路。 数据结构教案 实验一:线性表的顺序表示与实现 实验学时:2学时 一.实验目的: 1.掌握线性表的顺序存储结构; 2.掌握在顺序表上进行的插入、删除、查找、修改等操作。 二.实验内容: 1.分别建立顺序表,并输入初始数据; 2.对顺序表分别编写插入、删除、查找、修改等函数。 三.实验重点: 顺序表的建立及操作。 四.实验要求: 1.用C语言编写程序源代码; 2.要分别完成建立、插入、删除、查找、修改五种功能。3.源程序必须编译调试成功,独立完成。 五. 实验器材: 一个装有C语言编译环境的计算机。 六.实验步骤: 顺序表 : 1.定义头文件和顺序表的存储结构类型等 #define ok 1 #define error 0 #define overflow 0 #define null 0 #include return overflow;l->length=0;l->listsize=list_init_size;return ok;} 3.编写对顺序表进行插入操作的函数: status listinsert(sqlist *l,int i,elemtype e){ elemtype *newbase,*q,*p;if(i<1||i>listlength(*l)+1) return error;if(l->length==l->listsize) { newbase=(elemtype *)realloc(l->elem,(l->listsize+listincrement)*sizeof(elemtype)); if(!newbase) return overflow; l->listsize+=listincrement; } q=&(l->elem[i-1]);for(p=&(l->elem[l->length])-1;p>=q;--p) *(p+1)=*p;*q=e;++l->length;return ok;} 4.编写对顺序表进行删除操作的函数: status listdelete(sqlist *l,int i,elemtype *e){ elemtype *p,*q;if(i<1||i>l->length) return error;p=&(l->elem[i-1]);*e=*p;q=l->elem+l->length-1;for(++p;p<=q;++p) *(p-1)=*p;--l->length;return ok;} 5.编写对顺序表进行查找操作的函数: status getelem(sqlist l,int i,elemtype *e){ if(i<1||i>listlength(l))return error;*e=l.elem[i-1];return ok;} 6.编写对顺序表进行修改操作的函数: status locateelem(sqlist l,elemtype e){ int i;for(i=0;i if(l.elem[i]==e) return i+1;return 0;} 7.编写实现两个线性表的归并操作的函数 void mergelist(sqlist la,sqlist lb,sqlist *lc){ int i,j,k;int la_len,lb_len;elemtype ai,bj;i=j=1;k=0;listinit(lc);la_len=listlength(la);lb_len=listlength(lb);while(i<=la_len&&j<=lb_len){ getelem(la,i,&ai);getelem(lb,j,&bj);if(ai<=bj) { listinsert(lc,++k,ai); ++i; } else { listinsert(lc,++k,bj); ++j; } } while(i<=la_len){ getelem(la,i++,&ai);listinsert(lc,++k,ai);} while(j<=lb_len) { getelem(lb,j++,&bj);listinsert(lc,++k,bj); } } 8.销毁线性表、清空线性表、判空、求表长等 status destroylist(sqlist *l){ if(l->elem)free(l->elem),l->elem=null;return ok;} status clearlist(sqlist *l){ l->length=0;return ok;} status listempty(sqlist l){ return(l.length==0);} status listlength(sqlist l){ return l.length;} 9.打印线性表 void print(sqlist l){ int i;printf(“nlist: ”);for(i=0;i 10. 编写主函数 void main(){ int i;int n;elemtype a;sqlist l,la,lb,lc;clrscr();listinit(&l);listinit(&la);listinit(&lb); printf(“please input list number”);scanf(“%d”,&n);printf(“n”);for(i=0;i scanf(“%d”,&a); listinsert(&l,i+1,a);} print(l);printf(“nlist length:%d”,listlength(l)); getelem(l,4,&a);printf(“ngetelem(l,4,&a),%d”,a); listdelete(&l,3,&a);printf(“nlistdelete(&l,3,&a),%d”,a);print(l); printf(“ninput list la”); for(i=0;i<5;i++){ scanf(“%d”,&a); listinsert(&la,i+1,a);} printf(“ninput list lb”);for(i=0;i<7;i++){ scanf(“%d”,&a); listinsert(&lb,i+1,a);} mergelist(la,lb,&lc);print(la);print(lb);print(lc);} 实验二:链表 实验学时:2学时 一.实验目的: 11. 掌握单、双向链表的存储结构; 12. 掌握在单、双向链表上进行的插入、删除、查找、修改等操作。 二.实验内容: 4.分别建立单、双向链表,并输入初始数据; 5.对两种单、双向链表分别编写插入、删除、查找、修改等函数。 三.实验重点: 单向链表的建立及操作。 四.实验要求: 1.用C语言编写程序源代码; 2.要分别完成建立、插入、删除、查找、修改五种功能。6.源程序必须编译调试成功,独立完成。 五. 实验器材: 一个装有C语言编译环境的计算机。 六.实验步骤: 单链表 : 1.定义头文件和单链表的结构体类型 #include int data; struct LNode *next;}LNode, *LinkList; 2.编写构造单链表的函数 void InitList_L(LinkList L){ LinkList p,q;int i,b,j=0;p=L;printf(“请输入链表中元素的值,用-1表示输入结束:n”);do { scanf(“%d”,&b);q=(LinkList)malloc(sizeof(LNode));q->data=b;p->next=q;p=p->next;j+=1;} while(b!=-1);p->next=NULL;p=L;for(i=1;i 13. 编写对单链表进行插入操作的函数: void ListInsert_L(LinkList L,int r,int e){ LinkList p,s; int q=1,i,j=0; p=L; while(q>=1&&q<=r-1) { p=p->next; ++q; } s=(LinkList)malloc(sizeof(LNode)); s->data=e; s->next=p->next; p->next=s; p=L;while(p->next!=NULL) { p=p->next; j+=1; } p=L; printf(“插入一个新结点后的链表为:n”); for(i=1;i { p=p->next; printf(“%dn”,p->data); } printf(“插入一个新结点后链表结点的个数为:%dn”,j-1); printf(“***************************************n”);} 14. 编写对单链表进行删除操作的函数: void ListDelete_L(LinkList L,int r){ LinkList p,s;int q=1,i,e;p=L;if(r<1||r>k){ printf(“删除的位置不正确n”);printf(“***************************************n”);} else { while(q>=1&&q<=r-1){ p=p->next;++q;} s=p->next;p->next=s->next;e=s->data;k=k-1;printf(“删除的结点的值为:%dn”,e);printf(“删除一个结点后的链表为:n”);p=L;for(i=1;i<=k;i++){ p=p->next;printf(“%dn”,p->data);} printf(“删除一个结点后链表结点的个数为:%dn”,k);printf(“***************************************n”);} } 15. 编写对单链表进行查找操作的函数: void GetElem_L(LinkList L,int r){ LinkList p;int q=1,e;p=L;if(r<1||r>k){ printf(“第%d个元素不存在n”,r);printf(“***************************************n”);} else { while(q>=1&&q<=r){ p=p->next;q++;} e=p->data;printf(“第%d个元素的值为:n%dn”,r,e);printf(“***************************************n”);} } 16. 编写对单链表进行修改操作的函数: void UpdateElem_L(LinkList L,int r){ LinkList p;int q=1,n,i;p=L;if(r<1||r>k) { printf(“第%d个元素不存在n”,r); printf(“***************************************n”);} else { while(q>=1&&q<=r) { p=p->next; q++; } printf(“请输入修改后该结点的值:n”); scanf(“%d”,&n); printf(“***************************************n”); p->data=n; printf(“修改第%d个元素的值后链表为:n”,r); p=L; for(i=1;i<=k;i++) { p=p->next; printf(“%dn”,p->data); } printf(“***************************************n”);} } 17. 编写主函数 void main(){ int m,n=0;LinkList l;l=(LinkList)malloc(sizeof(LNode));InitList_L(l);while(n!=-1){ printf(“请选择对链表进行何种操作:n输入1表示对链表进行插入操作n输入2表示对链表进行删除操作n输入3表示对链表进行查找操作n输入4表示对链表进行修改操作n输入-1表示操作结束n”);printf(“***************************************n”);scanf(“%d”,&n);printf(“***************************************n”);switch(n){ case 1: printf(“请输入在第几个结点之前插入新结点:n”);scanf(“%d”,&m);printf(“***************************************n”);ListInsert_L(l,m);break;case 2: printf(“请输入删除第几个结点:n”);scanf(“%d”,&m);printf(“***************************************n”);ListDelete_L(l,m);break;case 3: printf(“请输入查找第几个结点的值:n”);scanf(“%d”,&m);printf(“***************************************n”);GetElem_L(l,m);break;case 4: printf(“请输入修改第几个结点的值:n”);scanf(“%d”,&m);printf(“***************************************n”);UpdateElem_L(l,m);break;} } printf(“操作结束!n”);} 双向链表 1.定义头文件和双向链表的结构体类型 #include 2.编写构造双向链表的函数 void InitList_DuL(DuLinkList L){ DuLinkList p,q;int i,b=0,j=0;p=L;printf(“请输入链表中元素的值,用-1表示输入结束:n”);while(b!=-1){ scanf(“%d”,&b);q=(DuLinkList)malloc(sizeof(DuLNode));q->data=b;p->next=q;q->prior=p;p=p->next;j+=1;} k=j-1;p->next=NULL;p=L;printf(“***************************************n”);printf(“创建的双向链表为:n”);for(i=1;i 3.对双向链表进行插入操作的函数 void ListInsert_DuL(DuLinkList L,int r){ DuLinkList p,s;int q=1,i,n;p=L;if(r<1||r>k){ printf(“插入的位置不正确!n”);printf(“***************************************n”);} else { while(q>=1&&q<=r-1){ p=p->next;q++;} s=(DuLinkList)malloc(sizeof(DuLNode));printf(“请输入插入的结点的值:n”);scanf(“%d”,&n);printf(“***************************************n”);s->data=n;s->next=p->next;p->next->prior=s;s->prior=p;p->next=s;k=k+1;p=L;printf(“插入一个新结点后的链表为:n”);for(i=1;i<=k;i++){ p=p->next;printf(“%dn”,p->data);} printf(“插入一个新结点后链表结点的个数为:%dn”,k);printf(“***************************************n”);} } 7. 写对双向链表进行删除操作的函数 void ListDelete_DuL(DuLinkList L,int r){ DuLinkList p,s;int q=1,i,e;p=L;if(r<1||r>k) { printf(“删除的位置不正确n”); printf(“***************************************n”);} else { while(q>=1&&q<=r-1) { p=p->next; ++q; } s=p->next; p->next=s->next; s->next->prior=p; e=s->data; k=k-1; printf(“删除的结点的值为:%dn”,e); printf(“删除一个结点后的链表为:n”); p=L; for(i=1;i<=k;i++) { p=p->next; printf(“%dn”,p->data); } printf(“删除一个结点后链表结点的个数为:%dn”,k); printf(“***************************************n”);} } 8. 编写对双向链表进行查找操作的函数 void GetElem_DuL(DuLinkList L,int r){ DuLinkList p;int q=1,e;p=L;if(r<1||r>k) { printf(“第%d个元素不存在n”,r); printf(“***************************************n”);} else { while(q>=1&&q<=r) { p=p->next; q++; } e=p->data; printf(“第%d个元素的值为:n%dn”,r,e); printf(“***************************************n”);} } 9. 编写对双向链表进行修改操作的函数 void UpdateElem_DuL(DuLinkList L,int r){ DuLinkList p;int q=1,n,i;p=L;if(r<1||r>k) { printf(“第%d个元素不存在n”,r); printf(“***************************************n”);} else { while(q>=1&&q<=r) { p=p->next; q++; } printf(“请输入修改后该结点的值:n”); scanf(“%d”,&n); printf(“***************************************n”); p->data=n; printf(“修改第%d个元素的值后链表为:n”,r); p=L; for(i=1;i<=k;i++) { p=p->next; printf(“%dn”,p->data); } printf(“***************************************n”);} } 10. 编写主函数 void main(){ int m,n=0;DuLinkList l;l=(DuLinkList)malloc(sizeof(DuLNode));InitList_DuL(l);while(n!=-1){ printf(“请选择对链表进行何种操作:n输入1表示对链表进行插入操作n输入2表示对链表进行删除操作n输入3表示对链表进行查找操作n输入4表示对链表进行修改操作n输入-1表示操作结束n”); printf(“***************************************n”); scanf(“%d”,&n); printf(“***************************************n”); switch(n) { case 1: printf(“请输入在第几个结点之前插入新结点:n”); scanf(“%d”,&m); printf(“***************************************n”); ListInsert_DuL(l,m); break; case 2: printf(“请输入删除第几个结点:n”); scanf(“%d”,&m); printf(“***************************************n”); ListDelete_DuL(l,m); break; case 3: printf(“请输入查找第几个结点的值:n”); scanf(“%d”,&m); printf(“***************************************n”); GetElem_DuL(l,m); break; case 4: printf(“请输入修改第几个结点的值:n”); scanf(“%d”,&m); printf(“***************************************n”); UpdateElem_DuL(l,m); break; } } printf(“操作结束!n”);} 实验三:栈、队列 实验学时:2学时 一.实验目的: 1.掌握栈、队列的存储结构; 2.掌握在栈、队列上进行的各种操作。 二.实验内容: 1.编写模拟Hanoi塔函数计算的程序,掌握栈在递归中的作用; 2.编写循环队列的进队、出队、初始化等函数。(2选1) 三.实验重点: 对栈、队列的存储结构的理解。 四.实验难点: 循环队列操作函数的编写。 五.实验要求: 1.用C语言编写程序源代码; 2.源程序必须编译调试成功,独立完成。 六.实验器材: 一个装有C语言编译环境的计算机。 七.实验步骤: Hanoi塔程序的编写 1.定义头文件: #include 2.编写move函数: void move(char x,char y){ printf(“%c-->%cn”,x,y);} 3.编写Hanoi塔函数: void hanoi(int n,char a,char b,char c){ if(n==1) move(a,c); else { hanoi(n-1,a,c,b); move(a,c); hanoi(n-1,b,a,c); } } 4.编写主函数: void main(){ int m;printf(“请输入需要移动的盘子数:n”);scanf(“%d”,&m);printf(“%d个盘子通过B从A移动到C的过程如下:n”,m);hanoi(m,'A','B','C');} 循环队列操作函数的编写 1.定义头文件和结构体类型等: #include int front;//顺序存储,即地址,所以用下标表示元素,front是第一个元 //的下标 int rear;//rear是最后一个元素的下标 }SqQueue; 2.编写初始化函数: int InitQueue(SqQueue &Q){ Q.base=(int*)malloc(MAXQSIZE*sizeof(int));if(!Q.base) return 0; else { Q.front=0; Q.rear=0; return 1; } } 3.编写进队函数: void EnQueue(SqQueue &Q,char e){ if((Q.rear+1)%MAXQSIZE==Q.front) printf(“队列满”);else { Q.base[Q.rear]=e;//Q.base表示数组的地址也即数组名;Q.rear表示引用结//构体类型变量Q中的一个成员rear ,也即是数组中下标为rear的元素 Q.rear=(Q.rear+1)%MAXQSIZE; } } 4.编写出队函数: void DeQueue(SqQueue &Q){ char e;if(Q.front==Q.rear) printf(“队列空n”);else { e=Q.base[Q.front]; Q.front=(Q.front+1)%MAXQSIZE; } } 5.编写显示功能函数: void Display(SqQueue Q){ int i; if(Q.front==Q.rear) printf(“队列空n”);else { i=Q.front; printf(“队列中的元素如下:”); do { printf(“%c”,Q.base[i]); i=(i+1)%MAXQSIZE; } while(i!=Q.rear); } } 6.编写主函数: void main(){ SqQueue Q; char r; int i=0; InitQueue(Q); while(i!=-1) { printf(“请选择对队列进行何种操作:n 输入1表示进行入队操作n 输入2表示进行出队操作n 输入-1表示不进行任何操作n”); printf(“********************************************n”); scanf(“%d”,&i); printf(“********************************************n”); switch(i) { case 1: printf(“请输入要入队的元素的值,输入#表示结束:n”); printf(“****************************************n”); scanf(“%c”,&r); while(r!='#') { EnQueue(Q,r); scanf(“%c”,&r); } printf(“****************************************n”); Display(Q); printf(“****************************************n”); break; case 2: DeQueue(Q); Display(Q); break; } } } 实验四:树 实验学时:2学时 一.实验目的: 1.掌握二叉树的存储结构; 2.掌握在二叉树上进行的各种操作。 二.实验内容与基本要求: 1.编写二叉树的各种操作函数,包括建立、初始化、添加、删除、查找等; 2.编写对二叉树进行三种遍历的函数; 3.编写8皇后的模拟计算程序。 (3选2) 三.实验重点: 二叉树的各种操作及遍历的函数。 四.实验难点: 二叉树的三种遍历函数的编写。 五.实验器材: 一个装有C语言编译环境的计算机。 六.实验步骤: 1.建立、初始化二叉树; struct tree //声明树的结构 { struct tree *left; int data; struct tree *right;};typedef struct tree treenode;typedef treenode *b_tree; //声明二叉树链表 //插入二叉树的节点 b_tree insert_node(b_tree root,int node){ b_tree newnode; b_tree currentnode; b_tree parentnode; newnode=(b_tree)malloc(sizeof(treenode)); //建立新节点的内存空间 newnode->data=node; newnode->right=NULL; newnode->left=NULL;if(root=NULL) return newnode; else { currentnode=root; while(currentnode!=NULL) { parentnode=currentnode; if(currentnode->data>node) currentnode=currentnode->left; else currentnode=currentnode->right; } if(parentnode->data>node) parentnode->left=newnode; else parentnode->right=newnode; return root;} } // 建立二叉树 b_tree create_btree(int *data,int len){ b_tree root=NULL; int i; for(i=0;i root=insert_node(root,data[i]);//调用insert_node函数,参数为空指针 //root和数组中元素data[i],//insert_node函数的返回值赋给 //create_btree函数中定义root,并作为 //create_btree函数的返回值返回 return root;//返回值为root } 2.编写对二叉树进行的各种操作的函数,包括、添加、删除、查找等; 3.编写对二叉树进行三种遍历的函数; //二叉树先序遍历 void preorder(b_tree point){ if(point!=NULL) { preorder(point->left);//递归 printf(“%d”,point->data); preorder(point->right);//递归 } } //二叉树中序遍历 void inorder(b_tree point){ if(point!=NULL) { inorder(point->left);//递归 printf(“%d”,point->data); inorder(point->right);//递归 } } //二叉树后序遍历 void postorder(b_tree point){ if(point!=NULL) { postorder(point->left);//递归 printf(“%d”,point->data); postorder(point->right);//递归 } } //主程序 void main(){ b_tree root=NULL; int index; int value; int nodelist[20]; printf(“n please input the elements of binary tree(exit for 0):n”); index=0; //读取数值存到数组中 scanf(“%d”,&value); while(value!=0) { nodelist[index]=value; index=index+1; scanf(“%d”,&value); } //建立二叉树 root=create_btree(nodelist,index);//主函数调用创建函数,参数为数组名和 //长度,创建函数的返回值(返回的本身 //是root)赋给主函数中定义root,并作//为参数传给inorder函数 //先序遍历二叉树 printf(“nThe preorder traversal result is :”); preorder(root);//主函数调用inorder函数 printf(“n”);//中序遍历二叉树 printf(“nThe inorder traversal result is :”); inorder(root);//主函数调用inorder函数 printf(“n”);//后序遍历二叉树 printf(“nThe postorder traversal result is :”); postorder(root);//主函数调用inorder函数 printf(“n”);} 4.编写8皇后的模拟计算程序。实验五:图 实验学时:2学时 一.实验目的: 1.掌握图的存储结构; 2.掌握在图上进行的各种操作。 二.实验内容与基本要求: 1.编写图的各种操作函数,包括建立、初始化、添加、删除、查找等; 2.编写建立最小生成树的程序; 3.编写计算两点间最短路径的程序。(3选2) 三.实验重点: 掌握图的存储结构 四.实验难点: 编写计算两点间最短路径的程序 五.实验器材: 一个装有C语言编译环境的计算机。 六.实验步骤 计算两点间最短路径: 1.义头文件等 #include #define max 10000//设定一个极大值 2.编写主函数 void main(){ int D[vex][vex][vex];//定义一个三维数组,用来一次一次的迭代,按 //FLOYD算法求出结点之间的最短路径 int arcs[vex][vex]={0,4,11,6,0,2,3,max,0};//邻接矩阵 int i,j,k; for(i=0;i //空间进行初始化 for(k=0;k for(i=0;i for(j=0;j if(D[k-1][i][j] D[k][i][j]=D[k-1][i][j];else D[k][i][j]=D[k-1][i][k]+D[k-1][k][j];//求出每次迭代最小 //值,最后一次即为两个顶点之间的最短路径 printf(“图的邻接矩阵为:n”);for(i=0;i for(j=0;j { printf(“%d ”,arcs[i][j]); } printf(“nn”); }//打印邻接矩阵 printf(“n”); printf(“表示各点间最短路径的矩阵为:n”); for(i=0;i { for(j=0;j { printf(“%d ”,D[vex-1][i][j]); } printf(“nn”); } } 实验六:排序 实验学时:2学时 一.实验目的: 1.掌握二叉查找树的性质及其相关的应用; 2.掌握插入排序、快速排序、选择排序、归并排序、基数排序的算法实现。 二.实验内容与基本要求: 1.编写二叉查找树的生成及应用程序; 2.编写插入排序、快速排序、选择排序、归并排序、基数排序的程序。 三.实验重点: 掌握各种排序算法的思想 四.实验器材: 一个装有C语言编译环境的计算机。 五.实验步骤 插入排序: #includedata){ h>next=h1; h=h>next;
第四篇:电工学实验课教案
第五篇:数据结构实验课教案