1、第2章 算 法 程序的灵魂,算法的概念 简单算法举例 算法的特性 怎样表示一个算法 结构化程序设计方法,2.1 什么是算法,为解决一个问题而采取的方法和步骤称为算法 描述太极拳动作的图解 一首歌曲的乐谱 求1+2+3+100的方法 方法有优劣之分,一般希望采用方法简单、运算步骤少的方法。因此,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。 算法+数据结构=程序程序中的操作语句,实际上就是算法的体现。不了解算法就谈不上程序设计。,2.2 简单算法举例,例1:求12345。 最原始方法: 步骤1:先求12,得到结果2。 步骤2:将步骤1得到的乘积2乘以3,得到结果6
2、。 步骤3:将6再乘以4,得24。 步骤4:将24再乘以5,得120。 这样的算法虽然正确,但太繁。,改进的算法: S1: 使t=1 S2: 使i=2 S3: 使ti, 乘积仍然放在在变量t中,可表示为tit S4: 使i的值+1,即i+1i S5: 如果i5, 返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。,如果计算20!只需将 S5:若i5 改成 i20即可。,2.2 简单算法举例,例2:输入a、b、c 3个数,输出其中最大者。 算法可以表示如下: S1:输入a、b、c S2:如果ab, 则:a=max ;否则:b=max ; S3:如果cmax, 则:c=max ; S4:输
3、出max 算法结束。,2.3 算法的特性,l有穷性:一个算法应包含有限的操作步骤而不能是无限的。 l确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。 l有零个或多个输入。 l有一个或多个输出。 l有效性:算法中每一个步骤应当能有效地执行,并得到确定的结果。对于程序设计人员,必须会设计算法,并根据算法写出程序。,2.4 怎样表示一个算法,用自然语言表示算法 用流程图表示算法 用N-S流程图表示算法 用伪代码表示算法 用计算机语言表示算法,流程图,流程图表示算法,直观形象,易于理解。,将例1求5!的算法用流程图表示,流程图,三种基本结构,循环结构当型循环 直到型循环,顺序结构
4、,选择结构,共同特点: 只有一个入口;只有一个出口;结构内的每一部分都有机会被执行到;结构内不存在“死循环”。,N-S流程图,顺序结构 选择结构 当型循环 直到型循环,N-S流程图,将例1的算法用N-S流程图表示,伪代码,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。它如同一篇文章,自上而下地写下来。每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便 、格式紧凑,也比较好懂,便于向计算机语言算法(即程序)过渡。 例如:“打印x的绝对值”的算法可以用伪代码表示如下:IF x is positive THEN print xELSE print x 也可以用汉字伪代码,
5、如:若 x为正 打印 x否则 打印 x,计算机语言,我们的任务是用计算机解题,就是用计算机实现算法;用计算机语言表示算法必须严格遵循所用语言的语法规则。#includeint main() int i,t;t=1; i=2;while(i=5) t=t*i;i=i+1;printf(“%d”,t);return 0;,例1的C语言程序,2.5 结构化程序设计方法,一个结构化程序就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、阅读、修改和维护。 结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。 结构化程序设计方法的基本思路是:把一个复杂问题的求解过程 分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。 采取以下方法保证得到结构化的程序(1)自顶向下; (2)逐步细化; (3)模块化设计; (4)结构化编码。,