当前位置:
文档之家› 第一章 算法 1.算法的概念 2.用N-S流程图表示算法
第一章 算法 1.算法的概念 2.用N-S流程图表示算法
2003/1/19
13
第四节
2003/1/17
4
第二节
简单算法举例
【例1.2】有50个学生,要求将他们之中成绩在80分以上者 打印出来。
[分析]用N表示学生学号,Ni表示第i个学生学号;G表示 学生成绩,Gi表示第i个学生成绩。 算法如下: S1:1=> i S2:如果Gi≥80,则打印Ni和Gi,否则不打印。 S3:1+i => i S4:如果 i ≤50,返回S2继续执行;否则算法结束。
说明:变量 i 作为下标,用来控制序号(第几个学生,第几个成绩)。当 超过50时,表示已对50个学生的成绩处理完毕,算法结束。
2003/1/17 5
第二节
简单算法举例
【例1.3】将2000 - 2500年中每一年是否闰年打印出来。
[分析]闰年的条件是: (1)能被4整除,但不能被100整除的年份是闰年; (2)能被100整除,又能被400整除的年份是闰年。 设Y为年份,算法如下: S1:2000=>Y S2:若Y不能被4整除,打印Y“不是闰年”。然后转到S5。 S3:若Y能被4整除,不能被100整除,打印Y“是闰年”。 S4:若Y能被100整除,又能被100整除,打印Y“是闰年”, 否则打印“不是闰年”。 S5:Y+1=>Y S6:当Y≤2500时,转S2继续执行,若Y>2500,算法结束。2Leabharlann 03/1/172第二节
简单算法举例
【例1.1】求1X2X3X4X5(即求5!)。
算法一: 步骤1:先求1x2,得到结果2。 步骤2:将步骤1的结果2再乘以3,得到结果6。 步骤3:将6再乘以4,得24。 步骤4:将24再乘以5,得120,即最后结果。
说明:这样写算法太繁琐,可以采用一种简便通用的算法。
2003/1/17
3
第二节
简单算法举例
算法二: S1:使T=1 S2:使I=2 S3:使TXI,乘积结果仍放在变量中,可表示为TXI=>T S4:使I的值加1,即I+1=>I S5:如果I不大于5,返回重新执行S3,S4,S5;否则算 法结束。最后得到T的值就是5!的值。
说明:算法二可进一步简化为: S1:1=>T S2:2=>I S3:TXI=>T S4:I+1=>I S5:若I≤5,返回S3;否则,结束。
2003/1/19 7
第二节
简单算法举例
【例1.5】对一个大于或等于3的正整数,判断它是不是一 个素数。
[分析]判断一个数 N(N≥3)是否素数的方法是将N作被 除数,将2到√ — N 间的各个整数轮流作除数,如果都不能被 整除,则N为素数。算法如下: S1:输入 N 的值 S2:I=2 S3:N 被 I 除,得余数 R。 S4:若 R=0 (表示 N 能被 I整除),打印N “不是素数”, 算法结束;否则执行S5。 S5:I+1=>I N ,返回S3,否则算法结束。 S6:若I≤√ —
2003/1/19
9
第四节
怎样表示一个算法
表示一个算法的常用方法有:自然语言;(传统)流程 图;结构化流程图;伪代码;PAD图等。
一、用自然语言表示算法
自然语言就是人们日常使用的语言,如汉语、英语等。 优点:通俗易懂。 缺点:文字冗长,容易出现 “歧异性”。描述包含分支 和循环的算法不方便。
说明:除了一些很简单的问题外,一般不用自然语言表示算法。
2003/1/19 8
第三节
算法的特性
一个算法应该具有以下5点特性: 1.有穷性。不能有死循环,或运行时间过长。 2.确定性。算法中每一步骤含义必须明确,不可摸棱 两可。 3.有零个或多个输入。输入是指在执行算法时需要从 外界获取的信息。不要把指定算法误认为是 “输入”。 4.有一个或多个输出。一个算法得到的结果就是算法 的输出。没有输出的算法是没有意义的。 5.有效性。算法中的每一个步骤都应当能有效地执行, 并得到确定的结果。
第一章
本章重点:
算
法
1.算法的概念; 2.用N-S流程图表示算法。
2003/1/17
1
第一节
算法的概念
算法(Algorithm)广义地说,就是为解决一个问题而采 取的方法和步骤。
说明:①同一个问题可以有不同的解题方法和步骤(算法),为有效地解 决问题,需要选择合适的算法。 ②解决一个问题,包括设计算法和实现算法两个部分。如作曲家 创作曲谱就是“设计算法”,演奏家照曲谱进行演奏就是 “实现 算法”。又如菜谱是一个算法,厨师炒菜就是在实现这个算法。 ③本书所讲的算法指计算机能实现(执行)的算法。 ④计算机算法可分为两大类:数值运算算法和非数值运算算法。
2003/1/17 6
第二节
简单算法举例
1 _ 1 _ 1 _ 【例1.4】求 1- 2 + 3 - 4
1 1 — — + 99 - 100 [分析]先设四个变量:sum表示累加和,sign表示数值 符号,deno(denominator)表示分母,term表示某一项。 算法如下: S1:sum=1 S2:deno=2 S3:sign=1 S4:sign=(-1)X sign S5:term=signX(1/deno) S6:sum=sum + term S7:deno=deno+1 S8:若deno≤100返回S4,否则算法结束。
2000=>Y Y能被 4整除
N Y Y N
打印Y “不是闰年”
Y能被 400整除
Y能被 100整除
N
打印Y “是闰年”
Y
打印Y “是闰年” 打印Y “不是闰年”
Y+1=>Y
Y
2003/1/19
Y≤2500
N
结束
图 1.3
12
第四节
怎样表示一个算法
二、用(传统)流程图表示算法
归纳: 传统流程图的弊端:传统流程图对流程线的使用没有 严格限制,使用者可以随意地使流程转来转去,使流程图 变得毫无规律,难以阅读,也难以修改,从而使算法的可 靠性和可维护性难以保证。
2003/1/19
10
第四节
怎样表示一个算法
二、用(传统)流程图表示算法
流程图就是用一些图框(图1.1)来表示各种类型的操作。
起止框
输入输出框 或
判断框
是(Y)
X≥0
否(N)
打印X
打印-X
处理框
流程线
连接点
注释框
图 1.1
2003/1/19
图 1.2
11
第四节
开始
怎样表示一个算法
【例1.6】将例1.3判定闰年的算法用流程图表示(图1.3)。