第二章 算法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
步骤3: 将第2步得到的结果再乘以4, 得结果24。 步骤4: 将第3步得到的结果再乘以5, 得120。即最后结果。
想一想:如果按照此方法,求1×2×3×...×1000,要写多少步 因此,上述计算方法不可取! 999步!
6
第二章
算法
• 改进的方法(或通用的方法): 先设两个变量p和i,p代表被乘数,i代表乘数。并且将每一 步乘积直接放入被乘数变量p中。用循环算法求结果。
简单的子问题,若这些子问题还较复杂。可再分解它们,直到
能容易地用某种高级语言表达为止。 换句话说,逐步求精技术就是:按照先全局后局部、
先整体后细节、先抽象后具体的过程,组织人们的思维活动,
从最能反映问题体系结构的概念出发,逐步精细化、具体化、 逐步补充细节,直到设计出可以在机器上执行的程序。——系
统分析员必备的素质!
出口
20
2.4.3
三种基本结构和改进的流程图
第二章
算法
• 循环结构:当(while)型
初始化变量
no
条件成立否
yes 程序段 修改循环变量
循环体
先 判 断 后 执 行
21
2.4.3
三种基本结构和改进的流程图
第二章
算法
• 循环结构:直到(until)型
初始化变量
程序段循环 修改循环变量循环 条件成立否 yes
• 顺序结构:
顺序执行语句A 顺序执行语句B
当A执行完后,无条件地执行B。
18
第二章
算法
2.4.3
三种基本结构和改进的流程图
双选择结构
• 选择结构:
入口 yes
条件成立否
no
程序段A
程序段B
出口
19
第二章
算法
2.4.3
三种基本结构和改进的流程图
• 选择结构:
入口
条件成立否
单选择结构
no
yes
语句A
4
第二章
算法
上述四个方面中:
算法是灵魂;
数据结构是加工对象; 语言是工具; 编程需要采取合适的方法。
算法解决"做什么"和"怎么做"的问题。
程序中的按一定顺序列出的操作语句,就是算法的体现。
通过本门课,大家学会使用c语言的语法编写不太 复杂的c程序。
5
第二章
算法
2.2
简单算法举例
例1:求1*2*3*4*5 • 最原始的方法: 步骤1: 求1×2, 得结果2。 步骤2: 将第1步得到的结果再乘以3, 得结果6。
循环体
no no
先 执 行 后 判 断
22
第二章
算法
• 三种基本结构的共同点:
–只有一个入口;
–只有一个出口; –结构内每一部分都有机会被执行。 –结构内不存在"死循环"。如条件永远成立时,就成了" 死循环" • 已经证明,用上述三种基本结构顺序组成的算法结构,可 以解决任何复杂的问题。
• 由基本结构构成的算法属于"结构化"的算法
前面的算法用N-S流程图来表示
计算1x3x5x...x11的值
步骤1:令p=1 步骤2:令i=1 1->P 1->i p * i->p i+2->i 直到 i>11 打印P的值
这两个操 作之间是 顺序关系 这是一 个顺序 结构
步骤3:使pxi,并将乘积放
入p中。通常表示为pxi=>p 步骤4:使 i 的值加2,表 示为i+2=>i 步骤5:如果i不大于11, 返回到步骤3继续向下执行; 否则算法结束。p中的值即最
假 开始 输入a,b的值 真
a≥b
打印a,再打印b;否则,
先打印b,再 打印a; 算法结束。
输出b,a的值
输出a,b的值
结束
16
第二章
算法
例3:算法用流程图来表示
对一个大于或等于3的正 整数,判断它是不是一个 素数。
S1:输入n的值 S2:i=2(i作为除数)
开始 输入n
2->i n/i的余数->r
这是一 个循环 结构
后结果。
上述算法由基 本结构组成
28
第二章
算法
2.4.5 用伪码表示算法
• 伪码
是用一种介于自然语言和计算 机语言之间的文字和符号来描 述算法。
开始 臵p的初值为1 臵i的初值为1 当i 小于11时,执行下 面的操作: 使 p=p x i 使 i=i+2 打印 p 的值
• 好处:
• 只要符合上述的四个特点的结构,都称为基本结构。
23
第二章
算法
对例1算法的流程图的结构化分析
计算1x3x5x...x101的值
步骤1:令p=1 步骤2:令i=3
开始 1->p 3->i p* i->p i+2->i 真 这两个操 作之间是 顺序关系 这是一 个顺序 结构
步骤3:使pxi,并将乘积放
S1:输入n的值 S2:i=2(i作为除数) S3:n被i除,将余数赋给r S4:若r=0,表示n能被r整除,则输出“n不是素数”,算法结束;否则S5
S5:i=i+1
S6:如果i≤
n,返回S3,否则算法结束。
10
第二章
算法
2.3
1.有穷性。 2.确定性。 3.有效性。
算法的特性
4.零个或多个输入。 5.有一个或多个输出。
(2)对操作的描述
即操作步骤,也就是算法。
• 数据和操作的关系:
数据是操作的对象,操作的目的是对数据进行加工, 以得到期望的结果。
3
第二章
算法
• 著名计算机科学家沃斯(Nikiklaus Wirth)提出了一个 公式: 数据结构 + 算法 = 程序 • 在设计程序时,还要考虑采用好的设计方法-------结构 化程序设计方法。因此有: 程序=数据结构+算法+程序设计方法+语言工具和环境 • 以上4个方面是一个程序设计人员应具备的知识。设计一 个程序时要综合运用这几方面的知识。
优点
与传统的流程图相比,N-S图的另一个优点就是 既形象直观,画出来后又比较节省篇幅,尤其适 合于结构化程序的设计。
26
第二章
算法
• 顺序结构: • 选择结构: yes
顺序执行语句A
顺序执行语句B 条件 条件 no
no
yes
语句A
• 循环结构:
语句B
语句A
A 直到P成立
当p为真值 A
27
第二章
算法
30
第二章
算法
前面的算法用c语言表示
#include <stdio.h> void main() { int p,i; p=1; i=1; while(i<=11) { p=p*i; i=i+2; } }
31
第二章
算法
2.5
结构化程序设计的方法
背景
追求程序占用内存小、运行速度快、炫耀编程技巧, 而导致质量低下、可靠性差、开发周期长、维护费 用高昂,而且又价格昂贵。 定义 为降低软件成本、提高软件的生产和维护效率, 形成程序设计方法学和软件工程学,从而形成结构 结构化程序设计是一种进行程序设计的原则和 结构化程序设计的基本思想 化程序设计方法。 方法,按照这种原则和方法设计出的程序的特点是: 3.程序设计采用“自顶向下、逐步求精”和模块 结构清晰,容易阅读,容易修改,容易验证。 2.三种基本结构应具有如下良好特性:
入p中。通常表示为pxi=>p 步骤4:使 i 的值加2,表
示为i+2=>i
步骤5:如果i 不大于101, 返回到步骤3继续向下执行; 否则算法结束。p中的值即最 后结果。
i≤101 假
输出p的值 结束
这是一 个循环 结构
上述算法由基 本结构组成
24
第二章
算法
对例2算法的流程图的结构化分析
有两个数a,b,按大小 顺序打印它们。
13
第二章
算法
2.4.2
用流程图表示算法
流程图采用一些图形框表示算法要表述的各种操作。
美国国家标准化协会ANSI规定了一些常用的流程图符号: 表示起止框
表示输入输出框 表示注释框 表示条件判断框 表示处理框 表示连接点 表示流程线
14
第二章
算法
例1:算法用流程图来表示
计算1*3*5*...*11的值 步骤1:令p=1 步骤2:令i=3 步骤3:使p*i,并将乘积放
11
第二章
算法
2.4
• 用自然语言表示
算法的表示
• 用流程图表示(传统流程图和N-S图) • 用伪代码表示 • 用计算机语言表示
• 结构化程序的三种基本结构:
– 顺序、选择、循环结构
12
第二章
算法
2.4.1 用自然语言表示算法
• 上节中讨论的例子的算法是用自然语言写的。
• 自然语言指人们日常使用的语言,如汉语、英语等。 • 用自然语言表示算法的特点:通俗易懂,但不严谨, 容易产生歧义。 • 除非问题很简单,一般不用自然语言描述算法。
– 书写方便,格式紧凑,易懂, 便于向计算机语言过渡。 • 前面的算法可用伪码表示为: 结束
29
第二章
算法
2.4.6
用计算机语言表示算法
• 只有用计算机语言描述的算法才能被计算机的编译环境识 别,并被处理、执行。 • 用计算机语言表示算法必须严格遵守所用语言的语法规则。 • 前面几种描述算法的方法对文字等格式要求不严,一般来 说,只要能示意就行。
步骤1: 输入a,b的值; 步骤2: 如果a≥b,则先 打印a,再打印b;否则, 先打印b,再 打印a; 算法结束。
结束 这是一 个选择 结构 输出b,a的值 输出a,b的值 假 a≥b 真 开始 输入a,b的值
上述算法由基 本结构组成
25
第二章
算法
2.4.4
特点
源自文库
用N-S流程图表示算法
最重要的特点就是完全取消了流程线,这样算法 被迫只能从上到下顺序执行,从而避免了算法流 程的任意转向,保证了程序的质量。
33
第二章
算法
什么是自顶向下的程序设计方法?
编程方法:
1. 线性方法
2. 自底向上方法
3. 自里向外的方法 4. 自顶向下方法
先写出结构简单清晰的 是先画出一个粗糙的程 不考虑程序结构,直 是写出基础程序段, 主程序表达整个问题, 序框图,写出程序第一 接顺序地写出一行行语 然后再扩大、补充和升 在此问题中包含复杂的 稿,然后向上、向下两 句,程序执行的顺序就 级。它是自顶向下方法 子问题则用子程序来实 个方向上复杂化考虑, 是编出的语句顺序。 的逆方法。 现,若子问题还包含复 不断修正,直至得到一 杂的子问题,再用另外 个完整的、机器上可执 一个子程序来解决,直 行、完成预定功能的程 到每一细节都可以用高 序。 级语言清楚表达为止。
1.采用顺序、选择和循环三种基本结构作为程 化的方法。 ① 只有一个入口。② 只有一个出口。 序设计的基本单元,避免无限制地使用goto语
③ 无死语句,即不存在永远都执行不到的语句。 ④ 无死循环,即不存在永远都执行不完的循环。
32
句而使流程任意转向。
第二章
算法
什么是逐步求精方法?
将一个完整的、较复杂的问题分解成若干相对独立的、较
第二章
算法
第 二 章
程序的灵魂------算法
1
第二章
算法
主要内容
本章主要介绍算法的思想及算法的表示方法。 一、 算法在程序中的地位 二、 算法的概念 三、 简单算法举例 四、 算法的表示 五、 程序设计步骤
2
第二章
算法
算法在程序中的地位
• 一个程序应包括的两个方面: (1)对数据的描述
在程序中要指定数据的类型和数据的组织形式,即数据 的结构。
7
第二章
算法
如果将题目改为求1x3x5x7x9x11x13,如何设计算法呢?
• 先设两个变量p和i,p代表被乘数,i代表乘数。并且将每 一步乘积直接放入被乘数变量p中。用循环算法求结果。
步骤1:令p=1 步骤2:令i=3 步骤3:使p×i,并将乘积放入p中。通常表示为p×i=>p 步骤4:使 i 的值加2,表示为i+2=>i 步骤5:如果i不大于13,返回到步骤3继续向下执行;否 则算法结束。p中的值即最后结果。

