C 语言程序设计 第二章程序的灵魂 -- 算法

21
主主主主 主主 [email protected] C 语语语语语语 语语语 语语语语语 -- 语语

description

C 语言程序设计 第二章程序的灵魂 -- 算法. 主要内容 2.1 算法的概念 2.2 简单算法举例 2.3 算法的特性 2.4 怎样表示一个算法 2.5 结构化算法设计方法. 2.1 算法的概念. 沃思公式: 数据结构 + 算法 =程序 具体化: 程序=算法+数据结构+程序设计方法+语言工具和环境 . 对数据的描述,要指定数据的类型、数据的组织形式. 对操作的描述,即操作步骤. 2.1 算法的概念. 做任何事都有一定的次序和步骤;如:召开会议,购物等; 算法是为解决一个问题而采取的方法和步骤; 注意: - PowerPoint PPT Presentation

Transcript of C 语言程序设计 第二章程序的灵魂 -- 算法

Page 1: C 语言程序设计 第二章程序的灵魂  --  算法

主讲教师:李艺[email protected]

C 语言程序设计第二章 程序的灵魂 -- 算法

Page 2: C 语言程序设计 第二章程序的灵魂  --  算法

2-2

主要内容主要内容

2.1 2.1 算法的概念算法的概念

2.2 2.2 简单算法举例简单算法举例

2.3 2.3 算法的特性算法的特性

2.4 2.4 怎样表示一个算法怎样表示一个算法

2.5 2.5 结构化算法设计方法结构化算法设计方法

Page 3: C 语言程序设计 第二章程序的灵魂  --  算法

2-3

2.1 算法的概念

沃思公式:  数据结构+算法=程序

具体化:程序=算法+数据结构+程序设计方法+语言工具和环境 

对数据的描述,要指定数据的类型、数据的组织形式

对操作的描述,即操作步骤

Page 4: C 语言程序设计 第二章程序的灵魂  --  算法

2-4

2.1 算法的概念

做任何事都有一定的次序和步骤;如:召开会议,购物等;

算法是为解决一个问题而采取的方法和步骤; 注意:

解决同一个问题可以有不同的方法和步骤,方法有优劣之分,

采用简单的和运算步骤少的方法为优!

Page 5: C 语言程序设计 第二章程序的灵魂  --  算法

2-5

2.1 算法的概念

算法分两大类别 数值运算算法:目的是求数值解,算法成熟; 非数值运算算法:种类繁多,要求各异,难以规范

Page 6: C 语言程序设计 第二章程序的灵魂  --  算法

2-6

2.2 简单算法举例

例 1  求1 × 2 × 3 × 4 × 5 手工计算方法:

通用的方法 : 设两个变量(被乘数 p, 乘数 i )第一步: 1=>p第二步: 2=>i第三步: p×i=>p第四步: i+1=>i第五步:若 i≤5 ,返回第三步;否则结束

1 × 2,得 2 ;①

6 × 4,得 24;

③2 × 3,得 6 ;

② ④24×5 =120

Page 7: C 语言程序设计 第二章程序的灵魂  --  算法

2-7

2.2 简单算法举例

如果题目改为求 1×3×5×7×9×11

第一步: 1=>p

第二步: 3=>i

第三步: p×i=>p

第四步: i+2=>i

第五步:若 i≤11 ,返回第三步;否则结束 用这种方法表示的算法具有通用性、灵活性

Page 8: C 语言程序设计 第二章程序的灵魂  --  算法

2-8

2.2 简单算法举例

例 2 有 50 个学生,要求将他们之中成绩在 80 分以上者打印出来

算法分析:用 n 表示学生学号, n1 代表第一个学生学号,ni 代表第 i 个学生的学号, g1 代表第一个学生成绩, gi

代表第 i 个学生成绩 算法

第一步 : 1=>i

第二步 : 若 gi≥80 则打印 ni 和 gi ,否则不打印 第三步 : i+1=>i

第四步 : 若 i≤50 返回第二步,否则算法结束

Page 9: C 语言程序设计 第二章程序的灵魂  --  算法

2-9

2.2 简单算法举例

例 3 判断 2000-2500 年中的每一年是否闰年,将结果输出。

分析:闰年的条件: 能被4整除,但不能被 100 整除的年份都是闰年,如 1996,2004 年是闰年; 能被 100 整除,又能被 400 整除的年份是闰年,如 1600,2000 年是闰年。 不符合这两个条件的年份不是闰年

y 不能被4整除

y 能被4整除但不能被 100整除

闰年

非闰年

