1、什么是算法
算法是为了解决问题而执行的一系列步骤。
-
计算机的算法可分为两大类别:
–数值运算算法
–非数值运算算法
-
数值运算的目的是求数值解
-
非数值运算,用于事务管理领域
2、简单的算法举例
例1、求1x2x3x4x5
a.使p=1
b.使i=2
c.使p与i相乘,乘积仍放在变量p中,p=p*i
d.使i的值加1,i=i+1
f.如果i不大于5,返回重新执行c;否则,算法结束
g.最后得到p的值就是5!的值
求1x3x5x7x9x11
a.使p=1
b.使i=3
c.使p与i相乘,乘积仍放在变量p中,p=p*i
d.使i的值加1,i=i+2
f.如果i不大于11,返回重新执行步骤c;否则,算法结束
g.最后得到p的值就是所求值
例2、有50个学生,要求将成绩在80分以上的学生的学号和成绩输出
用ni代表第i个学生学号,gi代表第i个学生成绩
a. i = 1
b.如果gi>=80,则输出ni和gi,否则不输出
c. i = i+1
d.如果i<=50,返回到步骤b,继续执行;否则,算法结束
例3、判定2000-2500年中的每一年是否闰年,并将结果输出
设year为被检测的年份
a. year = 2000
b.若year不能被4整除,则输出year的值和“不是闰年”,然后转到步骤f
c.若year能被4整除,不能被100整除,则输出year的值和“是闰年”
d.若year能被400整除,则输出year的值和“是闰年”,然后转到步骤f
e.其他情况输出year的值和“不是闰年”
f. year = year + 1
g.当year<=2500时,转步骤b,否则停止
例4、求1-1/2+1/3-1/4+…+1/99-1/100
sign表示当前项符号
term表示当前项的值
sum表示当前各项的和
deno表示当前项分母
a. sign=1
b. sum=1
c. deno=2
d. sign=(-1)*sign
e. term=sign*(1/deno)
f. sum = sum+term
g. deno = deno+1
h. 若deno<=100返回步骤d;否则算法结束
例5、给出一个大于或等于3的正整数,判断它是不是一个素数
a.输入n的值
b. i = 2
c. n 被 i 除,得余数r
d. 如果r = 0,表示n能被i整除,则输出n“不是素数”,算法结束;否则执行步骤e
e. i = i+1
f.如果i<=n-1,返回步骤c;否则输出n“是素数”,然后结束
3、算法的特性
(1)有穷性:一个算法应包含有限的操作步骤,而不能是无限的
(2)确定性:算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的
(3)有零个或多个输入:所谓输入是指在执行算法时需要从外界取得必要的信息
(4)有一个或多个输出:算法的目的是为了求解,“解”就是输出
没有输出的算法是没有意义的
(5)有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果
4、怎样表示一个算法
常用方法:
- 自然语言
- 流程图
- NS图
- 伪代码
- …
用流程图来表示算法
- 流程图是用一些图框来表示各种操作
- 用图形表示算法,直观形象,易于理解
三种基本结构和改进的流程图
三种基本结构
(1)顺序结构
(2)选择结构
(3)循环结构
①当型循环结构
②直到型循环结构
由三种基本结构派生出来的结构
例6、将例1的算法用流程图表示
例7、将例2的算法用流程图表示
用N-S流程图表示算法
例8、将例1的求5!算法用N-S表示
例9、将例4用N-S图表示
5、用计算机语言表示算法
例10、将例8表示的算法(求5!)用C语言表示
例11、求1-1/2+1/3-1/4+…+1/99-1/100用C语言表示
6、结构化程序设计方法
-
结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构
-
结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
-
采取以下方法保证得到结构化的程序:
①自顶向下;
②逐步细化;
③模块化设计;
④结构化编码。
习题