如何设计第一个程序.ppt

上传人:tia****nde 文档编号:12667825 上传时间:2020-05-13 格式:PPT 页数:24 大小:270.81KB
返回 下载 相关 举报
如何设计第一个程序.ppt_第1页
第1页 / 共24页
如何设计第一个程序.ppt_第2页
第2页 / 共24页
如何设计第一个程序.ppt_第3页
第3页 / 共24页
点击查看更多>>
资源描述
如何设计第一个程序,测绘遥感信息工程国家重点实验室,目前你已经学习了一些编程基础,让我们来进一步看看如何设计一个具体的程序。当你坐下准备写一个程序,通常你对于想解决的问题,或者想模拟的情况多少有一些想法。新手程序员经常感到在解决如何把想法变换成实际代码的问题上存在困难。但结果却是,你已经从日常学习生活中获得了很多你所需要的解决问题的技术。,请记住最重要的事情是要在你开始编写代码之前设计好你的程序,而这也是最困难的。在很多注意中,编程就像是盖房子。如果你在没有建筑设计平面图的情况下试图建造一个房子,那会发生什么?除非你是个天才,否则你会得到一所问题重重的房子:漏水的屋顶,凹凸不平的墙壁等等同样的,如果你在设计好计划之前就开始编写程序,你会发现你所编写的代码有很多问题,你必须花费很多时间来修改问题,这本来是可以通过提前设计避免的。一个预先的计划会长远的节约你的时间,避免挫折。,第一步:明确问题,首先你要明确你的程序要解决什么问题。理论上,你应该能够用一两句话进行描述。例如:我想写一个电话簿记录我的朋友的电话号码。我想写一个能随机地下发生器,它可以产生看起来有趣的洞穴。我想写一个程序,可以提供股票信息以及预测我该买那些股票。尽管这一步似乎显而易见,但它还是十分重要的。你能做到的最坏的情况就是写一个实际上不是你或你的老板想要的程序!,第二步:明确你的目标,当你是一个富有经验的程序员时,在此时会有很多其他典型的步骤,其中包括:了解你的目标使用者是谁定义目标架构和/或你的程序涉及的操作系统确定你将用到的所有工具确定你是独自编写程序还是作为团队中的一员收集需求(一个关于程序要做什么的文件记录列表)然而,作为一个新手程序员,这些问题的答案是简单的:你是在为你自己写一个程序,独自的,用你自己的方法,利用你购买或下载的集成开发环境。这使得情况变得简单,所以我们不会在这一步花费时间。,第三步:将任务分出层次,在现实生活中,我们经常需要完成十分复杂的任务。尝试去解决如何做这些任务是很有挑战性的。在这种情况下,我们经常使用自顶向下的方法来解决问题。也就是说,我们不是解决一个单一的复杂的任务,而是将任务分解成多个更容易解决的子任务。如果这些子任务仍然很难解决,则可以进一步分解。通过不断的将复杂的任务分解成简单的任务,最终你可以得到的每一个单独的任务都是容易进行的。,让我们来看一个关于这一点的例子。我们想写一个关于胡萝卜的报告。当前的任务层次是这样的:。写关于胡萝卜的报告一次性写一个关于胡萝卜的报告是一个很难的任务,所以我们把它分解成子任务:。写报告。做调查。写概述。填写关于胡萝卜的细节,我们现在有三个可以分别集中研究的任务,这是很容易办到的。然而,在这种情况下,做关于胡萝卜的研究是模糊不清的,所以我们可以进一步分解:。写关于胡萝卜的报告。做关于胡萝卜的调查。去图书馆找有关于胡萝卜的书。在网上搜索有关于胡萝卜的信息。写概述。关于生长的信息。关于加工的信息。关于营养的信息。填写关于胡萝卜的细节,现在我们有了一个任务的层次,每个子任务都不是特别困难。通过完成每个相对容易做的子项目,我们可以完成关于写一个胡萝卜报告的更困难的全部任务。创造任务层次的另一种方法是自底向上的方法。在这种方法中,我们从一个简单任务的列表开始,通过将它们分组来构造层次。,举个例子,很多人必须在工作日上班或者上学,所以我们想解决“从起床到上班”的问题。如果问早上从起床到上班你要做什么任务,你也许会想到如下的列表:。挑选衣服。穿衣服。吃早饭。开车去工作。刷牙。起床。准备早饭。进入车里。洗淋浴,使用自底向上的方法,我们可以通过寻找相似点把项目组织起来的方法,将这些整理成一个项目层次:。从起床到上班。卧室的事情。起床。挑选衣服。浴室的事情。洗淋浴。刷牙。早餐。准备早餐。吃早餐。交通的事情。进入车里。开车去工作,结果表明,这些任务层次对程序设计非常有用,因为一旦你有了一个任务层次,你就基本明确了整个程序的结构。最高级别的任务(在本例中,“写一个关于胡萝卜的报告”或者“从起床到上班”)成为main()(因为它是你要解决的主要项目)。子项目成为程序中的函数。如果其中一个项目(或函数)太难实现,仅仅是把这个项目分解成多个子项目,再函数调用多个子项目来实现这些新任务。最终,你应该达到的目标是在你的程序中的每一个函数实现起来都是琐碎的。,第四步:确定项目的顺序,现在你的程序有了一个结构,然后就该确定如何将所有的任务联系在一起。第一步是确定项目的执行顺序。例如,当你早上起床,是什么决定了你做以上任务的顺序?顺序或许是这样的:。起床。挑选衣服。洗淋浴。穿衣服。准备早餐。吃早餐。刷牙。进入车里。开车去工作,现在你的程序有了一个结构,然后就该确定如何将所有的任务联系在一起。第一步是确定项目的执行顺序。例如,当你早上起床,是什么决定了你做以上任务的顺序?顺序或许是这样的:。起床。挑选衣服。洗淋浴。穿衣服。准备早餐。吃早餐。刷牙。进入车里。开车去工作,这个列表基本上定义了将要进入main()函数中的东西:01intmain()0203GetOutOfBed();04PickOutClothes();05TakeAShower();06GetDressed();07PrepareBreakfast();08EatBreakfast();09BrushTeeth();10GetInCar();11DriveToWork();12,或者在计算机的情况下:01intmain()0203/Getfirstnumberfromuser04GetUserInput();0506/Getmathematicaloperationfromuser07GetMathematicalOperation();0809/Getsecondnumberfromuser10GetUserInput();1112/Calculateresult13CalculateResult();1415/Printresult16PrintResult();17,第五步:确定每个任务的数据输入和输出,一旦你有了层次结构和项目顺序,下一件事就是确定每个任务需要操作的输入数据,以及他产生的数据(如果有的话)。如果你已经从以前的步骤得到输入数据,那么输入数据将会变成参数。如果你通过其它函数计算输出以供使用,那么通常输出会成为返回值。当做完这些,我们应该有了每个函数的原型。假如你忘记了,函数原型是一个函数的声明,它包括了函数名,参数和返回值,但是并不执行函数。让我们举一个例子。GetUserInput()是相当简单的。我们将要从用户那里得到一个数,然后返回调用程序。因此,函数原型就像这样:1intGetUserInput()在计算机例子中,CalculateResult()函数将会需要获得三块输出:两个数和一个数学运算符。当我们指出这个函数的位置时,我们应该已经有了这三项,所以这三块数据将会是函数参数。CalculateResult()函数会计算结果的值,但它不会显示结果本身。因此,我们需要将结果作为返回值返回以便其它函数使用。鉴于此,我们可以写一个函数原型,如下所示:1intCalculateResult(intnInput1,charchOperator,intnInput2);,第六步:写任务细节,在这一步里,对每一个任务,你要写它的具体实施。如果你已经把任务分解成为足够小的部分,每一个任务都应该相当简单明确。如果所给任务仍然过度复杂,可能它需要分解成子项目以便更加简单的实现。例如:01charGetMathematicalOperation()0203coutchOperation;0708/Whatiftheuserentersaninvalidcharacter?09/Wellignorethispossibilityfornow10returnchOperation;11,第七步:连接数据输入和输出,最后一步是将每个任务的输入和输出以适当的方式连接起来。例如,你会把CalculateResult()的输出发送到PrintResult()的输入中,所以它可以输出计算的结果。这通常包含存储临时结果的中间变量的使用,所以它可以在函数之间交换。例如:1/nResultisatemporaryvalueusedtotransfertheoutputofCalculateResult()2/intoaninputofPrintResult()3intnResult=CalculateResult(nInput1,chOperator,nInput2);4PrintResult(nResult);这与不使用时间变量的可选浓缩版本相比更倾向于可读性:1PrintResult(CalculateResult(nInput1,chOperator,nInput2);找到窍门对于一个新手程序员来讲是最困难的步骤。,编写程序时的一些建议,1.开始时要使你的程序保持简洁。新手程序员经常会关注所有他们想让程序实现的东西。“我想利用图形学写一个角色扮演游戏,以及音频、随机怪兽和地下城,附带一个可以访问并出售你在地下城找到的物品的城镇。”如果刚开始时你就试图编写过于复杂的东西,你会由于你的毫无进展而受到打击并感到气馁。相反的,让你的第一目标尽可能的简单,确定它在你所能达到的范围之内。例如,“我想能够在屏幕上显示二维表征的世界地图”。,2.随着时间增加特征。一旦你有一个简单程序并且运行良好,然后你就可以对它增加一些特征。例如,一旦你可以显示你的二维世界地图,那么就增加一个可以四处走动的人物。一旦你可以走动,增加一个可以阻碍你行动的墙壁。一旦你有了墙壁,在他们之外建立一个简单的城镇。一旦你有了一个城镇,增加商人。通过逐渐增加每一种特征,你的程序就会逐渐的变得更加复杂,并且在这个过程中没有东西能压倒你。3.分散在多个任务上。每次只集中于一个任务,使它尽可能的顺利实现。拥有一个充分的工作任务就更好了。如果你分散了你的注意力,你就更可能犯错误,并且忘记重要的细节。,4.随着你的进展测试每一段代码。新手程序员经常写完全部程序并且一次通过。然后当他们第一次编译时,编译器会报告几百个错误。这不只是吓人的,如果你的代码无法运行,要想出原因就可能十分困难。相反的,写一段代码,然后立即编译并检验。如果你的代码无法运行,你会准确地知道问题在哪里,并且容易修改。一旦你确定代码可以运行,转移到下一段并重复一遍。这样也许会花费你更多的时间编写代码,但是当你做完整个程序并可以运行时,你就不必花费两倍长的时间去解决为什么它不能运行。,大部分新手程序员会忽略这里提到的很多步骤和建议(因为它看起来有很多工作并且/或者它不像编写代码一样有趣)。然而,对于任何不平凡的工程,遵循这些步骤从长远角度来讲肯定可以节约你的很多时间。一点提前的计划可以节约很多最后调试的时间。好消息是一旦你适应了这些观点,你就可以很自然地甚至不需要思考的使用它们。最后你会达到一种境界,那就是不需要预先的计划就可以写出所有的功能。,谢谢观看!,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!