③y 能被 100整除又能被 400 整除

闰年④ 其他

非闰年

Page 10: C 语言程序设计 第二章程序的灵魂  --  算法

2-10

2.2 简单算法举例

算法1. 2000=>y

2. 若 y 不能被4整除,输出 y“ 不是闰年”,然后转到第 5 步3. 若 y 能被4整除,不能被 100 整除,则输出 y“ 是闰年”,转第

6 步4. 若 y 能被 100 整除,又能被 400 整除,则输出 y“ 是闰年”,

转第 6 步,(否则顺序执行)5. 输出 y“ 不是闰年”6. y+1=>y

7. 当 y≤2500 时转第 2 步,否则算法结束

Page 11: C 语言程序设计 第二章程序的灵魂  --  算法

2-11

2.2 简单算法举例

例 4 求 1- 1/2 + 1/3 -1/4+ … + 1/99 - 1/100 算法:

1. sign=12. sum=13. deno=24. sign=-sign5. term=sign×(1/deno)6. sum=sum+term7. deno=deno+18. 若 deno≤100 返回第 4 步 , 否则算法结束

Page 12: C 语言程序设计 第二章程序的灵魂  --  算法

2-12

2.3 算法的特性

算法应具有以下特点 :

1. 有穷性2. 确定性3. 有零个或多个输入4. 有一个或多个输出5. 有效性

Page 13: C 语言程序设计 第二章程序的灵魂  --  算法

2-13

2.4 怎样表示一个算法

用自然语言表示算法:通俗易懂,但文字冗长,容易产生歧义。

用流程图表示算法: 直观形象,容易理解。

Page 14: C 语言程序设计 第二章程序的灵魂  --  算法

2-14

2.4 怎样表示一个算法

算法的三种基本结构

A

B

a

b

顺序结构

选择结构

p

A B

成立 不成立

a

b

A

p 不成立

成立

a

b

.直到型

( until)循环

当型

(while )循环

p成立

A

b

a .

不成立

Page 15: C 语言程序设计 第二章程序的灵魂  --  算法

2-15

2.4 怎样表示一个算法

例 1  用流程图表示算法:1 × 2 × 3 × 4 × 5 第一步: 1=>p

第二步: 2=>i

第三步: p×i=>p

第四步: i+1=>i

第五步:若 i≤5 ,返回第三步;否则结束

开始

1=>p

2=>i

p×i=>p

i+1=>i

i≤5N

结束

Y

Page 16: C 语言程序设计 第二章程序的灵魂  --  算法

2-16

2.4 怎样表示一个算法

例 2 有 50 个学生,要求将他们之中成绩在 80 分以上者打印出来.用流程图表示算法。 第一步 : 1=>i

第二步 : 若 gi≥80 则打印 ni 和 gi ,否则不打印

第三步 : i+1=>i

第四步 : 若 i≤50 返回第二步,否则算法结束

开始

1=>i

gi≥80Y N

打印 ni 和 gi

i+1=>i

i≤50N

结束

Y

Page 17: C 语言程序设计 第二章程序的灵魂  --  算法

2-17

2.4 怎样表示一个算法

例 用伪代码表示1 × 2 × 3 × 4 × 5:

开始 置 t 的初值为 1

置 i 的初值为 2

当 i≤ 5,执行下面操作  使 t = t×i

  使 i = i + 1

(循环到此结束 )

打印 t 的值结束

Page 18: C 语言程序设计 第二章程序的灵魂  --  算法

2-18

2.4 怎样表示一个算法

也可以写成以下形式:BEGIN ( 算法开始 )

1=>t

2=>i

while i<=5

{ t×i=>t

i+1=>i

}

print t

END ( 算法结束 )

Page 19: C 语言程序设计 第二章程序的灵魂  --  算法

2-19

2.4 怎样表示一个算法

用计算机语言表示算法:求5!用 c 语言表示

void main( ){ int i,t; t=1; i=2; while(i<=5){

t=t*i;   /* 120 */ i=i+1; } printf("%d",t); }

Page 20: C 语言程序设计 第二章程序的灵魂  --  算法

2-20

2.5 结构化程序设计方法

一个结构化程序就是用高级语言表示的结构化算法 用三种基本结构组成的程序必然是结构化程序 结构化程序的特点

自顶向下逐步细化模块化设计 结构化编码

Page 21: C 语言程序设计 第二章程序的灵魂  --  算法

2-21

本章小结

算法的概念 简单算法的设计 算法的特性 算法的表示(流程图、伪代码) 算法的 3 种结构 结构化程序设计思想