《C语言算法表示及结构化程序设计基本结构.docx》由会员分享,可在线阅读,更多相关《C语言算法表示及结构化程序设计基本结构.docx(9页珍藏版)》请在第壹文秘上搜索。
1、C语言算法表示及结构化程序设计基本结构为了表示一个算法,可以用不同的方法。常用的方法有:自然语言、传统流程图、结构化流程图和伪代码等。1用自然语言表示算法自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言表示通俗易懂,但文字冗长,容易出现歧义,往往要根据上下文才能判断正确含义。用自然语言来描述包含分支选择和循环算法不方便,花开两朵,各表一枝,同时只表达一个意思,这是自然语言表示的不足。2用流程图表示算法流程图就是用一些图框来表示算法,直观形象,易于理解。如:菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立来判定如何执行其后的操作。它有一个入口,两个或多个出口。
2、优于自然语言表示。连接点小圆圈用于将画在不同地方的流程线连接起来,实际上表示一个对象,只是画不下才分开来画或为了清晰表示而单独绘制,用连接点可以避免流程线出现交叉或过长,不利于阅读。用流程图表示算法直观形象,比较清楚地显示出各个框之间的逻辑关系。这种流程图占用篇幅较多,一条路走到头,与复杂的实际情况表示有差距有不足,尤其当算法比较复杂时就费时费力。3 .传统流程图的弊端与结构化设计的基本结构传统的流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制,不受限制地使流程随意地转来转去,使流程图变得毫无规律,阅读时要花很大精力去追踪流程,使人难以理解算法的逻辑。为了提高算法的质量,使算法的设
3、计和阅读方便,不允许无规律地使流程随意转向,只能顺序地进行下去。但是,算法上难免会包含一些分支和循环,而不可能全部由一个个顺序框组成。为了解决这个问题,人们规定出几种基本结构,然后由这些基本结构按一定规律组成一个算法结构。4 .用3种基本结构作为表示一个结构化算法的基本单元。(1)顺序结构。比如A和B两个框是顺序执行的,在执行完A框所指定的操作后,接着执行B他所指定操作。(2)选择结构。又称选取结构或分支结构,此结构中必包含一个判断框。比如:根据给定的条件p是否成立来选择执行A框,否则执行B框。(3)循环结构:反复执行某一部分的操作。有两类循环结构。当型(while型)循环结构:当给定的条件p
4、l成立时,执行A框操作,执行完A后,再判断条件pl是否成立,反复执行A框,直到某一次pl条件不成立为止,此时不执行A框,而从B框脱离循环结构。直到型(until型)循环结构。先执行A框,然后判断给定的p2条件是否成立,如果p2条件不成立,则一直执行A,直到给定的p2条件成立为止,执行B框脱离本循环结构。对同一结构既可以用当型循环来处理,也可以用直到型循环来处理。以上3种基本结构,有以下共同特点:只有一个出口,只有一个入口。结构每一部分都有被执行的可能。结构内不存在死循环(无终止的循环)。由3种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于结构化的算法,它不存在无
5、规律的转向,只是限制在基本结构内部才允许存在分支和向前或向后的盟阵专。C语言程序三种基本结构程序化结构设计语言中的三种基本结构是顺序结构、选择结构、循环结构。1.JI褥结构:表示程序中的各操作是按照它们出现的先后顺序执行的,特点是:程序从入口点开始,按顺序执行所有操作,直到出口点。2、选择结构:表示程序的处理步骤出现了分支,根据某一特定的条件选择其中的一个分支执行。选择结构有单选择、双选择和多选择三种形式。选择:对条件的真假作出判断后再选择执行哪一步。if(表达式)Oo3、循环结构:表示程序反复执行某些操作,直到某条件为假(或为真)时才可终止循环。循环结构的基本形式有两种:当型循环和直到型循环
6、,什么情况下执行循环则要根据条件判断。循环有:l.for(表达式1;表达式2;表达式3)2.while(表示式)3.dowhile(表示式);5 ,用NS流程图表示算法既然用基本结构的顺序组合可以表示任何复杂的算法给构,那么,基本结构之向流程线就是多余的了。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称N-S结构化流程图。N-S流程图用以下的流程图符号。(1)顺序结构。A和B两个框组成一个顺序依次执行的结构。(2)选择结构。如P条件成立时执行A操作,p不成立则执行B操作。选择结构整体作为一
7、个基本结构。(3)循环结构。当型循环结构是当pl条件成立时反复执行A操作,直到pl条件不成立为止,执行B,当型循环结构整体作为一个基本结构。直到型循环结构表示:当P2不成立,一直循环执行A,当p2成立,才执行Bo用N-S图表示算法的优点:比文字描述直观、形象、易于理解;比传统流程图紧凑易画,尤其是它废除了流程线,整个算法结构是由各个基本结构按Jl褥组成的,N-S流程图中的上下顺序就是执行时的顺序,也就是图中位置在前面的先执行,位置在后面后执行。写算法和看算法只须从上到下进行就可以了,十分方便。用N-S流程图表示的算法都是结构化的算法(它不可能出现流程无规律的励域,而只能自上而下地顺序执行)。一
8、个结构化的算法由一些基本给构顺序组成的;在基本结构向后的劭健,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转只在基本结构内部,整体作为一个基本结构)。如果一个算法不能分解为若干个基本结构,则必然不是一个结构化的算法。6 .用伪代码表示算法用传统的流程图和N-S图表示算法直观易懂,但画起来比较费事,在设计一个算法时,可能要反复修改,修改流程图和N-S图很麻烦,因此,流程图适于表示一个算法,但在使用中不是很理想,尤具是当算法比较复杂、需要反复修改时就事倍功半。为了设计算法时方便,常用一种伪代码的工具。伪代码码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它自上而下地写下来。每
9、一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便,格式紧凑,修改方便,容易看懂,也便于向计算机语言算法(即程序)过渡。用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用。只要把意思表达清楚,便于书写和阅读即可,书写的格式要写成清晰易读的形式。伪代码书写格式上匕较目田,容易表达设计者的思想,用伪代码写的算法很容易修改,例如加一行或删一行,或将后面某一部分调到前面位置都是很容易做到的,却是用流程图表示算法时所不便处理的。用伪代码很容易写出结构化的算法,但是用伪代码写算法不如流程图直观,可能会出现逻辑上的错误(例如循环或选择结构的范围弄错等)。7结构化程序设计方法一个
10、结构化程序就是用计算机语言表示的结构化算法,用3种基本结构组成的程序必然是结构化的程序。这种程序便于编写、阅读、修改和维护,减少了程序出错的机会,提高了程序的可靠性。结构化程序设计方法是按照模块划分原则来提高程序可读性和易维护性、可调性和可扩充性,结构化程序设计适用于程序规模较大的情况,对于规模较程序也可采用非结构化程序设计方法(如果一个算法不能分解为若干个基本结构,则必然不是一个结构化的算法)。结化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。设计方法的原则
11、:1.自顶向下程序设计时,先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。2、逐步细化对复杂问题,应设计一些子目标作为过渡,逐步细化。3、模块化设计一个复杂问题,肯定是由若干稍简单的问题构成。模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块。4、结构化编码。在结构化的程序设计中,只允许三种基本的程序结构形式,它们是顺序结构、分支选择结构、(包括多分支结构)和循环结构,这三种基本结构的共同特点是只允许有一个流动入口和一个出口,仅有这三种基本结构组成的程序称为结构化程
12、序。结构化程序设计适用于程序规模较大的情况,对于规模较小程序也可采用非结构化程序设计方法。有两种不同的设计方法:一种是自顶向下,逐步细化,一种是自下而上,逐步积累。用第一种方法逐步分解,直到认为可以直接将各小段表达为文字语句为止。这种方法就叫做自顶向下,逐步细化。用第二种方法是把想表示的内容都写出来了为止,组合拼装在一起。这种方法叫做自下而上,逐步积累。第一种方法考虑周全,结构清晰,层次分明,容易写,读者容易看,有全局观念和思想,如果发现某一部分中有一段内容不妥,需要修改,只须找出该部分,修改有关段落即可,与其他部分无关。提倡用这种方法设计程序。应当掌握自顶向下、逐步细化的结构化程序设计方法。
13、这种设计方法的过程是将问题求解逐步具体化的过程。结构化程序设计的基本思想为采用自顶向下,逐步求精的程序设计方法和单入口单出口的控制结构。自顶向下、逐步求精的程序设计方法从问题本身开始,经过逐步细化,将解决问题的步骤分解为由基本程序结构模块组成的结构化程序框图。单入口单出口的思想认为一个复杂的程序,如果仅由顺序、选择和循环三种基本程序结构通过组合、嵌套构成,结构化设计的程序一定是一个单入口单出口的程序,就很容易编写出结构良好、易于调试的程序来。结构化程序设计(面向过程程序设计)与面向对象设计主要区别结构化程序设计与面向对象主要的区别在于设计思维上不同,封装性上结构化编程比较难于封装,复用性上也不
14、如面向对象编程。设计思维:面向过程程序设计者以贴近计算机的内部工作机理和先后顺序,通过信息流及其转换来认识系统,使得程序的可理解性比较差。面向对象在分析问题时,以对象为单位,考虑它的属性及方法,与传统的面向过程是完全不同的,面向过程在分析问题时,以一个具体的流程(事务过程或对象)为单位,考虑它的实现,而不是以过程或功能(函数)。2、封装性结构化编程封装难度较大,结构化程序分析设计需要将客观世界模型分解一个一个功能,每个功能按照顺序用以完成一定的数据处理。对于私有的方法,较难控制,敏感信息就比较难隐藏。面向对象编程的封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。3、复用性传统的结构化程序设计方法以过程为中心构造应用程序,数据和处理数据的过程代码是相互独立的实体,设计出的程序可重用代码少。面向对象程序设计方法中,对象所具有的封装性和继承性使得代码重用成为可能,并大大减少了程序出错的可能性。