第 1章 绪 论
1.1 程序设计语言的发展
1.2 程序设计的基本过程
1.3 程序设计的基本方法
程序设计语言一般分为机器语言, 汇编语言和高级
语言三大类 。
1,机器语言
对于计算机来说, 一组机器指令就是程序, 称为机
器语言程序 。
2,汇编语言
为了便于理解与记忆,人们采用能帮助记忆的英文
缩写符号(称为指令助记符)来代替机器语言指令代码
中的操作码,用地址符号来代替地址码。
3,高级语言
机器语言和汇编语言都是面向机器的语言,一般称
为低级语言。
1.1 程序设计语言的发展
表 1.1 语 言 名 称 适 用 范 围
Basic 教学和小型应用程序的开发
Fortran 科学及工程计算程序的开发
Pascal 专业教学和应用程序的开发
C 中, 小型系统程序的开发
COBOL 商业与管理应用程序的开发
dBASE 数据库管理程序的开发
FoxBASE 数据库管理程序的开发
C++ 面向对象程序的开发
LISP 人工智能程序的开发
PROLOG 人工智能程序的开发
Java 面向对象程序的开发
1.2 程序设计的基本过程
程序设计=算法+数据结构+方法+工具
1.问题分析
( 1)问题的性质
( 2)输入 /输出数据
数据处理是计算机应用中最广泛的一个领域。在用计算
机解决问题时,一般总要有一些输入数据,计算的结果也要
以某种方式进行输出。
( 3) 数学模型或常用的方法
对于数值型问题,一般要考虑数学模型的设计,或者要
对常用的一些方法进行分析与比较,从而根据问题的性质选
择一种合理的解决方案。
2.结构特性的设计
( 1)控制结构
1966年,Bohm和 Jacopini证明了任何复杂的程序都
可以用顺序、选择和循环 3种基本结构组合而成。
这几种基本控制结构的传统流程图如图 1.1所示。
图 1.1 基本控制结构的传统流程图
顺序结构
A
B
A B
S
S
A
1
A
2
A
n
P
P
P =1
P =2
P= n
P
F T
选择结构
F
F
T
T
F

