1、第二章 程序的灵魂算法,2.1 算法的概念2.2 简单算法举例2.3 算法的特性2.4 怎样表示一个算法2.5 结构化程序设计方法,第二章 目录,2.1 算法的概念,2.1 算法的概念,程序 = 数据结构 + 算法,(2)算法 解决问题所采取的方法和操作步骤。用语句来实现。,(1)数据结构 数据的类型和数据的组织形式。高级语言中用变量定义来实现。,操作的目的是对数据进行加工处理,以得到期望结果。,数据是操作的对象。,2.2 简单算法举例,例2.1 设有两个杯子A和B,分别盛放酒和醋,要求将它们互换。,2.2 简单算法举例,S1:再取一个杯子C S2: A C S3: B A S4: C B,交
2、换完成。,例2.2 求1+2+3+100,2.2 简单算法举例,S1: 0 s,1 i S2: s+i s S3: i+1 i。 S4: 如果i100,则返回S2;否则输出s,结束。,思考:求n!,例2.3 从十个数中求出最大值。,2.2 简单算法举例,S1: 设计数器i =1,把第一个数放入变量max中。 S2: i +1 i S3: 将max与第i个数进行比较,如果max较小, 则将第i个数放入max中。 S4: 如果i10,则返回S2;否则输出max,结束。,例2.4 判断某一年y是否闰年。,2.2 简单算法举例,S1: 如果y能被4整除,转至下一步;否则, S5 。 S2: 如果y能被
3、100整除,转至下一步;否则, S4 。 S3: 如果y能被400整除,转至S4;否则,转至S5。 S4: 输出y“是闰年”,结束。 S5: 输出y“不是闰年”,结束。,闰年的条件:,能被4整除,但不能被100整除。 能被400整除。,例2.5 对一个大于或等于3的正整数n,判断它是不是一个素数。,2.2 简单算法举例,判断是否素数的方法: 将n作为被除数,将2到 之间的各个整数轮流作为除数,如果都不能被整除,则n为素数。,2.2 简单算法举例,S1: 输入n的值 S2: 2 i(i作为除数) S3: n除以i得余数r S4: 如果r=0,则输出n“不是素数”,结束;否则,下一步。 S5: i
4、+1 i,S6: 如果i ,返回S3;否则输出n“是素数”,结束。,2.3 算法的特征,2.3 算法的特征,1. 有穷性,2. 确定性,3. 有零个或多个输入,4. 有一个或多个输出,5. 有效性,2.4 怎样表示一个算法,2.4 怎样表示一个算法,1. 用自然语言表示算法,通俗易懂,但容易出现“歧义性”。,2. 用流程图表示算法,直观形象,易于理解。,起止框,输入 输出框,判断框,处理框,流程线,连接点,注释框,2.4 怎样表示一个算法,例2.1 流程图,开始,准备好A、B、C,将A = C,将B = A,将C = B,结束,2.4 怎样表示一个算法,例2.2 求5!,开始,1=t,1=s,
5、s*t = s,t+1 = t,结束,t5,Y,N,2.4 怎样表示一个算法,例2.3 流程图,开始,1=i,第1个数=max,i+1= i,第i个数= max,结束,i10,N,Y,第i个数max,Y,N,2.4 怎样表示一个算法,例2.4,开始,年份=y,结束,y能被100整除,y能被4整除,Y,N,Y是闰年,N,Y不是闰年,Y,y能被400整除,Y,N,三种基本结构,2.4 怎样表示一个算法,(1) 顺序结构,(2) 选择结构,a,A,B,b,a,p,A,成立,B,不成立,b,2.4 怎样表示一个算法, 当(while型)循环, 直到(until型)循环,a,b,(3) 循环结构,p1,
6、A,a,b,p2,A,成立,不成立,成立,不成立,2.4 怎样表示一个算法,用N-S流程图表示算法,(1)顺序结构,(2)选择结构,(3)循环结构, 当(while型)循环, 直到(until型)循环,2.4 怎样表示一个算法,例.判断2000-2500年中的每一年是否闰年,将结果输出。,2.4 怎样表示一个算法,例. 对一个大于或等于3的正整数,判断它是不是素数。,r=0 w=1 (N) r0 w=0 (Y),2.4 怎样表示一个算法,3.用伪代码表示算法,书写方便、格式紧凑,易懂。 常用于算法设计阶段。,例. 打印x的绝对值若 x 为正打印 x否则打印-x,例. 求5!BEGIN1 t2
7、iwhile i=5 t*i ti+1 i print tEND,2.4 怎样表示一个算法,4.用计算机语言表示算法,必须严格遵守所用语言的语法规则。 只有运行了程序才是实现算法。,main( ) int i , t ;t = 1 ; i = 2 ;while ( i= 5 ) t = t *i ;i = i +1 ;printf(“%d” , t); ,2.5 结构化程序设计方法,1.结构化程序设计,2.5 结构化程序设计方法,2. “自顶向下”的模块化程序设计方法,将一个大问题按层次分解成多个方便解决小问题的模块的设计思想.,C语言是结构化的程序设计语言。,一种设计程序的技术。,自顶向下、
8、逐步细化单入口单出口控制结构。,3.功能模块,2.5 结构化程序设计方法,由功能模块组成程序的结构图,例 将1到1000之间的素数打印出来。,2.5 结构化程序设计方法,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ,算法:(1) 挖去1;,2.5 结构化程序设计方法,(2) 用下一个未被挖去的数p去除p后面各数,把p的倍数挖掉;,(3) 检查p是否小于 的整数部分(如果n=1000,则检查p31),如果是,则返回(2)继续执行,否则就结
9、束;,(4) 纸上剩下的就是素数。,2.5 结构化程序设计方法,D,E,F,2.5 结构化程序设计方法,4.模块设计原则,2.5 结构化程序设计方法,(2) 模块之间的关系简单。,模块相对独立性,(1) 模块实现相对独立的特定子功能。,(3) 模块内数据的局部化。,模块大小适中,模块分解层次清楚,本章小结,本章小结,程序的三种基本结构:顺序、选择、循环,5种描述算法的方法,关键是N-S图,灵活运用三种基本结构,学会结构化的程序设计方法,作业,作业,用N-S图表示以下问题的算法。有3个数a、b、c,要求将其中最大的数打印出来。求1+2+3+100。判断一个数n能否同时被3和5整除。将100200之间的素数打印出来。求两个数m和n的最大公约数。,