第二章 算法 algorithm
2.1 算法的概念
2.2 简单算法举例
2.3 算法的特性
2.4 算法的表示
2.5 结构化程序设计方法
2.1 算法的概念程序 =数据结构 +算法对数据的描述对操作的描述算法分类:
数值运算算法 ---- 用于求数值解(如:求方程的根 … )
非数值运算算法 ---- 多用于管理领域(如:图书管理、人事管理 … )
例:求 1+2+3+…+100=?
1,1+2,再加 3,再加 4….,最后加 100,等于 5050
2,100+( 1+99) +( 2+98) +…+ ( 49+51) +50=100+49*100+50=5050
2.2 简单算法举例例:求两个数的和
step1:给定两个数的值
step2:做加法运算
step3:将结果保存
step4:输出结果
step1,2? x,3?y
step2,x+y ( 2+3)
step3,5? z
step4:输出 z
#include <stdio.h>
void main( )
{ int x,y,z;
x=2; y=3;
z=x+y;
printf(“z=%d\n”,z);
printf(“%d+%d=%d\n”,x,y,z);
}
输出结果,
z=5
2+3=5
2.3 算法的特性
1,有穷性:一个算法包含有限的操作步骤
2,确定性:算法中的每一个步骤是确定的,含义是唯一的
3,有零个或多个输入
4,有一个或多个输出
5,有效性:算法中每一个步骤应能有效运行
2.4 算法的表示
1,用自然语言表示优点是使用日常用语,通俗易懂缺点是文字冗长,容易出现歧义
2,用流程图表示,用图框表示各种操作优点是直观形象,易于理解起止框处理框输入输出框判断框流程线连接 点注释框常用流程图符号
3,三种基本结构( 表示一个良好算法的基本单元 )
① 顺序结构 ② 选择结构( 分支结构 ) ③ 循环结构( 重复结构 )
A
B
P
A B
成立 不成立成立
A
P 不成立
A
P 成立不成立
4,N-S流程图
A
B
A B
成立 不成立
P
A
当 P成立直到 P成立
A
While( 当型 )循环 Until( 直到型 )循环例:输入 10个数,找出其中最大的数,并输出。
step1,输入一个数,存放在一个变量 max中;
step2,设置用来累计比较次数的计数器 i(也是一个变量 )
1?i;
step3,输入一个数,存放在另一个变量 x中;
step4,比较 max和 x中的数,若 x>max,则将 x的值送入 max,
否则,max的值不变;
step5,i 增加 1,即 i+1?i ;
step6,若 i<9,则返回 step3,继续执行,
否则输出 max中的数,此时 max中的数即为最大数。
输入一个数? max
1? i
输入 x
x?max?是 否
x? max
i+1? i
当 i < 9
输出 max
#include <stdio.h>
void main( )
{ int x,max,i ;
scanf(“%d”,&max);
i=1;
do
{ scanf(“%d”,&x);
if (x>max) max=x;
i=i+1;
}
while ( i<9) ;
printf(“max=%d”,max) ;
}
5、伪代码介于自然语言与计算机语言之间,用文字与符号来描述算法。
例,求 5!
开始置 t 的初值为 1
置 i 的初值为 2
当 i <= 5,执行下面操作,
使 t = t * i
使 i = i + 1
(循环到此结束 )
打印 t 的值结束或
BEGIN(算法开始 )
1 => t
2 => i
while i <= 5
{ t * i => t
i + 1 => i
}
print t
END(算法结束 )
2.5 结构化程序设计方法基本思路,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
1、自顶向下
2、逐步细化
3、模块化设计
4、结构化编码需要解决的问题 P
子问题 p1 子问题 p2 子问题 p3
p12p11 p32p31 p33
设计 设计 设计 设计 设计 设计编码 编码 编码 编码 编码 编码
2.1 算法的概念
2.2 简单算法举例
2.3 算法的特性
2.4 算法的表示
2.5 结构化程序设计方法
2.1 算法的概念程序 =数据结构 +算法对数据的描述对操作的描述算法分类:
数值运算算法 ---- 用于求数值解(如:求方程的根 … )
非数值运算算法 ---- 多用于管理领域(如:图书管理、人事管理 … )
例:求 1+2+3+…+100=?
1,1+2,再加 3,再加 4….,最后加 100,等于 5050
2,100+( 1+99) +( 2+98) +…+ ( 49+51) +50=100+49*100+50=5050
2.2 简单算法举例例:求两个数的和
step1:给定两个数的值
step2:做加法运算
step3:将结果保存
step4:输出结果
step1,2? x,3?y
step2,x+y ( 2+3)
step3,5? z
step4:输出 z
#include <stdio.h>
void main( )
{ int x,y,z;
x=2; y=3;
z=x+y;
printf(“z=%d\n”,z);
printf(“%d+%d=%d\n”,x,y,z);
}
输出结果,
z=5
2+3=5
2.3 算法的特性
1,有穷性:一个算法包含有限的操作步骤
2,确定性:算法中的每一个步骤是确定的,含义是唯一的
3,有零个或多个输入
4,有一个或多个输出
5,有效性:算法中每一个步骤应能有效运行
2.4 算法的表示
1,用自然语言表示优点是使用日常用语,通俗易懂缺点是文字冗长,容易出现歧义
2,用流程图表示,用图框表示各种操作优点是直观形象,易于理解起止框处理框输入输出框判断框流程线连接 点注释框常用流程图符号
3,三种基本结构( 表示一个良好算法的基本单元 )
① 顺序结构 ② 选择结构( 分支结构 ) ③ 循环结构( 重复结构 )
A
B
P
A B
成立 不成立成立
A
P 不成立
A
P 成立不成立
4,N-S流程图
A
B
A B
成立 不成立
P
A
当 P成立直到 P成立
A
While( 当型 )循环 Until( 直到型 )循环例:输入 10个数,找出其中最大的数,并输出。
step1,输入一个数,存放在一个变量 max中;
step2,设置用来累计比较次数的计数器 i(也是一个变量 )
1?i;
step3,输入一个数,存放在另一个变量 x中;
step4,比较 max和 x中的数,若 x>max,则将 x的值送入 max,
否则,max的值不变;
step5,i 增加 1,即 i+1?i ;
step6,若 i<9,则返回 step3,继续执行,
否则输出 max中的数,此时 max中的数即为最大数。
输入一个数? max
1? i
输入 x
x?max?是 否
x? max
i+1? i
当 i < 9
输出 max
#include <stdio.h>
void main( )
{ int x,max,i ;
scanf(“%d”,&max);
i=1;
do
{ scanf(“%d”,&x);
if (x>max) max=x;
i=i+1;
}
while ( i<9) ;
printf(“max=%d”,max) ;
}
5、伪代码介于自然语言与计算机语言之间,用文字与符号来描述算法。
例,求 5!
开始置 t 的初值为 1
置 i 的初值为 2
当 i <= 5,执行下面操作,
使 t = t * i
使 i = i + 1
(循环到此结束 )
打印 t 的值结束或
BEGIN(算法开始 )
1 => t
2 => i
while i <= 5
{ t * i => t
i + 1 => i
}
print t
END(算法结束 )
2.5 结构化程序设计方法基本思路,把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
1、自顶向下
2、逐步细化
3、模块化设计
4、结构化编码需要解决的问题 P
子问题 p1 子问题 p2 子问题 p3
p12p11 p32p31 p33
设计 设计 设计 设计 设计 设计编码 编码 编码 编码 编码 编码