文档介绍:2017/7/28
邢岳林 ******@sdu.
1
Chapter 2 程序的灵魂---算法
邢跃林
ISE @ Shandong University
2013
2
Agenda
算法的概念
简单算法举例
算法的特性
怎样表示一个算法
结构化程序设计方法
3
什么是程序?
一个程序应该包含:
对数据的描述:数据结构(data structure)
对操作的描述:算法(algorithm)
著名计算机科学家沃思提出一个公式:
数据结构+ 算法= 程序
4
什么是算法?
广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。
对同一个问题,可有不同的解题方法和步骤
例: 求
方法1:1+2,+3,+4,一直加到100 加99次
方法2:100+(1+99)+(2+98)+…+(49 +51)+50 = 100 + 49×100 +50 加51次
5
什么是算法?
为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。
计算机算法可分为两大类别:
数值运算算法:求数值解,例如求方程的根、求函数的定积分等。
非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。
6
算法举例
: 求1×2×3×4×5
步骤1:先求1×2,得到结果2
步骤2:将步骤1得到的乘积2再乘以3,得到结果6
步骤3:将6再乘以4,得24
步骤4:将24再乘以5,得120
太繁琐
如果要求1×2×…×1000,则要写999个步骤
7
算法举例
S1:使p=1;
S2:使i=2;
S3:使p*i,乘积仍放在变量p中,可表示为:p*i → p
S4:使i的值加1,即i+1 → i;
S5:如果i不大于5,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是5!的值。
可以设两个变量:
一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。设p为被乘数,i为乘数。用循环算法来求结果, 算法可改写:
8
算法举例
S1:1→p
S2:3 → i
S3:p×i → p
S4:i+2 → p
S5:若i≤1001,返回S3。否则,结束。
如果题目改为:求1×3×5×……×1000算法只需作很少的改动:
算法简练
9
算法举例
有50个学生,要求将他们之中成绩在80分以上者打印出来。设n表示学号, n1代表第一个学生学号, ni 代表第i个学生学号。用G代表学生成绩, gi代表第i个学生成绩,算法表示如下:
S1:1 → i
S2:如果gi≥80,则打印n gi,否则不打印。
S3:i+1 → i
S4:如果i≤50,返回S2,继续执行。否则算法结束
变量i作为下标,用来控制序号(第几个学生,第几个成绩)。当i超过50时,表示已对50个学生的成绩处理完毕,算法结束。
判定2000—2500年中的每一年是否闰年,并将结果输出。
闰年的条件:
(1)能被4整除,但不能被100整除的年份都是闰年,如2008、2012、2048年
(2)能被400整除的年份是闰年,如2000年
不符合这两个条件的年份不是闰年
例如2009、2100年
算法举例