1

第二章 算法主讲 福州大学数学与计算机学院 韩晓芸

E-mail:hxy@fjtv.net

第二章 算法

2

第二章 算法第一节 程序的灵魂 -----算法第二节 算法的概念第三节 简单算法举例第四节 算法的特性第五节 算法的表示方法第六节 结构化程序设计方法第二章 算法

3

第一节 程序的灵魂 ----算法程序应包括 对数据的描述 和 对数据处理的描述

1,对数据的描述,即 数据结构 。 数据结构是计算机学科的核心课程之一,在 C语言中,系统提供的数据结构,以数据类型的形式出现

2,对数据处理的描述,即 计算机算法 。 算法是为解决一个问题而采取的 方法和步骤,是程序的灵魂。为此,著名计算机科学家 沃思

( Nikiklaus Wirth)提出一个公式:

数据结构 + 算法 = 程序第二章 算法

4

第一节 程序的灵魂 ----算法

3.实际上,还应 采用结构化程序设计方法 进行设计,并 用某一种计算机语言表示 。可以表示如下:

程序 =算法 +数据结构 +程序设计方法

+语言工具和环境第二章 算法

5

第二节 算法的概念

算法是为解决一个问题采取的 方法和步骤 。

计算机算法分类

– 数值算法

求方程的根

求函数的定积分

– 非数值算法

图书检索

人事管理第二章 算法

6

第三节 简单算法举例例 2.1 求 1*2*3*4*5

今设 p为被乘数,i为乘数 。用自然语言表示算法如下:

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!的值。

第二章 算法

7

第三节 简单算法举例如果题目改为 求 1*3*5*7*9*11:算法只须稍做如下改动即可:

S1,使 p=1

S2,使 i=3

S3,使 p*i,乘积仍放在变量 p中,可表示为

p*i→p

S4,使 i的值加 1,即 i+2→i

S5,如果 i不大于 11,返回重新执行步骤 S3以及其后的步骤 S4和步骤 S5;否则算法结束。

第二章 算法

8

第三节 简单算法举例例 2.2 有 50个学生,要求将他们之中成绩在 80分以上者打印出来。用 N表示学生学号,N1 代表第一个学生的学号,Ni代表第 i个学生的学号 。

用 G代表学生成绩,Gi代表第 i个学生的成绩 。

算法可表示如下:

S1,使 i=1

S2,如果 gi≥80,则打印 ni和 gi,否则不打印。

S3,i+1→i

S4,如果 i≤50,返回 S2,继续执行,否则,算法结束。

第二章 算法

9

第三节 简单算法举例例 2.3 判定 2000—2500年中的每一年是否闰年,

并将结果输出。

闰年的条件是:

① 能被 4整除,但不能被 100整除。 如 1996年,

2004年;

② 能被 100整除,又能被 400整除。 如 1600年,

2000年。

不符合这两个条件的年份就不是闰年。

第二章 算法

10

第三节 简单算法举例算法可表示如下:

S1,2000→y

S2,若 y不能被 4整除,输出 y“不是闰年”。 转

S5

S3,若 y能被 4整除,不能被 100整除,则输出

y“是闰年”。然后 转 S5

S4,若 y能被 100整除,又能被 400整除,则输出

y“是闰年”,否则输出 y“不是闰年”。

S5,y+1→y

S6,当 y≤2500时,转 S2继续执行,否则,算法结束。

第二章 算法

11

第三节 简单算法举例例 2.4 求 1-1/2+1/3-1/4+……+1/99 -1/100

用自然语言表示算法如下:

S1,sign=1

S2,sum=1

S3,deno=2

S4,sign=(-1)*sign

S5,term=sign*(1/deno)

S6,sum=sum+term

S7,deno=deno+1

S8,若 deno≤100 返回 S4;否则算法结束。

第二章 算法

12

第三节 简单算法举例例 2.5 对一个大于或等于 3的正整数,判断它是不是一个素数。

用自然语言表示算法如下:

S1,输入 n的值

S2,i=2