F
T
T
F
当型循环 直到型循环
多情况选择结构
( 2)数据结构
在计算机的各种应用中,数据处理所占的比
重将越来越大。在实际应用中,需要处理的数
据元素一般有很多,而且,各数据元素之间不
仅具有逻辑上的关系,还具有在计算机中实际
存储位置上的关系。
3.算法的设计
所谓算法,是指解题方案的准确而完整的描述。
选择算法主要应考虑以下两个基本原则:
① 实现算法所花费的代价要尽量的小,即计算工作量
要小;
② 根据算法所得到的计算结果应可靠。
例 1.1 某计算工具具有 4位有效数字 ( 如 4位数学用表 ), 现要
计算当 x= 1000时的下列函数值:
解:直接将 x= 1000代入函数表达式, 其计算结果如下:
将该函数表达式作如下恒等变换:
然后将 x= 1000代入, 其计算结果如下:
xxxf ??? 1)(
02.062.3164.3110001001100011000)1000( ????????f
xx
xxxf
??
????
1
11)(
01581.062.3164.31 110001001 1100011000 1)1000( ????????f
4,流程的描述
( 1) 自然语言
自然语言是人们在日常生活, 工作, 学习中通用的语
言, 一般不需专门的学习和训练就能理解用这种语言所表
达的意思 。
( 2) 算法描述语言
为了说明程序的流程,还可以用专门规定的某种语言
来描述,这种语言通常称为算法描述语言。
( 3)流程图
人们在程序设计的实践过程中,总结出了一套用图
形来描述问题的处理过程,使流程更直观,易被一般人
所接受。 输入 x,y
x =0
y e s no
输出错误信息
y /x ? z
输出 z
结束
图 1.2 结构化流程图例
( 4) 编程
用某种程序设计语言编写的程序,本质上也是问题
处理方案的描述,并且是最终的描述。
5,调试与运行
最后编写出的程序还需要进行测试和调试 。 只有经
过调试后的程序才能正式运行 。
1.3 程序设计的基本方法
1.3.1 结构化程序设计
结构化程序设计要求把程序的结构限制为顺序, 选择和
循环 3种基本结构, 以便提高程序的可读性 。 这种结构化程序
具有以下两个特点:
( 1) 以控制结构为单位, 只有一个入口和一个出口, 使各单
位之间的接口比较简单, 每个单位也容易被人们所理解;
( 2) 缩小了程序的静态结构与动态执行之间的差异, 使人们
能方便, 正确地理解程序的功能 。
NS图是一种不允许破坏结构化原则的图形算法
描述工具,又称盒图。
NS图有以下几个基本特点:
( 1) 功能域比较明确, 可以从框图中直接反映
出来;
( 2) 不可能任意转移控制, 符合结构化原则;
( 3) 很容易确定局部和全程数据的作用域;
( 4) 很容易表示嵌套关系, 也可以表示模块的
层次结构 。
1,顺序结构
顺序结构的结构化流程图如图 1.3所示。
图 1.3 顺序结构的结构化流程图
S
1
S 2
S 3
2,选择结构
( 1) 两路分支结构
两路分支选择结构的结构化流程图如图 1.4所示。
图 1.4 两路分支选择结构的结构化流程图
条件
满足 不满足
S 1 S 2
( 2) 多路分支结构
图 1.5 多路分支选择结构的结构化流程图
条件
情况 1
S 1
情况 2
S 2
情况 n
S n


3,循环结构
循环结构分为当型循环结构和直到型循环结构 。
( 1) 当型循环结构
当型循环结构的结构化流程图如图 1.6所示。
图 1.6 当型循环结构的结构化流程图
W H I L E 条件
S
( 2) 直到型循环结构
直到型循环结构的结构化流程图如图 1.7所示。
图 1.7 直到型循环结构的结构化流程图
UN T I L 条件
S
图 1.8是顺序输出 3到 100之间所有素数的结构化流程图,
在这个流程图中, 表示了 3种基本结构互相嵌套的情况 。
3 ? n
n < 1 0 0
i ≤ k 且 f lag = 0
i 除尽 n?

1 ? f lag
i+1 ? i
f lag = 0?
输出 n

n + 1 ? n


n ? k,2 ? i,0 ? f lag
图 1.8 3种基本结构互相嵌套的情况
1.3.2 模块化程序设计
模块化设计是指把一个大程序按人们能理解的大小规模进行
分解。
1.按功能划分模块
( 1)模块间的接口关系比较简单,并且每个模块都是人的智力
所能及的。
( 2)各模块的功能比较单一,当需要修改某一功能时,一般只
涉及到一个模块,不会影响到其他模块。
( 3)人们可以脱离程序的上、下文也能单独地验证一个模块的
正确性。
( 4)在扩充系统或建立新系统时,可以充分利用已有的一些模
块,用积木式的方法进行开发。
2,按层次组织模块
主模块
模块 2
模块 5 模块 4
模块 1 模块 3
模块 6
图 1.9 按层次组织模块
1.3.3 自顶向下, 逐步细化的设计过程
自顶向下, 逐步细化的设计过程, 包括以下两个方面:
( 1) 将一个复杂问题的解法分解和细化成由若干模块组
成的层次结构;
( 2) 将一个模块的功能逐步分解细化为一系列的处理步
骤, 直到某种程序设计语言的语句或某种机器指令 。
自顶向下、逐步细化的设计过程具有以下两个优点:
( 1)自顶向下、逐步细化的方法符合人们解决复杂问题
的普遍规律,可以显著提高程序设计的效率;
( 2)用先全局后局部、先整体后细节、先抽象后具体的
逐步细化过程设计出的程序具有清晰的层次结构,容易阅
读和理解。