1、第二章 程序的灵魂-算法,陕西师范大学计算机科学与技术专业:李绵梁,本 章 要 点,算法的概念,算法的表示,结构化程序设计方法,主 要 内 容,2.5 结构化程序设计方法,2.1 算法的概念,2.2 简单算法举例,2.3 算法的特性,2.4 算法的表示,2.1 算法的概念,广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。,100+(1+99)+(2+98)+(49 +51)+50 = 100 + 49100 +50 加51次,对同一个问题,可有不同的解题方法和步骤!,例: 求,1+2,+3,+4,一直加到100 加99次,方法1:,方法2:,为了有效地进行解题,不仅需要保证算法正确
2、,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。,包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。,计算机算法可分为两大类别:,数值运算算法:,非数值运算:,求数值解,例如求方程的根、求函数的定积分等。,2.2 简单算法举例,例: 求12345,步骤4:将24再乘以5,得120,太繁琐,那么,如果要求121000 则要写999个步骤!,步骤3:将6再乘以4,得24,步骤2:将步骤1得到的乘积2再乘以3,得到结果6,步骤1:先求12,得到结果2,S5: 如果i不大于5,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到p的
3、值就是5!的值。,可以设两个变量:一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。设p为被乘数,i为乘数。用循环算法来求结果, 算法可改写:,S1: 使p=1,S2: 使i=2,S3: 使pi,乘积仍放在变量p中,可表示为:pip,S4: 使i的值加1,即i+1i。,此时,如果题目改为:求135999算法只需作很少的改动:,算法简练,S5: 如果i不大于999,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是所求的值。,S1: 使p=1,S2: 使i=3,S3: 使pi,乘积仍放在变量p中,可表示为:pip,
4、S4: 使i的值加2,即i+2i。,用这种方法表示的算法具有通用性、灵活性。S3到S5组成一个循环,在实现算法时 要反复多次执行S3,S4,S5等步骤,直到某一时刻,执行S5步骤时经过判断,乘数i已超过规定的数值而不返回S3步骤为止。此时算法结束,变量p的值就是所求结果。,2.3 算法的特性,有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果 。,一个算法应该具有以下特点:,有穷性:包含有限的操作步骤,确定性:算法中的每一个步骤都应当是确定的,有零个或多个输入:输入是指在执行算法时需要从外界取得必要的信息,有一个或多个输出:算法的目的是为了求解,“解” 就是输出,可以用不同的方法表
5、示算法,常用的有:,2.4 算法的表示,自然语言 传统流程图 结构化流程图 伪代码 PAD图,用自然语言表示算法,自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。自然语言表示的含义往往不大严格,要根据上下文才能判断其正确含义,描述包含分支和循环的算法时也不很方便。因此,除了那些很简单的问题外,一般不用自然语言描述算法。,起止框,判断框,处理框,输入/输出框,注释框,流向线,连接点,用流程图表示算法,美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号:
6、,例 将求5!的算法用流程图表示,开 始,1 = t,2 = i,t * i = t,i + 1 = i,i 5,Y,N,输出 t,结 束,流程图是表示算法的较好的工具。一个流程图包括以下几部分 :,(3) 框内外必要的文字说明。,(2) 带箭头的流程线;,(1) 表示相应操作的框;,三种基本结构,Bohra和Jacopini提出了以下三种基本结构:,选择结构,顺序结构,循环结构,用这三种基本结构作为表示一个良好算法的基本单元。,三种基本结构的图示:,顺序结构,选择结构,循环结构,当型(While型)循环,直到型(Until型)循环,a,b,A,B,a,b,A,B,p,p1,A,A,p1,成立
7、,不成立,不成立,成立,a,a,b,b,1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称N-S结构化流程图 。,用N-S流程图表示算法,N-S流程图用以下的流程图符号:,顺序结构,选择结构,循环结构,B,A,A,B,成立,p,不成立,A,A,当 p1 成立,直到 p1 成立,当型(While型)循环,直到型(Until型)循环,用三种N-S流程图中的基本框,可以组成复杂的N-S流程图。图中的A框或B框
8、,可以是一个简单的操作,也可以是三个基本结构之一。,P 100,成立,不成立,r = 0.08,r = 0.06,当 n 10,P * (1+r)= p,A,B,A 框可以是一个选择结构,B 框可以是一个循环结构,i + 1 t,t * I t,2 i,例 将求5!算法用N-S图表示,t,直到 i 5,输出 t,N-S图表示算法的优点,比文字描述直观、形象、 易于理解;比传统流程图紧凑易画。尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,N-S流程图中的上下顺序就是执行时的顺序。用N-S图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行。,自顶向下;逐步细化;模块化设计;结构化编码。,2.5 结构化程序设计方法,采取以下方法来保证得到结构化的程序:,两种不同的方法: 自顶向下,逐步细化; 自下而上,逐步积累。,小 结,一个结构化的算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转);一 个非结构化的算法可以用一个等价的结构化算法代替,其功能不变 。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。,参考资料:,C程序设计(第三版) 谭浩强 著 清华大学出版社,2009 年 3月 20日,