S3,n被 i除,得余数 r

S4,如果 r=0,表示 n能被 i整除,则 打印 n“不是素数”,算法结束 ;否则执行 S5

S5,i+1→i

S6,如果 i≤n-1,返回 S3; 否则打印 n“是素数”。

算法结束。

第二章 算法

13

第四节 算法的特性

有穷性

– 算法要包含有限的步骤

确定性

– 每一步必须明确

有零个或多个输入

– 需要从外界获取必要的信息

有一个或多个输出

– 需要把求得得解进行输出

有效性

– 每一步都能有效地执行第二章 算法

14

第五节 算法的表示方法

设计算法

3.1 自然语言(前面就是用自然语言表示的)

3.2 传统流程图

3.3 改进的流程图

3.4 N-S图(盒图)

3.5 PAD图(问题分析图)

3.6 伪代码

实现算法

3.7 计算机语言第二章 算法

15

3.2 传统流程图

优点:

– 描绘直观,

容易掌握

缺点:

– 对流程线没有严格控制起 止 框输 入 输 出 框判 断 框处 理 框流 程 线连 接 点注 释 框第二章 算法

16

3.2 传统流程图将例 2.1求 5!的算法用传统流程图表示如下:

开 始

i > 5

1 → t

2 → i

i + 1 → i

t * i → t

结 束

Y

N

开 始

i > 5

1 → t

2 → i

i + 1 → i

t * i → t

结 束

Y

N

打 印 t

第二章 算法

17

3.2 传统流程图将例 2.2的算法用传统流程图表示如下:

开 始

i > 5 0

1 → i

i + 1 → i

结 束

Y

N

g

i

≥ 8 0

打 印 n

i,

g

i

Y N

第二章 算法

18

3.2 传统流程图将例 2.3的算法用传统流程图表示如下:

开 始

y > 2 5 0 0

2 0 0 0 → y

y + 1 → y

结 束

Y

N

y 不 能 被 4 整 除打 印 y,是闰 年,

Y

N

y 不 能 被 1 0 0 整 除

Y

打 印 y,不是 闰 年,

y 不 能 被 4 0 0 整除

N

N Y

打 印 y,不是 闰 年,

打 印 y,是闰 年,

第二章 算法

19

3.2 传统流程图将例 2.4的算法用传统流程图表示如下:

开 始

d e n o > 1 0 0

1 → s u m

2 → d e n o

S i g n * ( 1 / d e n o ) → t e r m

( - 1 ) * s i g n → s i g n

结 束

Y

N

d e n o + 1 → d e n o

s u m + t e r m → s u m

1 → s i g n

第二章 算法

20

3.2 传统流程图将例 2.5的算法用传统流程图表示如下:

开 始

i > √ n

输 入 n

i + 1 → i

结 束

Y

N

r = 0

打 印

n,不 是素 数,

Y

N

打 印 n,是素 数,

n / i 的 余 数 → r

2 → i

第二章 算法

21

3.3 改进的流程图顺序 选择 (分支 )

A

B A B

p

真 假

p

A

真循环

p

A

假假真A B

p

G

第二章 算法

22

3.3 改进的流程图将例 2.5的算法用改进的流程图可表示如右:

开 始

i ≤ √ n 且 w = 0

输 入 n

i + 1 → i

结 束

Y

N

r = 0

1 → w

Y

N

打 印 n,是素 数,

n / i 的 余 数 → r

0 → w

2 → i

w = 0

打 印 n,不是 素 数,

NY

第二章 算法

23

3.4 N-S图(盒图)

I.Nassi和 B.Shneiderman提出

– 取消流程线,不能任意转移控制

– 使用 N-S符号设计出来的程序必然是结构化程序

– 容易表示嵌套关系

– 容易确定局部和全局数据的作用域第二章 算法

24

A

B

C

条件T F

A B

循环条件循环体循环条件循环体条件

Case1

部分值 1 值 2 …… 值 n

Case2

部分

Casen

部分

A

N-S的基本符号第二章 算法

25

3.4 N-S图(盒图)