S3:n被i除,将余数赋给r
S4:若r=0,表示n能被r整除, 则输出“n不是素数”,算法 结束;否则S5 S5:i=i+1 S6:如果i≤ n,返回S3,否 则算法结束。
r=0?
假 i+1->i

输出”n不 是素数”
i> n ? 真 输出”n是素数” 结束
17
第二章
算法
2.4.3
三种基本结构和改进的流程图
步骤1:令p=1 步骤2:令i=2 步骤3:使p x i,并将乘积放入p中。通常表示为p×i=>p 步骤4:使 i 的值加1,表示为 i+1=>i 步骤5:如果i 不大于5,返回到步骤3继续向下执行;否则 算法结束。p中的值即最后结果。 • 想一想: 采用此方法求1 × 2×3×...×1000,如何? 简练!
开始 1->p 3->i p* i->p i+2->i 真
入p中,通常表示为p*i=>p
步骤4:使i的值加2,表示 为i+2=>i
步骤5:如果i 不大于11,
返回到步骤3继续向下执行; 否则算法结束。p中的值即最 后结果。
i≤11 假
输出p的值 结束
15
第二章
算法
例2:算法用流程图来表示
有两个数a,b,按大小顺 序打印它们。 步骤1: 输入a,b的值; 步骤2: 如果a≥b,则先
想一想: 采用此方法求1×3×5×...×101,如何?
8
第二章
算法
前面的问题用c语言表示
#include <stdio.h> void main() { int p,i; p=1; i=3; while(i<=101) { p=p*i; i=i+2; } }
9
第二章
算法
• 例2:对一个大于或等于3的正整数,判断它是不是一个素数 • 判断方法:将n(n≥3)作为被除数,将2到(n-1)各个整 数先后作为除数,如果都不能被整除,则n为素数。 • 改进:n只需被2到 n 之间的整数除即可。
相关文档
最新文档