《程序设计方法学》实验指导书.docx

上传人:李司机 文档编号:4380198 上传时间:2023-04-20 格式:DOCX 页数:53 大小:1.29MB
返回 下载 相关 举报
《程序设计方法学》实验指导书.docx_第1页
第1页 / 共53页
《程序设计方法学》实验指导书.docx_第2页
第2页 / 共53页
《程序设计方法学》实验指导书.docx_第3页
第3页 / 共53页
《程序设计方法学》实验指导书.docx_第4页
第4页 / 共53页
《程序设计方法学》实验指导书.docx_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《《程序设计方法学》实验指导书.docx》由会员分享,可在线阅读,更多相关《《程序设计方法学》实验指导书.docx(53页珍藏版)》请在三一办公上搜索。

1、程序设计方法学实验指导桂林理工大学“程序设计方法学”课程组编2017年8月实验一、分支和循环结构的简单程序设计2实验二、三递归算法、迭代算法及其比较3实验四、数组与栈的基本操作4实验五、归并排序与折半查找6附录A:RaPtor可视化程序设计概述71.RaPtOr是什么?72 .为什么要使用RaPtOr进行程序设计?73 .Raptor的安装84 .几个简单的Raptor程序8实例1.输出字符串aHe1.1.owor1.d!w8实例2:求两个整数中的较大值13实例3:求1+2+3+.+10的和22实验一、分支和循环结构的简单程序设计1.实验目的(1)熟悉可视化计算工具RaPIOr环境。(2)掌握

2、具有选择、循环语句的简单程序设计方法。(3)掌握基于可视化计算工具RaPtor的“子过程(子函数)”的使用方法。2 .实验准备(1)认真阅读本实验指导书“可视化计算工具RaPtOr概述”部分的内容,以及教材第2章的内容,了解第四章“算法”的基础知识。(2)熟悉可视化计算工具Raptor的使用。3 .实验内容使用RaPtor可视化计算工具,实现顺序、选择、循环3种程序结构的简单设计。(1)顺序结构程序设计:设计一个RaPsr程序,计算并输出两个正整数a和b的和,a和b的值由用户输入。(2)选择结构程序设计:设计一个RaP1.Or程序,计算两个整数a和b的最大值并输出,其中a和b的值由用户输入。(

3、3)循环结构程序设计:使用循环结构,设计一个Raptor程序,计算并输出1+2+3+100的的结果。(4)三个数最大值的判定:设计一个RaPtOr程序,输入三个数a、b和c,求最大值并输出。(5)编写Raptor迭代程序求n!。4 .实验步骤学生在实验老师的指导下自主完成,并提交实验报告。实验二、三递归算法、迭代算法及其比较1.实验目的(1)进一步熟悉可视化计算工具RaPtor环境;(2)掌握使用可视化计算工具Raptor编写递归及迭代程序的基本方法;(3)能够使用RaPtor工具对算法的复杂性进行简单分析。2 .实验准备(1)认真阅读木实验指导书“可视化计算工具Raptor概述”部分的内容,

4、以及教材第4章有关“算法”部分的内容;(2)进一步熟悉可视化计算工具RaPtor的使用。*3 .实验内容(1)设计raptor程序,输出右图金字塔图形:要求从键盘上可以输入任意金字塔层数。(2)用递归方式编写RaPtOr程序计算n!,对比实验-中的迭代求解方式,给出对比结果。(3)使用RaPtor可视化计算工具,编写梵天塔程序,包含主程序和子程序。(4)使用RaP1.Or可视化计算工具,编写并比较斐波那契数列(兔子问题)的递归和迭代算法。提示:Raptor有一个重要功能,它能计算对计算时间有消耗的基本符号的执行次数。在RaPtOr程序的运行结果中,它会统计出含有表达式的语句的执行次数。如图3.