将例 2.1的求 5!算法用 N-S流程图表示如下:

1→t

2→i

t*i→t

i+1→i

直到 i> 5

打印 t

第二章 算法

26

3.4 N-S图(盒图)

将例 2.2的算法用 N-S流程图表示如下:

1→i

gi≥80

打印 ni,gi

i+1→i

直到 i> 50

是 否第二章 算法

27

3.4 N-S图(盒图)

将例 2.3的算法用 N-S流程图表示如下:

2000→y

y/4的余数为 0

打印

y“非闰年”

y+1→y

直到 y> 2500

是 否

y/100的余数不为 0

是 否打印

y“是闰年”

y/400的余数为 0是 否打印

y“是闰年”

打印

y“非闰年”

第二章 算法

28

3.4 N-S图(盒图)

将例 2.4的算法用 N-S流程图表示如下:

1→sum

2→deno

sign*1/deno→term

直到 deno> 100

打印 sum

1→sign

deno+1→deno

sum+term→sum

(-1)*sign→sign

第二章 算法

29

3.4 N-S图(盒图)

将例 2.5的算法用 N-S流程图表示如下:

输入 n

0→w

r=0

直到 i> √n或 w≠0

W=0

2→i

i+1→i1→w

n/i的余数 → r

是 否是 否输出 n“是素数” 输出 n“不是素数”

第二章 算法

30

3.5 PAD图(问题分析图)

用二维树型结构表示

– 使用 PAD符号设计出来的程序必然是结构化程序

– 描绘的结构非常清晰

– 用 PAD图表现程序逻辑,易读、易懂、易记

– 支持自顶向下,逐步求精方法的使用(用

def增加细节)

第二章 算法

31

P1

P2

P1

P2

C

L1

L2

Ln

P1

P2

Pn

……

WHILE C P

UNTIL C P

PAD图基本符号第二章 算法

32

3.6 PDL(过程设计语言 —伪码)

用结构化程序设计语言的语法控制框架,

在内部却可灵活使用自然语言来表示各种操作

– 比流程图更灵活,可以使用普通的正文编辑程序进行修改

– 可以作为注释直接插在源程序中,提高文档质量

– 有自动处理程序存在,可自动生成程序代码

– 缺点:不如图形工具直观第二章 算法

33

3.6 PDL(过程设计语言 —伪码)

BEGIN

input m,n

if m

m%n r

while r ≠0

{ n m

r n

m%n r}

print n

END

开始输入 m,n

m

m,n交换求 m除以 n的余数

r≠0

打印 nn赋给 m,r赋给 n,求 m除以 n的余数结束第二章 算法

34

3.7 计算机语言

BEGIN

input m,n

if m

m%n r

while r ≠0

{ n m

r n

m%n r}

print n

END

main()

