1. 算法的实现:程序
程序 = 控制结构 + 原操作 (对固有数据类型的操作)
程序 = 算法 + 数据结构
程序 = 算法 + 数据结构 + 设计方法 + 开发工具 + 运行环境
算法的实现离不开计算机语言!
2. 计算机语言的发展
经历了从机器语言到高级语言,从具象到抽象的过程。
2.1. 从机器语言到高级语言的抽象达
高级程序设计语言的主要好处是:
(1)高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需 要几周时间的培训就可以胜任程序员的工作;
(2)高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高;
(3)高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高;
(4)把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。
2.2. 抽象数据类型
抽象数据类型是算法的一个数据模型连同定义在该模型上并作为算法构件的一组运算。
抽象数据类型带给算法设计的好处有: (1)算法顶层设计与底层实现分离; (2)算法设计与数据结构设计隔开,允许数据结构自由选择; (3)数据模型和该模型上的运算统一在ADT中,便于空间和时间耗费的折衷; (4)用抽象数据类型表述的算法具有很好的可维护性; (5)算法自然呈现模块化; (6)为自顶向下逐步求精和模块化提供有效途径和工具; (7)算法结构清晰,层次分明,便于算法正确性的证明和复杂性的分析。
3. 算法描述语言
3.1. 自然语言
歧义性 比较罗嗦 逻辑性不强 计算机无法理解
3.2. 控制流的组成
任何复杂的算法都可以用顺序、选择、循环三种控制结构组合而成。
3.3. 流程图
优点:
简明易懂
容易实现
缺点:
不够细致随意性强
不够明确
不易表示数据结构
3.4. 盒图
优点
层次感强, 嵌套明确
支持自顶向下、逐步求精
容易转换成高级语言源算法
缺点
不易扩充和修改
不易描述大型复杂算法
3.5. PAD图
3.6. 伪代码
介于自然语言和机器语言之间 方便简单易于书写 被广泛使用
3.7. 程序语言
计算机所能识别的语言 强大,复杂 需要时间学习掌握
#include <stdio.h>
void main()
{
int a, b, c, d;
int max, mid, min;
scanf("%d%d%d", &a, &b, &c);
if(a < b)
{
d = a;
a = b;
b = d;
}
if(c >= a)
{
max = c;
mid = a;
min = b;
}
else
{
if(c >= b)
{
max = a;
mid = c;
min = b;
}
else
{
max = a;
mid = b;
min = c;
}
}
printf("Max:%d Mid:%d Min:%d", max, mid, min);
}
4. 一些经典问题求解
- 求解一元二次方程
- 有5分、2分、1分50枚硬币共100分,求可能的组合
- 综合测评分计算方法
- 求定积分 的值。
- 有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
5. 其他
graph TD
start1(Start)-->s1[S1]-->s2[S2]-->s3[S3]-->end1[End]
start2(Start)-->b[B]
b-->s21[S1]-->end2(End)
b-->s22[S2]-->end2
start3(Start)-->s30[S]-->b30[B]-->end3(End)
b30-->F{Condition?}-->s30