目录上一页下一页退出第二章程序设计基础思考题目录上一页下一页退出本章教学重点与要求1、熟练掌握结构化程序设计的原则和基本结构。2、熟练掌握简单程序的分析和流程图的绘制。3、正确理解面向对象方法的基本概念。目录上一页下一页退出举例本章要点源程序文档化数据说明的方法语句的结构输入和输出结构化程序设计的原则结构化程序的基本结构与特点结构化程序设计原则和方法的应用关于面向对象方法面向对象方法的基本概念目录上一页下一页退出要点举例一、源程序文档化源程序文档化应考虑如下几点。(1)符号名的命名(2)程序注释(3)视觉组织目录上一页下一页退出符号名的命名应具有一定的实际含义,做到见名知意,以便于对程序功能的理解。例:r代表半径sum代表求和area代表面积(1)符号名的命名目录上一页下一页退出正确的注释能够帮助读者理解程序。注释一般分为序言性注释和功能性注释。序言性注释:通常位于每个程序的开头部分,它给出程序的整体说明,主要描述内容可以包括:程序标题、程序功能说明、主要算法、接口说明、程序位置、开发简历、程序设计者、复审者、复审日期、修改日期等。功能性注释:一般潜入在源程序体之中,主要描述其后的语句或程序做什么。(2)程序注释目录上一页下一页退出为使程序的结构一目了然,可以在程序中利用空格、空行、缩进等技巧使程序层次清晰。例c语言中的一段程序:if(ab)printf(“%d”,a);elseprintf(“%d”,b);(3)视觉组织目录上一页下一页退出要点举例二、数据说明的方法在编写程序时,需要注意数据说明的风格,以便使程序中的数据说明更易于理解和维护。一般应注意如下几点。(1)数据说明的次序规范化。(2)说明语句中变量安排有序化。(3)使用注释来说明复杂数据的结构。目录上一页下一页退出要点举例三、语句的结构程序应该简单易懂,语句构造应该简单直接,不应该为提高效率而把语句复杂化。一般应注意如下:(1)在一行内只写一条语句;(2)程序编写应优先考虑清晰性;(3)除非对效率有特殊要求,程序编写要做到“清晰第一,效率第二”;(4)首先要保证程序正确,然后才要求提高速度;(5)避免使用临时变量而使程序的可读性下降;(6)避免不必要的转移;目录上一页下一页退出要点举例(7)尽可能使用库函数;(8)避免采用复杂的条件语句;(9)尽量减少使用“否定”条件的条件语句;(10)数据结构要有利于程序的简化;(11)要模块化,使模块功能尽可能单一化;(12)利用信息隐蔽,确保每一个模块的独立性;(13)从数据出发去构造程序;(14)不要修补不好的程序,要重新编写。目录上一页下一页退出四、输入和输出输入和输出信息是用户直接关心的,输入和输出方式和格式应尽可能方便用户的使用,因为系统能否被用户接受,往往取决于输入和输出的风格。在设计和编程时都应该考虑如下原则:(1)对所有的输入数据都要检验数据的合法性;(2)检查输入项的各种重要组合的合理性;(3)输入格式要简单,以使得输入的步骤和操作尽可能简单;(4)输入数据时,应允许使用自由格式;目录上一页下一页退出(5)应允许默认值;(6)输入一批数据时,最好使用输入结束标志;(7)在以交互式输入/输出方式进行输入时,要在屏幕上使用提示符明确提示输入的请求,同时在数据输入过程中和输入结束时,应在屏幕给出状态信息;(8)当程序设计语言对输入格式有严格要求时,应保持输入格式和输入语句的一致性;给所有的输出加注释,并设计输出报表格式。目录上一页下一页退出五、结构化程序设计的原则结构化程序设计方法的主要原则可以概括为:(1)自顶向下(2)逐步求精(3)模块化(4)限制使用goto语句目录上一页下一页退出自顶向下:程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。目录上一页下一页退出逐步求精:对复杂问题,应设计一些子目标作过渡,逐步细化。模块化:一个复杂问题,肯定是由若干个简单问题构成。模块化是把程序要解决的总目标分解为分目标,再进一步分解为具体的小目标,通常把每一个小目标称为一个模块。目录上一页下一页退出限制使用GOTO语句:①滥用GOTO语句确实有害,应尽量避免;②完全避免使用GOTO语句并非是个明智的选择,有些地方使用GOTO语句,会使程序流程更清楚、效率更高;目录上一页下一页退出六、结构化程序的基本结构与特点结构化程序设计包括:(1)顺序结构(2)选择结构(3)循环结构结构化程序设计优点:(1)程序易于理解、使用和维护。(2)提高了编程工作的效率,降低了软件开发成本。目录上一页下一页退出流程图是用一些图框来表示程序或算法的运行走向的一种图示。用图形表示算法或程序的走向,直观形象、容易理解。美国国家标准化协会(ANSI)规定了一些常用的流程图符号,已被程序工作者所普遍采用。目录上一页下一页退出常用流程图符号:起止框输入输出框判断框连接圈指向线处理框目录上一页下一页退出顺序结构是一种最基本、最常用的结构。顺序结构是顺序执行结构,所谓顺序执行,就是按照程序语句的自然顺序,一条语句一条语句地执行程序。AB目录上一页下一页退出例1:输入圆的半径求圆的周长和面积。【算法】:①初始化各量:使用输入语句输入圆半径存入r中,l用于存放圆的周长,s用于圆的面积。②计算圆的周长l=2*π*r,s=π*r*r。③输出信息:输出l和s的值。【分析】:本题要计算的是圆的面积和周长,其中已知圆的半径。这样,只要我们利用圆的周长和半径的公式就可以计算。开始输入r的值计算周长l的值计算面积s的值输入l、s的值结束目录上一页下一页退出选择结构又称为分支结构,它包括简单选择和多分支选择结构,这种结构可以根据设定的条件,判断应该选择哪一条分支来执行相应的语句序列。条件?AB目录上一页下一页退出例2:输入三角形的三条边,计算三角形的面积。【分析】:本题要计算的是三角形的面积,其中已知三角形的三条边。这样,只要我们计算周长的一半,然后利用海伦公式计算即可。此问题的关键在于判断输入的三条边能否够成三角形。【算法】:①初始化各量:使用输入语句输入三边分别存入a、b、c三边中,s用于存放周长的一半,area用于存放计算出的面积值。②判断三边能否够成三角形:如果同时满足a+bc、b+ca和a+cb三个条件,则转到③;否则转到④。③计算三角形的面积并输出:s=(a+b+c)/2,area=。④输出提示信息:三边不符合条件,不能计算三角形的面积。输出不符合条件输入a,b,c的值计算三角形面积,输出开始能否构成三角形结束目录上一页下一页退出循环结构是根据给定的条件,判断是否需要重复执行某一相同的或类似的程序段,利用循环结构可简化大量的程序行。在程序设计语言中,循环结构对应两类循环语句,对先判断后执行循环体的称为当型循环结构;对先执行循环体后判断的称为直到型循环结构,如下图所示。假真条件?语句组真假条件?语句组当型循环结构直到型循环结构目录上一页下一页退出例3:计算表达式1-1/2+1/3-1/4+…+1/99-1/100的值。【分析】:本题要计算的是100个分数的和,其中分子都是1,分母分别从1递增排到100,又奇数项的值为正,偶数项的值为负。这样,只要我们计算出每一项的值,然后进行累加即可。此问题的关键在于解决符号。【算法】:①初始化各量:n=1,用于循环计数,同时参与每一项的计算;s=0,用于累加计算出的各项,得到最终所求。②计算中间项:n为奇数,t=1/n;否则,t=-1/n。③累加各项:s=s+t。④重复②和③,直到n100,s即为所求和的值。目录上一页下一页退出开始结束n=1,s=0n%2!=0t=1/nt=-1/ns=s+t,n=n+1输出s真真假假n≤100目录上一页下一页退出七、结构化程序设计原则和方法的应用在结构化程序设计的具体实施中,要注意把握如下要素:(1)使用程序设计语言中的顺序、选择、循环等有限的控制结构表示程序的控制逻辑;(2)选用的控制结构只准许有一个入口和一个出口;(3)程序语句组成容易识别的块,每块只有一个入口和一个出口;(4)复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现;目录上一页下一页退出(5)语言中所没有的控制结构,应该采用前后一致的方法来模拟;(6)严格控制GOTO语句的使用,其意思是指,①用一个非结构化的程序设计语言去实现一个结构化的构造;②若不使用GOTO语句会使功能模糊;③在某种可以改善而不是损害程序可读性的情况下。目录上一页下一页退出八、关于面向对象方法面向对象的起源:面向对象的软件开发方法在20世纪60年代后期首次提出,以60年代末挪威奥斯陆大学和挪威计算中心共同研制的Simula语言为标志,面向对象方法的基本要点首次在Simula语言中得到了表达和实现。后来一些著名的面向对象语言(如Smalltalk、C++、Java、Eiffel)的设计者都曾从Simula得到启发。随着20世纪80年代美国加州的Xerox研究中心推出Smalltalk语言和环境,使面向对象程序设计方法得到比较完善的实现。Smalltalk-80等一系列描述能力较强、执行效率较高的面向对象编程语言的出现,标志着面向对象的方法与技术开始走向实用。目录上一页下一页退出面向对象方法的本质:主张从客观世界固有的事物出发来构造系统,提倡用人类在现实生活中常用的思维方法来认识、理解和描述客观事物,强调最终建立的系统能够映射问题域,也就是说,系统中的对象以及对象之间的关系能够如实地反映问题域中固有事物及其关系。目录上一页下一页退出面向对象方法的以下主要优点:(1)与人类习惯的思维方法一致(2)稳定性好(3)可重用性好(4)易于开发大型软件产品(5)可维护性好目录上一页下一页退出九、面向对象方法的基本概念关于面向对象方法,涵盖对象及对象属性与方法、类、继承、多态性几个基本要素。下面分别介绍面向对象方法中这几个重要的基本概念,这些概念是理解和使用面向对象方法的基础和关键。目录上一页下一页退出(1)对象(Obect)对象是面向对象方法中最基本的概念。它可以用来表示客观世界中的任何实体,也就是说,应用领域中有意义的、与所要解决的问题有关系的任何事物都可以作为对象,它既可以是具体的物理实体的抽象,也可以是人为的概念,或者是任何有明确边界和意义的东西。面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,它由一组表示其静态特征的属性和它可执行的一组操作组成。目录上一页下一页退出方法:对象可以做的操作表示它的动态行为。属性:即对象所包含的信息,它在设计对象时确定,一般只能通过执行对象的操作来改变。对象的封装性:操作描述了对象执行的功能,若通过消息传递,还可以为其他对象使用。操作的过程对外是封闭的,即用户只能看到这一操作实施后的结果。这相当于事先已经设计好的各种过程,只需要调用就可以了,用户不必去关心这一过程是如何编写的。目录上一页下一页退出对象一些基本特点:①标识惟一性②分类性③多态性④封装性⑤模块独立性好目录上一页下一页退出(2)类(Class)和实例(Instance)类:是具有共同属性、共同方法的对象集合,类是对象的抽象,它描述了属于该对象类型的所有对象的性质,而一个对象则是其对应类的一个实例。(3)消息(Message)消息:是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。发送对象接口接受对象消息操作名、参数消息传递示意图目录上一页下一页退出(4)继承(Inheritance)继承:是面向对象的方法的一个主要特征。继承是使用己有的类定义作为基础建立新类的定义技术。已有的类可当作基类来引用,则新类相应地可当作派生类来引用。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们。目录上一页下一页退出(5)多态性(Polymorphism)对象根据所接受的消息而做出动作,同样的消息被不同的对象接受时可导致完全不同的行动,该现象称为多态性。在面向对象