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

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

下课了。。。

追求休息一会儿。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值