5、1所示。;彳领台11旦g图3.1某个RaPtOr程序的运行结果从上图中可以看到结果中显示:“完成.运算次数为98”,这就是说执行了98次含有表达式的语句,含有表达式的语句的计算次数与程序的运行时间是成正比的,因此可以根据Raptor的统计结果分析程序的运行时间。采用上述方法,比较你所设计的求斐波那契数列的迭代和递归算法的运行时间,分析为什么会出现这样的结果?4 .实验步骤学生在实验老师的指导下自主完成,并提交实验报告。实验四、数组与栈的基本操作1.实验目的(1)掌握使用可视化计算工具Raptor创建一维数组和二维数组的方法。(2)理解数组“越界”的概念。(3)掌握顺序遍历一维、二维数组的基本方

6、法。(4)掌握查找有序一维、二维数组某个元素的基本方法。(5)能够使用算法复杂度的概念对求解同一类问题的不同算法进行评估。(6)掌握栈的基本概念。(7)掌握栈的PUSh和PoP操作,并能够使用数组模拟栈的操作。2 .实验准备(1)认真阅读“附录ARaPtOr可视化程序设计概述”的内容。(2)查找RaPtOr帮助文档,了解子图的使用方法.(3)阅读第4.2节内容。(4)阅读本教材第4.3节内容。(5)复习本教材第9.5节的内容。3 .实验内容(1)字符数组中单空格替换为双空格设计一个程序,完成以下功能。功能1:创建一个一维数组,数组内容如下:123456789IamT0m功能2:设计一个算法将单

7、个空格替换为双空格,即将数组拓展为12345678910HIamT0in.(2)二维数组中元素的查找设计一个程序,完成以下功能。功能1:创建一个长度为4行5列的二维数组,数组内容如图4.1所示。13479245810568111279131516图4.1数组元素功能2:设计一个算法,在数组中查找数值为8的元素,并输出其下标(行数和列数)。(3)假设表达式中允许包含3种括号:圆括号、方括号和大括号,这3种括号可以以任意的顺序嵌套,最里层的括号中可以加入字符,如(a+b)、a+b+c等是正确的格式,而a+b)、a-b等均为不正确的格式,也就是说处于同一层次的括号要相互匹配。设计一个程序,利用栈来判

8、断输入的表达式是否为正确的格式。4 .实验步骤学生在实验老师的指导下自主完成,并提交实验报告。实验五、归并排序与折半查找1.实验目的(1)熟练掌握二路归并排序算法。(2)熟练掌握折半查找算法。2 .实验准备(1)复习第9.4节、第9.5节的内容。(2)阅读第4.2.6节内容。3 .实验内容(1)子数组的合并算法。(2)二路归并排序。(3)折半查找。(4)背包问题。4 .实验步骤学生在实验老师的指导下自主完成,并提交实验报告。附录A:RaPtor可视化程序设计概述1 .Raptor是什么?Raptor(theRapidA1.gorithmicPrototypingToo1.forOrderedR

9、easoning用于有序推理的快速算法原型工具)是一种基于流程图的编程开发环境。流程图是系列的可连接的图形符号的集合,每一种符号代表一个可被执行的特定类型的指令,符号之间的连接决定指令的执行顺序。当你使用RaPur解决问题的时候,这些概念会越来越清晰。RaPtOr是由美国空军学院的MartinC.CarIiSIC博士带头开发的,其他的设计人员包括TerryA.Wi1.sonJeffreyW.HumphriesIUSStevenMHadfie1.d等,MartinC.Car1.is1.e博士目前为美国空军学院计算机科学系的一名教授。Raptor最初是为美国空军学院计算机科学系设计的,但是它的使用

10、已经得到了广泛的普及,目前该软件至少被17个不同国家用于计算机教学。Dr.MartinC.Car1.is1.e2 .为什么要使用Raptor进行程序设计?佐治亚理工学院(GeorgiaInstituteofTechno1.ogy)计算机学院的ShaCkeIfOrd和1.eB1.anc教授曾经注意到这样一个现象,在“计算概论”课程中使用一种特定的编程语言容易干扰并分散学生对于算法问题求解核心部分的注意力。教师都希望把时间用在他们认为学生最可能遇到困难的问题上,因此他们往往把授课的重点集中在语法上,这是他们希望学生能够克服的困难。(例如:在C语言环境中,错误的将关系运算符“=”当成了赋值符号“=或

11、者在语句结束时忘记了加分号等)。此外,北卡罗来纳大学的费尔德(Fe1.der)教授认为,大多数学生是视觉化的学习者,而教师们则往往倾向于提供口头讲授。据研究发现,大约有75%到83%的学生为可视化的学习者。因此对大多数初学者来说,传统的编程语言或伪代码由于具有高度的文本化而非可视化的性质,从而无法为他们提供直觉的算法表达框架。Raptor是被专门设计用于应对语法困难以及非视觉环境的缺陷的,Raptor允许学生通过连接基本的图形符号来创建算法,在RaPtOr环境中执行算法,还可以观察算法的步步的执行过程。通过RaPtor环境,可以观察到当前的程序执行到了哪个部分,可以看到所有的变量当前的内容。此