{int m,n,r,t;

scanf(“%d,%d”,&m,&n);

if(m

r=m%n;

while(r!=0)

{m=n;n=r;r=m%n;}

printf(“n=%d”,n);

}

第二章 算法

35

第六节 结构化程序设计方法

原理,用三种基本控制结构,通过组合和嵌套可实现任何 单入口、单出口 的程序。

方法:

– 自顶向下

– 逐步细化

– 模块化

– 结构化编码第二章 算法

36

第六节 结构化程序设计方法例:将 1到 1000之间的素数打印出来。

前面已讨论过判别素数的方法,现在采用,挨拉托色尼筛法,来求素数表。

用筛选法求素数表输入 1到 1000

各数把所有非素数去掉打印全部素数第二章 算法

37

第六节 结构化程序设计方法例:将 1到 1000之间的素数打印出来。

现在采用,挨拉托色尼筛法,来求素数表。

输入 1到 1000

把所有非素数去掉打印全部素数

A{

B{

C{

A:

输入 n

1→i

当 i≤n

i→x i

i+1→i

第二章 算法

38

第六节 结构化程序设计方法例:将 1到 1000之间的素数打印出来。

现在采用,挨拉托色尼筛法,来求素数表。

B1{

B2{

B3{

B:

将 x1去掉 (使 x1 =0)

2→i

当 i< √n的整数部分如 xi未去掉,则将 xi+1到 xn间是 xi倍数的数全部去掉

i+1→i

} D

第二章 算法

39

第六节 结构化程序设计方法例:将 1到 1000之间的素数打印出来。

现在采用,挨拉托色尼筛法,来求素数表。

D,E:

i+1→j

当 j≤n

能被 xi 整除的 xj

去掉

j+1→j

xi=0是 否将 xi+1到 xn间是 xi倍数的数全部去掉 } E } F

第二章 算法

40

第六节 结构化程序设计方法例:将 1到 1000之间的素数打印出来。

现在采用,挨拉托色尼筛法,来求素数表。

F:

xj =0是 否

xj能被 xi 整除是 否使 xj =0

第二章 算法

41

第六节 结构化程序设计方法例:将 1到 1000之间的素数打印出来。

现在采用,挨拉托色尼筛法,来求素数表。

C,G:

1→i

当 i≤n

把未挖掉的 xi

打印出来

i+1→i

是 否打印 xi} G

xi=0

第二章 算法

42

练习题作业分别用传统流程图和 NS盒图求解以下问题,

1,求 1+2+3+……+100 。

2,依次将 10个数输入,将其中最大的数打印出来。

3,输入 3个数,a,b,c,要求按从大到小顺序打印出来。

4,判断一个数 n能否同时被 3和 5整除。

5,求两个数 m和 n的最大公约数。

6,将 100~200之间的素数打印出来。

第二章 算法

43

下课了。。。

追求休息一会儿。。。

大学C语言 算法的定义及特点教案,第2章 算法的概念和特性介绍_福州大学数计学院:C语言程序设计(韩晓芸)_ppt_大学课件预览_高等教育资讯网...相关推荐

  1. 北京科技大学C语言程序设计,第1章_北京科技大学计算机系:C语言程序设计(李玲)_ppt_大学课件预览_高等教育资讯网...

    第 1章 预备知识北京科技大学 计算机系 C 语言程序设计 2009-7-29 2说明: 本课件的配套教材为: –,C语言程序设计教程> –,C语言程序设计教程习题解答与实验指导> 北京人 ...

  2. 计算机控制系统刘恩沧课后题答案,第八章2 提高计算机控制系统可靠性的技术措施_内蒙古农业大学:计算机控制技术_ppt_大学课件预览_高等教育资讯网...

    第八章 提高计算机控制系统可靠性的技术措施 第八章 提高计算机控制系统可靠 性的技术措施 8.1 软件故障诊断措施 8.2 软件可靠性措施 8.3 内部干扰 8.4 采用隔离变压器 8.5 接地设计 ...

  3. 大学c语言第三章作业,第三章_C语言标准课件_ppt_大学课件预览_高等教育资讯网...

    第三章 C语言 的数据类型. 运算符和表达式第一节 标识符定义,用来标识常量名.变量名.函数名. 数组名.文件名等对象的有效字符序列命名规则: 1)由字母(大小写).数字.下划线 2)第一个 字符必须 ...

  4. convs在MATLAB中,matlab2_MATELAB课程设计_ppt_大学课件预览_高等教育资讯网

    第二讲 MATLAB的数值计算 -- matlab 具有出色的数值计算能力,占据世界上数值计算软件的主导地位数值运算的功能创建矩阵矩阵运算多项式运算线性方程组数值统计线性插值函数优化微分方程的数值解一 ...

  5. C语言控制结构程序设计,第3讲 C语言程序的基本控制结构_C语言程序设计(上)_pps_大学课件预览_高等教育资讯网...

    Page 1 C语言程序设计 清华大学 郑莉 安颖莲第三讲 C语言程序的基本控制结构参考书,计算机程序设计基础,第三章 ,C程序设计,第四章.第五章 Page 2 C语言程序设计 清华大学 郑莉 安颖 ...

  6. 湖北经济学院的计算机是否强,graphics-ch11-真实感图形绘制_湖北经济学院:计算机图形学_ppt_大学课件预览_高等教育资讯网...

    第十一章 真实感图形技术 1,简单光照明模型 2,多边形绘制方法 3,透明 4,整体观照明模型 5,光线跟踪算法 第十章 真实感图形绘制 光照模型 (Illumination Model):计算某 一 ...

  7. matlab 有一函数 _写一程序_输入自变量的值_输出函数值.,第2讲 MATLAB入门1_数学建模_ppt_大学课件预览_高等教育资讯网...

    数学建模与数学实验 MATLAB入门数学建模及其基于 MATLAB的实现辽宁工程技术大学理学院应用数学系 MATLAB作为线性系统的一种分析和仿真工具,是理工科大学生应该掌握的技术工具,它作为一种编程 ...

  8. 鞍山c语言培训,10_鞍山科技大学:C语言与数据结构_ppt_大学课件预览_高等教育资讯网...

    返回本章首页 下一页 上一页 第 10章 位运算 为了节省内存空间,在系统软件中常将多个标志状 态简单地组合在一起,存储到一个字节(或字)中.C 语言是为研制系统软件而设计的,所以她提供了实现将 标志 ...

  9. 大学计算机基础模拟系统2014ppt第三,第一章_河海大学:大学计算机信息技术_ppt_大学课件预览_高等教育资讯网...

    大学计算机信息技术 蔡正林 2004.9.21 本课程教学说明 ? 本课程教学目的 ? 广度优先原则,面广量大 ? 学会听课,记笔记,记问题 (上课时间地点 ) ? 学会实践上机,记问题 (关于上机指 ...

  10. 计算机在航空航天的应用ppt,数字图像处理技术的应用_北京航空航天大学:数字图像处理技术的应用_ppt_大学课件预览_高等教育资讯网...

    数字图像处理技术的应用 北京航空航天大学宇航学院 图象处理中心 第一节 数字图像处理应用 概述 1.1 图像的重要性: 人类离不开图像, 计算机图像技术渗透到 各个科技领域, 百闻不如一见 . 画面比 ...

最新文章

  1. 关于linux安装前规划分区二三事
  2. Audio Session Interruption
  3. phoenix的元数据一般存在哪里_Phoenix常用操作记录-阿里云开发者社区
  4. Unicode/not set/multi-byte/部分常用函数
  5. Oracle NVL函数的用法
  6. 通过 UserAgent 判断是否在我们自己的安卓APP中
  7. vscode pyqt 环境搭建
  8. 用自动化构建工具增强你的工作流程——gulp
  9. 7-21-第三篇 validation相关操作
  10. 大数据分析中常见的分析模型
  11. 0基础入门VTD-实操静态道路建模1
  12. Codeblocks 17汉化
  13. nc6单据模板设置没有可选的模板问题解决
  14. java匹配任意,java有关正则表示式,我想匹配一个字串中的任意字元,怎么办?...
  15. 【JS数据结构与算法】认识哈希表
  16. arping 的特殊用法
  17. AI遮天传 ML-初识决策树
  18. 杭电OJ题目分类(转载)
  19. sqlite3 外键作用原理和使用方法
  20. matlab中 a是什么意思,3)是什么意思matlab中的A(?

热门文章

  1. 局域网内两台电脑ping不通
  2. K8S的pod探针(livenessProbe,readinessProbe),kubelet对pod的状态检查(kubelet-exec,httpGet,tcpSocket)
  3. 第二人生的源码分析(9)登录界面显示
  4. net configuration assistant 没反应_苗阜深夜发文:20年了没被打过,张玉浩,你已经离开青曲社了...
  5. 2020年10月24日=996 程序员节日快乐
  6. Linux 重命名文件和文件夹
  7. LeetCode程序员面试金典(第 6 版)中
  8. 华为无线路由器信道怎么测试软件,路由器无线信道是什么怎么设置
  9. Android 模块化开发
  10. 键盘上所有快捷键,看了你不后悔100% 有用