12、外,RaPIor还提供了一个基于AdaGraPh的简单的图形库,学生通过该图形库,不仅可以将算法视觉化,而且也可以将他们要解决的问题视觉化。MartinC.Car1.is1.e教授曾为美国空军学院的学生讲授“计算概论”课程,在该课程中有12个小时的算法方面的课程,一开始的时候,这一部分是使用Ada95和Mat1.ab进行讲授的。从2003年夏季开始,他们改用了Raptor讲授这一部分课程。在最后的结课考试中,他们追踪了需要学生设计算法来解决的三个问题,学生可以使用任何方式来表达他们的算法(Ada,Mat1.ab,流程图等等)。在这样的前提下,他们发现学生们更喜欢使用可视化的描述,而且那些学习过

13、使用Raptor进行算法设计的学生在考试中发挥的更加出色。使用Raptor进行程序设计主要基于以下几个原因:(1) RaPtOr开发环境可以最大限度地减少编写出正确的程序所需要的语法要求。(2) Raptor开发环境是可视化的。Raptor程序是一种一次执行一个图形符号的有向图,因此它可以帮助用户跟踪RAPTOR程序的指令流执行过程。(3) RaPtor是为了便于使用而设计的(相对于其他的免杂的开发环境,RaPtor开发环境非常简单,(4)对于初学者来说,使用RaP1.Or进行程序设计出现的调试和报错消息更易于理解。(5)使用Raptor的目的是进行算法设计和运行验证,这个目标不要求你了解像C

14、+或JAVA这样重量级的编程语言。3 .Raptor的安装可以在Raptor官方网站ht:/raptor.naUincar1.is1.e.COm/下载RaPtOr的安装文件,该网站上有几个不同的安装版本,推荐使用最新的安装版本,只需点击“Down1.oad1.atestVerSion”即可。该网站上还有一个便携版本,这个版本可以安装在U盘上使用。安装过程非常简单,只需双击安装文件,按照提示进行操作即可。4 .几个简单的Raptor程序下面介绍3个简单的Raptor程序实例,目的是通过这些实例使同学们对RaPtOr程序设计有一个基本的认识。实例1:输出字符串“He1.1.owor1.d!w打开R

15、aptor软件之后会弹出两个对话框,一个是Raptor的开始界面(如附图AT),另一个是用于显示Raptor程序输出结果的界面(如附图A-2):附图-1.Raptor的开始界面附图A-2显示Raptor程序输出结果界面附图A-I的左半部分是Raptor的六种基本符号:赋值(Assignment)、调用(Ca1.1)、输入(InPU。、输出(OUtPU。、选择(Se1.ection)和循环(1.OOP)O图的中间是主函数(main),它是程序执行的入口,框图start和框图end分别表示程序的开始和结束。在一个简单的He1.1.o,wor1.d!,程序中,涉及到两个基本符号,即赋值(ASSign

16、ment)和输出(OUtPUt)(当然也可以只用输出(OUtPUt)符号,这里是为了了解这两种基本符号)。输出“He1.1.o,Wor1.d!,字符串,基本思路是先将该字符串存储在某个地方,然后对其进行输出。如何存储该字符串呢?这里就需要用到赋值符号。附图A-3是插入赋值符号后的效果。附图A-3插入赋值符号在附图A-2中,只需单击左半部分的Assignment符号框,然后将其拖动到start与end之间即可。接下来是将字符串“He1.1.o,Wor1.d!”赋值给某个变量的过程。当双击赋值符号框之后,会弹出如附图A-4的对话框,该对话框是赋值语句对话框,可以通过它将“He1.1.o,Wor1.

17、d!字符串赋值给某个变量(该字符串被存储在内存中的某个空间内,可以通过该变量来访问这段内存空间)。在“set”后面的文本框中输入变量的名称,可以用它来访问字符串“He1.1.o,Wor1.d!”,在“t。”后面的文本框中输入想要存储的值,即He1.1.o,Wor1.d!”,然后单击“done”即可。这里要注意一点,输入的字符串需要加双引号,效果如附图A-5所示。附图A-4赋值语句对话框接下来就可以完成对字符串进行输出了,为了进行输出,需要OUtPUt符号框,与对ASSignment符号框的操作样,可以采用同样的方式将OUtPUt符号框拖动到Assignment符号框与end之间,效果如附图A-

18、6所示。附图-6加入Output符号框因为要输出的是“He1.1.o,WorId!”,而“He1.1.o,Wor1.d!,已赋值给了变量s,因此只需输出S即可,在输出语句对话框的空白处输入s,单击“done”按钮,得到的完整的R叩tor程序如附图A-8所示。附图A-8完整的Raptor程序设计好了完整的Raptor程序之后,接下来就可以运行程序了,可以通过两种方式运行Raptor程序。种是点击图7中红色箭头所指的图标;另种方式是单击RUn下拉菜单下的EXeCUtetocomp1.etion选项即可,在程序运行之后会在程序输出对话框中显示程序运行结果,如图9所示。附图A-9程序的运行结果正如附图

19、A-9显示的那样,程序输出了我们想要的结果。“Runcomp1.ete提示程序成功的得到了执行,若程序执行失败,会提示“Error。后面的4symbo1.seva1.uated表示的是程序中表达式语句的执行次数。根据RaPtOr的这一功能,我们可以粗略的分析算法的复杂度。选择开始界面中的Fi1.e选项,选择下拉菜单中的save按钮,对Raptor文件进行保存,Raptor文件的后缀名是.rap。而“Saveas”选项允许用户将Raptor文件以指定的名称保存到指定的位置。实例2:求两个整数中的较大值在第一个例子中介绍了一个简单的输出程序,其中包括赋值(ASSignment)与输出(OUtPUt

20、)符号框,接下来介绍一个求两个整数的较大值的程序,该程序包含更多的符号框。若求两个数a和b的较大值,与第1个例子中直接使用赋值符号不同,此处使用输入符号框(InPUt),在使用输入符号框的情况下,在程序执行到输入符号框时,用户输入的值即为变量的值。插入输入符号框的结果如附图A-10。附图ATO插入a和b的输入符号框双击输入符号框(InPUt),会弹出如附图AJ1.所示的窗口,其中在EnterPrompthere”部分要求我们输入提示文本,也就是对将要输入的变量进行说明,比如变量类型、范围等等,uEnterVariab1.ehere,部分要求输入变量名,该变量用于存储我们输入的变量值。此处要输入

21、的是个整数,因此在提示文本部分可以输入P1.easeenterava1.ueforvariab1.ea:,用a来存储待输入的变量值,因此在下半部分的文本框中输入a;对变量b进行相同的操作,并点击done按钮,得到的结果如附图A-12所示。附图A-I1.为输入符号框输入提示文本和变量名附图AT2定义输入符号框接下来使用一种新的符号框一调用(Ca1.D,通过该符号框可以调用一个能够完成特定功能的子过程,该子过程也被称为子函数。加入调用符号框之后,结果如附图A-13所示。附图AT3插入调用符号框插入调用符号框是为了调用一个子过程,在调用该子过程之前需要先定义它,可以要求该子过程能够完成两个整数的比较

22、,并返回比较的结果。定义子过程的方法如下,首先右击main(如附图A-13的红色箭头所示),在弹出的选项中选择AddProcedure,弹出的对话框如附图A-14所示。若子过程取名为compare,即在ProcedureName下面的文本框中输入compare,compare需要参数,参数既是要进行处理的数据,也就是要进行比较的数值,Parameter1.ParameterG代表参数,参数分为两种类型:输入类型(inpu1.)和输出类型(output),可以通过在参数后边的框中进行选择相应的类型。在ConIPare子过程中,可以设置三个参数r,a和b(此处参数名称可以选择用其他的合法字符表示,

23、不仅限于r,a,b)o将第一个参数设置为输出(output)类型,用于保存比较后所得到的结果,剩下的两个参数为输入(input)类型,用于保存将要进行比较的数值。结果如附图A-15所示。CreateProcedureNamesmnst.begixtwithIet.coxtt.a.ixiOrj1.y1.etters,TVUJnba=Sand.,undercor,e.Examp1.es:Daw_BoxesFixtd_SmdueNarneIcompaz*eParameter1(orb1.ank)-Input(5Output归Parameter2(orb1.ank)V工GPUt-OutputIa.Pa

24、ra-eter3(orb1.ank)V工GPUt-Outputb-Parameter4(orb1.ank)VTpxt.-OutputParameter5(orb1.ank)VInpxt.Ontpvit.Parameter6(orb1.ank)57工GPUtOutputOkICaxice1.N附图-15定义子过程的名称和参数点击。k按钮,可以得到如附图A-16所示的子过程。附图AT6子过程接下来需要对该子过程进行定义,此处需要选择(Se1.eCtiOn)符号,因为进行的是比较,需要根据不同的情况进行转移(比如,若ab,下一步该如何操作?,ab又该如何操作?)。两个数a、b进行大小比较的时候可以分

25、为两种情况,第一种是ab,在这种情况下,较大值为a。单击选择(SeIeCtion)符号框,将其拖动到Start之后,双击SeIeCtion中的菱形,弹出附图A-I8的输入选择条件对话框,在该对话框中,需要输入分支条件,在此输入ab(当然也可以输入av=b,不同的选择对应的分支不同),点击“done”按钮,结果如附图A-19所示。附图A-18输入选择条件对话框彳Raptor - compare.rap=I回附图AT9输入分支条件在附图A-19中,当ab成立时,也就是对应左分支(Yes),此时较大值为a,用r保存结果,因此要插入赋值符号框并将a赋值给r;当ab不成立时,也就是右分支(NO),此时也

26、要插入赋值符号框将b赋值给ro单击赋值(ASSignnICnt)符号框,将其拖动到Yes和No对应箭头的下方,并进行赋值,结果如附图A-20所示。附图A-20分支选择后的结果定义好“子过程”,接下来通过调用(Ca1.1.)符号框来调用该子过程,单击附图AT3中的调用符号框,会弹出附图A-21中的对话框。EnterCaIII回1.1.附图A-21输入调用的子过程对话框在附图A-21中要求输入需要调用的子过程,要调用的是己经定义过的COmPare子过程,可以在图中看到提示,最开始的部分是子过程的名称(如OpenGraphWindOw),括号里边的内容是子过程的参数,这里要注意的一点是参数匹配,这里

27、所说的匹配包括参数个数、参数顺序和参数类型。输入ComPare(m,a,b),点击done按钮得到的结果如附图A-22所示。r彳Raptor-compare.rap附图A-22调用子过程在ComPare(m,a,b)中,m对应的是子过程中的r,而r是用来存储输出的结果的,在调用子过程结束时,会将r的值传递给mt,最后定义一个名为resu1.t的变量来存储最终的结果并将其输出,因此需要插入赋值符号,并将m的值赋给resu1.t并输出resu1.t,这也就是我们最终要得到的完整Raptor程序,结果如附图A-23所示。附图A-13完整的程序点击运行程序按钮,当程序执行到第一个输入符号框时,会弹出如

28、附图A-24所示的输入变量对话框,这里要求我们输入a的数值(可以输入一个整数,比如8),输入数值后,点击OK按钮,程序会继续向下执行(后边会遇到要求我们为b输入数值)。观察程序的运行过程,可以看到对子过程的调用。最终的运行结果如附图A-25所示。附图A-24为变量输入数值MasterConsoIeFontFontSizeEditHe1.p-Runcomp1.ete.11symbo1.seva1.uated.附图A-25变量a为8,变量b为12时程序的运行结果实例3:求1+2+3+.+10的和在上面的两个简单的例子中,介绍了基本的输入输出符号以及分支符号,在本例中引入另一种重要的符号,即循环符号

29、。首先在程序中加入三个变量i,j和sum,用sum表示最终求得的结果;i即为当前进行累加的值,又是当前统计的累加的变量个数,因此i的初始值为1;j为变量的总数,因为木例中一共有10个变量,因此j的值为10。具体的操作在前面的两个例子中都有过详细的说明,此处不再赘述。结果见附图A-26附图A-26给三个变量赋值接下来是程序中最重要的部分,也就是引入循环符号。循环符号需要一个判断条件,利用该条件是否成立来判断要循环是否继续。在该例中要计算10个数的累加,因此当i的值大于10时循环即结束。否则继续执行累加。单击循环(1.OoP)符号将其拖入sum赋值符号的下方,结果如附图A-27所示。附图A-27加

30、入循环符号双击循环符号的菱形部分,会弹出如附图A-28的对话框,该对话框要求输入循环是否继续进行的条件,由于此处做的是对10个数进行累加,因此可以输入ij(i的初始值为1,j的初始值为10)。当ij,即i10时,说明已经累加了十个数,循环结束。附图A-28输入循环结束条件当ij时,说明已经进行了10次累加,循环结束,并输出计算结果;如果i2-1.-5-80(89)?123165518280210192附图C-5数字三角形案例3问题分析贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解。贪心算法不

31、是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。贪心算法是通过做一系列的选择来给出某一问题的最优解。对算法中的每一个决策点,做一个当时(看起来是)最佳的选择,然后再解决抉择之后所出现的子问题。贪心算法所做的当前选择可能要依赖于己经做出的所有选择,但不依赖于有待于做出的选择或子问题的解,因此贪心策略通常是自顶向下的一个一个的做出贪心选择,不断地将给定的问题实例规约为更小的问题。在本例的数值三角形中,从顶层开始,当向第二层行走时,依据贪心策略选择一个可以走得通的权值最大的点;在此基础上,在向第三层行走时,还是遵循同样的原则选择一个权值最大的点,

32、依次类推直到走到最底层结束。4设计Raptor程序首先将数字三角形的节点信息存储到一个文本文件中,之后在程序运行时将文本文件中的信息读取到一个二维数组中。创建的文本文件如附图C-6所示。文本文件中的第一个数据(5)表示当前数字三角形中的数据行数。tri-data.txt-记事本1=I回文件(F)例(E)格式(O)查看(V)帮助(ST-OO 95123165518282112附图C-6存储节点信息的文本文件然后设计主函数,设计主函数的思路如下:读取节点信息(将文本文件中的数据读取到一个二维数组中);使用贪婪算法找出权值之和最大的路径;最后输出结果。主函数如附图C-7所示。注意,在此处是为了便于理

33、解,所以先设计主函数(程序的设计思路也是如此)。在设计Raptor程序的实际过程中,必须要先设计好子函数或子图(如input,greedy等)后,主函数才能对其进行调用;否则,RaPtor会提示错误。附图C-7主函数接下来设计input子图(完成文件读取的是子图,不是子过程。右击main,在弹出的选项中,选择AddSUbChart)。子图(subchart)专门用于读入数据文件,没有任何参数,也无需参数列表;子过程(ProCedUrC)相当于一般高级程序设计语言中的函数,需要参数列表,尽管有时参数列表中的参数为空。该子图完成的功能是从文本文件中将数据读入到一个二维数组。可以用Raptor内置的

34、RCdireCJ1.nput函数完成此功能。该过程如附图C-8所示。RedirecteInpu1.fti- dattxf,)B读取iE文件中的第-个数据,也就是二维数组的行将二维数组中的元素、的值均初始化为。i用用输入重定向函数,将文件tridAtatxt)中的数据读入到一个二维数组中附图C-8从文件中读入数据到二维数组将数据读入文件之后,就可以用贪婪算法来寻找权值最大的路径了。由上面的分析可知,从顶层开始,也就是从节点1开始,接下来有两条路径供选择,分别是2和3,比较两者的大小,32,因此下一条路径选择3,并与当前的权值累加。这时,也要对列数进行累加,因为权值为3的节点与顶层节点所处的列是不

35、同的,当再次向下行走时要从权值为3的节点开始(注意此处所说的列指的是二维数组中的列)。这个过程要一直要持续到读完二维数组中所有的数据。该子程序如图1-9所示。附图C-9贪婪算法找权值最大的路径变量X用于存储最终的结果,最后输出X即可。程序的运行结果如附图CTO所示。根据贪婪算法的策略,最大权值路径应为1-3-6-8-19,最终的权值是37,这与程序的运行结果相符。第4章学科中的核心概念实验4.1求最大公因子1实验目的与要求(1)深入理解算法的概念及其在计算学科中的重要性。(2)掌握算法具有的特性。(3)设计RaPtOr程序求解两个整数的最大公因子。2实验题目设m=56,n=32,求m、n的最大

36、公因子。3问题分析给定两个正整数In和n,求它们的最大公因子,即能同时整除m和n的最大正整数,可以按照如下步骤求解该问题:(1)以n除m,并令所得余数为r(r必小于n)。(2)若r=0,算法结束,输出结果n;否则,继续步骤(3)。(3)将n置换为m,r置换为n,并返回步骤(1)继续进行。按照以上的步骤对应到该实验中,求解过程如下:(1)32除56得余数为24O(2)24除32余数为8。(3)8除24余数为0,算法结束,输出结果8。4设计RaPtor程序由以上的分析可知,求解该问题的RaPtor程序需要一个循环结构,该循环结构结束的条件是n除m所得的余数为OoRaptor程序如附图C-I1.所示

37、,程序运行结果如附图C-12所示。在该程序中需要注意一点,在判断出n除m的余数不等于O时,要先将m的值存储起来,即将m赋值给X。之所以这样做是因为之后m的值变成了n,因此要保持m不变,必须将m先存储起来。实验4.2求解算术级数的和.1实验目的与要求(1) .掌握程序设计中的基本结构一一循环结构。(2) .掌握算法具有的特性。(3) .设计Raptor程序求解算术级数的和。2实验题目求1+2+3+IOO03问题分析可以采用以下的步骤解决该问题:将1赋值给X。将2赋值给Y。(3)将X与Y相加,结果存放在X中。(4)将Y加1,结果存放在Y中。(5)若Y小于或等于100,转到步骤(3)继续执行;否则算

38、法结束,结果为X。4设计RaPtor程序由问题分析可知,设计解决该问题的Raptor程序是非常简单的,只需注意在步骤(5)中,需要判断Y的值,如果Y的值小于等于100,则转到步骤(3)继续执行,也就是说,会循环的执行一步,一直到Y的值大于100。此处需要RaPtor中的循环结构。Main程序如附图C-13所示。程序的运行结果如附图C-14所示。实验4.3求调和级数HnHn=1.1.+1.21.3+.+1.n1实验目的与要求(4) .掌握算法具有的特性。(5) .设计RaPtOr程序求解调和级数,加深对程序设计中循环结构的认识。2实验题目求解Hn=1.1.+12+13.+1.n3问题分析设变量S

39、表示求解后的结果,变量i表示所需的循环次数,解决问题的步骤如下:(1) .将S的值设置为0,因为S用于存储累加和,因此初始值为0。(2) .将1赋值给io.将S与1/i相加,将相加后的结果存入S中。(4) .将i加1。(5) .如果i大于n,算法结束,Hn的值为S;否则跳转到步骤(3)处继续执行。4设计Raptor程序在步骤(5)中,需要RaPtor中的循环结构,循环条件是i小于等于n;n的值需要由用户指定,因此需要加入输入符号,以供在程序运行时,由用户输入所需要的值。主程序main如附图C-15所示;当输入n的值为5时,程序的运行结果如附图C-16所示。附图C75main主程序附图C76n=5时,程序的运行结果实验4.4求解斐波那契数I实验目的与要求(1) .认识到递归方法在程序设计中的重要性。(2) .设计RaPtOr程序求解斐波那契数列,进一步理解递归思想。2实验题目用递归方法求解斐波那契数列。斐波那契数列的形式化定义如下:Fo=O,F=1.,Fn=Fn-1+Fn-2,n23问题分析使用递归方法求解该问题的方法如下

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号