nbhkdz.com冰点文库

《大学计算机基础》第二层次子课程-C 程序设计基础(2009V0)

时间:2010-10-07


大学计算机基础

教学课件

北京航空航天大学
1

第二层次子课程—— C 程序设计基础
5.1 5.2 5.3 程序和程序设计语言 算法
程序设计步骤与程序设计方法

5.4
5.5

常用程序设计语言
程序设计范型
2

本课程重点
?

?
? ? ? ?

程序的概念 程序设计语言的结构 算法的概念与描述方法 程序设计步骤 程序设计方法 VC 集成开发环境

3

5.1 程序和程序设计语言
? 5.1.1 程序的一般概念 ? 5.1.2 程序设计语言的概述 ? 5.1.3 程序设计语言的结构

4

5.1.1 程序的一般概念
?

生活中程序的概念

何事?

例1:年终总结会的程序: ? 会议主持宣布会议开始 ? 领导讲话 ? 个人或团队代表发言 ? 领导总结 ? 会议主持宣布会议结束

策划

导演

5

5.1.1 程序的一般概念(续1)
?

生活中程序的概念
依据实际案例并精心计算 甲地

例2:某人从甲地到丙地去。

乙地 丙地

步行 ? 骑车 ? 开车 ? 时间 ? 红绿灯
?

?

铁道
6

解决该计算问题的方法、步骤就包含了程序的概念。

5.1.1 程序的一般概念(续2)
?

计算机程序的概念:
? 为实现某一算法而编写的指令序列。

宏观地描述该指令序列,可用计算机的
? ? ?

机器语言 汇编语言 高级语言

? 用经典的公式可表示为:

程序 = 算法 + 数据结构

7

5.1.2 程序设计语言的概述
?

程序设计——编写程序的全过程。 有学者认为: ? 程序设计 = 算法 + 数据结构 + 程序设计语言 程序设计语言——人和计算机之间对话和交流的一种 工具,用于描述计算机所执行的操作。 计算机程序设计语言有几百种,但是最常用的不过10 多种,了解一些程序设计语言的不同特性,有助于为 特定任务而选择适当的程序设计语言。

?

?

8

不同类型的计算机语言

? ? ?

机器语言(Machine Language) 汇编语言(Assembly Language ) 高级语言(High Level Language)

程序设计语言的特点

9

5.1.3 程序设计语言的结构
?

?

?

程序结构的多样性: ? 结构化程序 ? 模块化程序 ? 面向对象的程序结构 一个良好结构的程序具有以下等特点: ? 结构清晰 ? 容易阅读 ? 容易理解 ? 容易验证 ? 容易维护 1996年,计算机科学家Boehm和Jacopini提出并从数学上证明 任何一个算法,都能以三种基本控制结构表示,即顺序结构、 选择结构和循环结构。
14

结构化程序设计中——顺序结构
?

按照程序语句行的自然顺序,一条语句一条语句 地执行程序。 入口 语句A

语句B
出口

15

结构化程序设计中——选择结构
?

根据条件的判断确定应该执行哪一条分支的语句 序列。(又称为分支结构 ) 入口 真 语句序列A
单分支、多分支结构?

条件

假 语句序列B

出口
16

结构化程序设计中——循环结构
?

主要用于重复执行相同的语句序列(被称为循环体), 直到判定条件为假(或为真)时才可终止执行循环体。 入口 入口 语句序列 真 条件 假 出口
直到型循环结构

条件 真 语句序列



出口
当型循环结构
17

结构化程序设计的特点
? ?

每种结构,只有一个入口和一个出口,这是结构化设计 的一个原则。 遵循结构化程序设计的原则,按照结构化程序设计方法 设计出的程序具有明显的优点:
?

其一,程序易读、理解和维护。程序员用结构化编程 方法,将复杂程序分解成若干子结构,便于控制、降 低程序的复杂性,因此容易编写程序,同时便于验证 程序。 其二,提高编程工作效率,降低软件开发成本。由于 结构化编程方法能够把错误控制到最低限度,因此能 够减少调试和查错的时间。
18

?

5.2 算法
? 5.2.1 算法的概念与特征 ? 5.2.2 算法的描述方法 ? 5.2.3 程序设计典型算法

19

5.2.1 算法的概念与特征
1976年Niklaus Wirth(也是Pascal语言发明者, 1984年获得图灵奖)的专著: Algorithms + Data Structures = Programs (算法 十 数据结构 = 程序) 在计算机软件开发行业中产生了极为深远的影响,从 而推动了软件开发技术和方法步入正轨,使人们开始深入 研究数据结构和算法设计与分析的技术和方法。

20

1. 算法的定义与分类
?

CPU所遵循的机器周期与下面这个算法一样简单。
只要未发出停机指令就执行以下步骤: a. 取一条指令。 b. 解码该指令。 c. 执行该指令。

?

生活当中的普通活动——剥豌豆。
获得一篮子未剥皮的豌豆和一只空碗。

只要篮中还有豌豆就执行下面的步骤:
a. b. c. d.

从篮子里拿出一个豌豆。 剥开豌豆的豆荚。 把剥落得豆放到碗里面。 扔掉空豆荚。
21

1. 算法的定义与分类 (续1)
? ?

算法的定义——算法是定义一个可终止过程的一组有序的、 无歧义的、可执行的步骤的集合。 华氏温度与摄氏温度的转换问题 ? 算法1:用代数公式表示

算法的细 致程度
?

?9? F ? ? ? C ? 32 ? 5?
9 5

算法2:用指令表示 将摄氏温度数值乘以

外行则认为该指令是 模糊的、有歧义的。 ,然后在乘积上加32。

22

1. 算法的定义与分类 (续2)
?

用一张正方形的纸折叠成一只鸟
? ?

该过程通过自然的沟通方式常常会引起误解。 有些时候是因为算法描述中使用的术语可能拥有多 种含义。

?

计算机科学解决歧义性问题的方法
? ? ?

建立一组严格定义的构件块。
利用一系列的构件块来构建算法的表示。 这种构件块称作原语(primitive)。

23

1. 算法的定义与分类 (续3)
?

原语——被用于消除算法表示中的歧义性问题。
? ?

语法——是原语的符号表示(air)。 语义——是指该原语的含义(气体物质)。

?

原语的集合以及说明如何组合这些原语来表示比较复杂的想 法的规则集合就构成了一种程序设计语言。

?

程序、算法和进程既是不同的却又有关联的。
? ?

程序是一个算法的表示。 进程是执行算法的活动。

24

1. 算法的概念
?

算法——解决某个具体问题而采取的方法与步骤的完整和 准确的描述。 ? 是指令的有限序列,其中每一条指令表示一个或多个 操作。 ? 是问题的程序化解决方案,这些解决方案本身并不是 答案,而是获得答案的精确指令。 算法的分类
?

?

顺序算法:是由冯· 诺依曼型计算机体系结构所决定的, 其主要思想是指令逐条运行,每次执行一步操作。
并行算法:要求在一些更新式的计算机中可以在同一时 间执行多条指令。
25

?

2. 算法的特征
?

一个算法必须具备五项基本特征:有穷性、确定性、 数据输入、数据输出和可行性。

(1)有穷性——算法是有序指令的集合,并在执行有穷步骤后能够 终止。 (2)确定性——每条指令必须有确切的含义,且无二义性。在任何 条件下,算法只有唯一的一条执行路径,即对于相同的输入数 据只能得到相同的输出数据。 (3)输入数据——可有零个或多个输入数据。这些输入数据取自于 某个特定对象的集合。 (4)输出数据——必须有一个或多个输出数据。

(5)可行性——描述的操作都可以通过已经实现的基本运算执行有 限次来实现,也可以证明整个算法实施后可以得到预期的解。
26

2. 算法的特征(续1)
?

?

算法的发现 ? 程序开发由两个活动组成——发现潜在的算法和以程序的方式表 示算法。 问题求解的艺术 ? 数学家(波利亚G· Polya)在1945年提出非严格定义的问题求 解阶段: 第1阶段 理解问题。 阶段与步骤 第2阶段 设计一个解决问题的计划。 的差异 第3阶段 完成计划。 第4阶段 从准确度及其是否有潜力作为一个解决其他问题的工具这 两方面来评估这个计划。 上述阶段移植到程序开发中变成: 第1阶段 理解问题。 第2阶段 寻找一个可能解决问题的算法过程的思路。 第3阶段 阐明算法并且用程序将其表达出来。 第4阶段 从准确度及其是否有潜力作为一个工具解决其他问题这两 方面来评估这个程序。

27

例. 甲承担了确认乙的3个孩子年龄的任务
乙告诉甲3个孩子的年龄乘积是36。 在考虑了这个线索以后,甲要求乙给出另外的线索。 乙告诉甲3个孩子的年龄之和。 甲再次要求乙给出其他线索。 乙告诉甲他的最大的一个孩子弹钢琴。 在得到这个线索之后,甲得到了乙的3个孩子的年龄。 1+1+36=38 1+6+6=13 (1,1,36) (1,6,6) 1+2+18=21 2+2+9=13 (1,2,18) (2,2,9) 1+3+12=16 2+3+6=11 (1,3,12) (2,3,6) 1+4+ 9 =14 3+3+4=10 (1,4, 9) (3,3,4) (a)乘积为36的三元组 (b)a中的每个三元组的和
? ?

这种解决问题过程中的不规则性是开发问题求解的系统方法的基础。 另一个不规则性在于,那些还没有得到明显成功的问题解决者所得到 的神奇灵感可能在完成其他任务的时候突然成为了原来问题的一个解 决方法。
28

例. 求甲乙丙丁赛跑的名次排序
在甲、乙、丙和丁进行赛跑之前,他们分别对结果进行预测: 甲预测乙将会获胜。 乙预测丁将是最后一名。 丙预测甲是第三名 丁预测甲的预测将是正确的。 这几个预测只有一个是正确的,并且是最后的获胜者做出的预测。

解1:丙、乙、甲、丁 解2:丙、丁、甲、乙

被排除

进入问题后,会发现:获得完整的解决方法的 过程仅仅是将我们的知识在此处扩展应用。
29

算法的入门
?

?

知道怎样进入问题并不等于知道如何去做这件事。为了得 到立足点,也就是认识到如何把对于问题的初始介入扩展为 问题的解决方法,就为要求问题解决者创造一个可能的入口。 对于如何入门波利亚和其他人提出了很多通用的方法。 ? 反方向解决问题(白纸与纸鸟) ? 寻找一个相关的、解决起来较简单的并且在此以前已经 得到解决的问题,然后尝试把这个解决方法用到当前问 题中。
?

逐步求精(stepwise refinement)数据处理中一种重要设计方法

? 自顶向下方法(top-down methodology)一般到特殊 ? 自底向上方法(bottom-up methodology)特殊到一般
30

算法的入门 (续1)
David 、 Alice 、 Carol和Bob )按照升 序排序指令。 特定实例 1. 交换名字 David和Alice。 2. 将名字Carol移到Alice和David之间。 3. 将名字Bob移到Alice和Carol之间。
?四个人名(

通常,程序开发并不是去解决一个问题的一个特定实 例,而是要去寻找一种适用于求解一个问题的所有实例的 一般算法。 可以通过考虑一个特殊的情况来进入问题,然后得到 一个能够用于开发通用算法的一般原则。 (三个人名排序指令)

31

例5.1 一个非算法的计数过程
① 令n为0; ② 置n为n+1; ③ 返回②。
结论:不能称为算法。 原因:违背了算法特征中(1)、(4)、(5)。

有穷性(有效性):考察下面这条指令: 给出一个所有整数的列表。
32

例5.2 计数器算法
用自然语言编写一个不超过1万次的计数器算法:

① 令n为0;
② 置n为n+1 ③ 若n小于10000,则返回②;否则,输出n之值, 且算法到此结束。 结论:是算法。 原因:符合算法特征。 在算法设计过程中,其实还有有关正确性、可读 性、健壮性、效率与低存储量需求,以及算法效率的 度量等问题。
33

5.2.2 算法的描述方法

?

流程图(FlowChart)

?
? ? ? ?

PAD图(Problem Analysis Diafram,问题分析图)
N-S图 自然语言 伪代码 UML图 (Unified Modeling Language,统一建模语言)

34

1. 流程图
?

流程图(框图)用不同形状的几何图形表示不同性质的操 作,用流程线指明算法的执行方向。ANSI(美国国家标准 化协会)、ISO(国际标准化组织)和我国国家标准中均 有类似的规定。常见的流程图符号如下:

?

向下或向右的流程线可以不画出箭头。当流程线有交叉时, 则画一半圆通过交叉点。
35

用流程图描述的计数器算法

36

3. N-S图
?
?

1973年美国两位学者提出无流程线的N-S图(盒图)。 结构化程序设计由三种基本结构而组成,则算法也应采用 结构化描述方法,N-S图的基本单元是矩形框,框内可以 有三种基本结构,形如堆积木,也只有一个入口和一个出 口。三种基本结构的N-S图如下:

38

用N-S图描述的计数器算法

39

4. 自然语言
?

自然语言是人们日常生活、工作和学习中使用的通用语言, 使用自然语言的文字描述算法通俗易懂,但也有它的缺陷: (1)容易产生歧义性,因为自然语言经常要根据上下文才 能判别其含义,不太严格。 (2)自然语言很难清楚地表达算法的逻辑流程,对于算法 中的条件判断、循环,尤其是在这些处理中还有多层嵌 套,就很难用清晰而直观的语言来表达算法的流程。因 此仅适于描述简单问题。

40

5. 伪代码
?

?

伪代码是介于自然语言和计算机语言之间的文字和符号, 它不能被计算机所理解,但使用伪代码描述的算法很容易 转变成某种编程语言。 常用的伪代码是用自然语言与类Pascal或类C语言相结合 的方法来描述算法。 //用伪代码描述的计数器算法如下: n ← 0 do n ← n+1

while n < 10000
输出n,且算法到此结束。
41

流程图形的绘制工具
? ?

当使用图形描述算法时,流程图形的绘制工具有很多。 一般比较简单的图形可用Word或PowerPoint中的绘图工具栏来制 作完成,若安装了功能强大的Microsoft Office Visio 2003,则可 以更快地绘制具有专业水平的高质量图形。

?

在Visio 2003中:
? ?

含有丰富的基本流程图形状。 能够快速、简便地建立流程图、组织图、日历时间表和其它多种 图表。 支持缩放矢量图形(SVG),这是一种新的图形格式标准。 集合Internet的运用,可使用不同的语言创建绘图、创建包含多 种语言的绘图以及跨多种语言共享绘图和展开协作。

? ?

?

通过支持新的汉字编码标准GB18030,可从这个新的字符编码 集中创建包含汉字的绘图。
42

5.2.3 程序设计典型算法
?

算法——数值算法或非数值算法: ? 数值算法——主要用于数值求解或分析,如: 求和、求平方根、解方程、用组合梯形法则 求定积分等。
?

非数值算法——主要用于各领域管理类的信 息处理,如:各种排序、查找等。

?

本节介绍一些简单的常用算法,并假设各数据均 能满足值域要求。

43

1. 求3个整数的最大值算法
?

为了编写求3个整数最大值的通用实现过程,采用主函 数调用子函数的形式描述算法。 (1)主函数算法描述如下: ① 输入三个整数a,b,c; ② max = max3(a,b,c); ③ 输出max。 (2)max3 子函数算法描述如下: ① 从a与b中取大数送m中; ② 从m与c中取大数送m中; ③ 返回m给主函数。
44

求3个整数的最大值的C程序
/*使C预编译包含I/O头文件,则可用scanf、printf函数 */ #include <stdio.h> void main(void) { int a, b, c, max; /* 定义 4 个整型变量 */ int max3(int a, int b, int c); /* max3 函数原形声明 */ printf(“Input 3 integer numbers:”);/* 输出双引号中的提示信息 */ scanf(“%d%d%d”, &a, &b, &c); /* 输入 3 个整数 */ max = max3(a,b,c); /* 调用 max3 函数求最大值 */ printf(“The max is: %d \n”, max); /* 输出 max 中的最大值 */ } /* End of main function */ /* 求 3 个整数的最大值的子函数 max3 */ int max3(int a,int b,int c) /* max3 函数将返回整型值 */ { int m; /* 定义 m 整型变量 */ if( a > b ) m = a; /* 从 a 与 b 中取大数送 m 中 */ else m = b; if( m > c ) ; /* 从 m 与 c 中取大数送 m 中,“;”即m=m */ else m = c; 45 return(m); /* 返回 m 给主函数 */ } /* End of max3 function */

2. 欧几里得算法
?

求解两个不全为0的非负整数m和n的最大公约数,可以 采用以下欧几里得算法。 (1)欧几里得算法主函数 描述如下: ① 输入两个不全为0的 非负整数m,n; ② Ecd = Euclid(m,n); ③ 输 出 Ecd ,且 算法到 此结束。
( 2 ) Euclid(m,n) 子 函 数算法描述如下: while n ≠ 0 do r ← m mod n m ← n n ← r return m

46

3. 两个变量值的交换算法
?

计算机实现的两个变量值的交换算法如下: ① 令 a=5, b=10 ② c ← a, a ← b, b ← c 三角对换法 ③ 输出 a 和 b 的值。

/* 两个变量值交换算法的 C 源程序 */ void main(void) { int a=5, b=10, c; /* 定义 a、b、c 3个整型变量 */ printf(“交换前: a=%d, b=%d\n”, a, b);/* 交换前输出a和b的值 */ c = a; /* 将 a 中的值赋值给 c */ a = b; /* 将 b 中的值赋值给 a */ b = c; /* 将 c 中的值赋值给 b */ printf(“交换后: a=%d, b=%d\n”, a, b); /* 交换后输出a和b的值*/ } /* End of main function */
47

4. 排序算法
?

给定一个有n个元素可排序的序列,例如数字数据或字符 串数据等,要求按照升序或降序方式重新排列。 排序算法:如冒泡排序法、选择排序法、插入排序法、合 并排序法、快速排序法等等排序算法。

?

48

蛮力法中的选择排序法
?

按照降序方式排序的选择排序算法: SelectionSort( Array[ 0..n-1 ] ) /* 本算法用选择排序法对给定数组按照降序方式排序 */ /* Array[0..n-1 ]是有n个元素的可排序数组 */ /* 本算法的结果在Array数组中 */ for i ←0 to n-2 do max ← i for j ← i+1 to n-1 do if Array[ j ] > Array[ max ] max ← j swap Array[ i ] and Array[ max ]
49

选择排序法的 C 程序
/* SelectionSort( Array[ 0..n-1 ] )选择排序算法的 C 源程序 void SelectionSort( int n, int Array[ ] ) */

{

int
{

i, j, max, t;

/* 定义4个整型变量

*/

for( i=0; i <= n-2; i++ ) max = i;

/* 做 n-1 遍扫描寻找最大元素 */ /* 记录当前扫描最大元素的位置 */

for( j=i+1; j <= n-1; j++ ) /* 在 n-i 个元素中找最大元素 */
if( Array[j] > Array[max] ) max = j; /* } } /* End of SelectionSort function */
50

/* 记录大数元素的下标位置 */ */

利用 t 变量做三角对换

t = Array[i], Array[i]=Array[max], Array[max]=t;

选择排序法降序方式排序操作过程
?

例如:对序列89,29,68,90,17,34,45操作。 每行表示该算法的一次迭代,即从尾部到竖线的一遍扫 描;找到的最大元素用黑体字表示,竖线左边元素已经 位于它们的最终位置,所以在当前和以后的循环中,都 不必再操作了。排序操作过程如下:
| 89 29 68 90 17 34 45
90 | 29 68 89 17 34 45 90 89 | 68 29 17 34 45 90 89 68 | 29 17 34 45 90 89 68 45 | 17 34 29 90 89 68 45 34 | 17 29 90 89 68 45 34 29 | 17
51

5. 查找算法
?

查找是指从给定的集合(或者是多重集,它允许几个元素 具有相同的值)中查找一个给定的值(称为查找键 K)。 常用的查找算法有顺序查找和折半查找,还有那些将原 来的集合表示为另一种形式以方便查找的算法等等。
? ?

?

顺序查找——直接从头到尾搜索集合的查找键。 折半查找——必须首先将集合按照降序或升序排序, 然后利用折半技术搜索集合的查找键,所以,当集合 是有序的时候,使用折半查找效率高、速度快。

52

判定哪一种算法是最佳方案
?
?

?

针对排序和查找方面的算法更多,例如,采用分治法、 减治法、变治法等等方法中的各种排序和查找算法。 运用经典的算法设计技术——时空权 技术和思维 衡、动态规划、贪婪技术等;算法能 方式都是不 力的极限中的决策树技术、在多项式 可或缺的 的时间内求解、数值分析,超越算法 能力的极限中的回溯发、分支界限法 和近似算法设计技术。 鞭策学习和 托马斯· 爱迪生(1847-1931)的名 掌握程序设 计中的算法 言:“不断关注那些已被他人成功应 设计与分析 用的新思路。你的原创思想只应该应 技术 用在那些你正在研究的问题上”。
53

5.3 程序设计步骤与程序设计方法
? 5.3.1 程序设计步骤

? 5.3.2 程序设计方法

54

5.3.1 程序设计步骤
一般程序设计应该包含以下4个步骤: (1)针对具体问题进行分析——了解问题性质,明确问题解决所达目标, 提供的输入是什么?最终实现的输出是什么?执行中要做什么?怎么 做?并建立相应的数学模型。
?

(2)确定数据结构并设计相应的算法——对具体问题进行概念抽象,构造 出解决问题的轮廓,设计程序的数据结构和算法。

(3)编写实现算法的程序——根据算法确定解决问题的详细步骤,通常是 通过绘制程序流程图,来描述问题处理的过程;然后按照流程图的描 述选用某种程序设计语言编写程序。
(4)测试与调试程序——在程序设计过程中,经常不是那么一帆风顺的, 尤其是初学者会遇到各种这样或那样的问题,还有一些问题可能是不 可预测的,往往不得不返到上一步骤中更改或调整相应的内容,并将 相应文档也一并修改,通过举一反三的方法来解决给定问题。
55

测试程序与调试程序
?

测试程序

为了发现程序中的设计错误而运行程序 。 ——所使用的测试用例尤其重要,因为不仅需要合法 值域用例,而且非法值域用例也是必须的。 ——程序测试的成功与否直接可以体现程序健壮性。 ——当软件项目是由团队开发时,测试程序可分为: 单元测试、组装测试和确认测试。
?

调试程序 错误定位和纠错的过程,这一过程的快慢与程序设计 人员的编程经历和经验是密切相关的 。
56

高级语言编写和运行过程
开始 编辑源程序 检查确认

yes

有错? no 编译程序 有错? no 连接程序

源文件

yes
其它目标文件

目标文件

库函数

yes

有错? no 运行程序 有错? no
结束

可执行文件

yes

数据

57

5.3.2 程序设计方法
? ?

早期的程序设计方法 结构化程序设计方法

?

面向对象程序设计方法

58

1. 早期的程序设计方法
?

早期的程序设计方法追求程序的高效率,编程过份依赖 技巧,忽视程序清晰,而不注重所编写程序的结构,很 少考虑程序的规范化问题,也就是没有固定程序设计方 法的时期。 程序的可读性、可重用性都很差。其中典型问题是:频 繁使用goto语句,特意算计如何节省内存空间。 虽然这些方法存在很多问题,但当时受限于计算机运行 速度慢、内存容量小、硬件价格昂贵,程序的规模也比 较小,对于单人完成较为简单的任务,事实上这些方法 还是经常被采用的。
59

?

?

2. 结构化程序设计方法
?

结构化程序设计方法出现在70年代中期。 ? 随着计算机硬件成本急剧下降,软件需要处理的复杂问 题也就越来越多。
?

为了摆脱60~70年代初的软件危机,因为当时编程无章 可循,程序常常带有强烈的个人色彩,程序的可读性差, 程序的调试和维护更困难,促使人们认真反省和研究程 序设计中一系列根本性问题:
? ? ? ? ?

程序的基本结构是什么? 程序设计应当采用什么方法? 算法设计先于程序编码? 清晰第一,效率第二? 程序设计技术与方法如何规范化和工程化?

解决手工 作坊式软 件开发的 弊端

60

结构化程序设计方法的特点
?

结构化程序设计方法的特点: 自顶向下、逐步求精 ? 划分功能模块 ? 结构化编程
?

?

使得程序层次分明、逻辑清晰、功能独立,简化了开发 程序的复杂性,增加了程序的可靠性,能够充分发扬团 队精神快速而高效地完成项目开发,增强系统的可维护 性,使程序设计更加规范化。
61

3. 面向对象程序设计方法
? ?

面向对象程序设计方法出现在80年代中后期。 随着计算机硬件技术的高速发展,计算机的性能也越来 越强,用途也更加广泛。软件产业所面临的问题需求不 断扩大,程序也就越来越庞大而复杂。 在面向过程的程序设计中——软件设计的主要工作就是 用不同的功能模块分别描述它们的求解过程。 在结构化程序设计中——数据和处理数据的过程分离为 相互独立的实体,它只是封装了各个功能模块,而每个 功能模块可以随意修改未加封装的数据。 新时期的新问题,以及软件产业的更高要求,迫使人们 再次寻求更加科学、更加先进的程序设计方法。
62

?

?

?

面向对象程序设计( OOP )
?

Object-Oriented Programming 是建立在结构化程 序设计基础上的,但它不再是从功能入手,而是从对 象入手。

?

采用的是一种结构模拟的方法。用“类”描述具有相 同属性特征的一组对象,用“封装”将对象的属性和 行为分别用适当的数据结构和方法来描述,并将它们 绑定在一起形成一个可供访问的基本逻辑单元,利用 “继承”实现类与类之间的数据和方法的共享。
63

面向对象程序设计的重要概念
?

面向对象程序设计的重要概念:
? ? ? ?

对象(Object) 类(Class) 消息(Message) 方法(Method)

64

对象(Object)
?

面向对象程序设计中的对象——现实世界中的客体在应 用程序中的具体体现,其中封装了客体的属性信息和行 为方式,并用数据表示属性,用方法表示行为方式。
对象中的数据记录了客体的属性状态,方法决定了客体 所能够实施的操作行为和与其它对象进行通信的接口方 式。 对象并非孤立存在,消息传递是对象之间相互联系的唯 一途径,发送者发送消息,接收者通过调用相应的方法 响应消息,这个过程被不断地重复,从而驱动整个程序 的运转。
65

?

?

类(Class)
?

人类在认知客观世界时,将众多的事物归纳、划分成一 些类,这是经常采用的思维方法。分类所依据的原则是 抽象。
类是具有相同属性和行为方式的一组对象的集合,或者 说,类是指对一组具有相同特征(包括属性、操作、方 法、关系、行为)的对象的抽象描述,任何对象都是某 个类的实例。 对象是系统运行时将类作为生成对象实例的模板,通过 分配私有存储空间,然后对相应的属性赋初始值而创建 的,这个过程在面向对象程序设计中称为“实例化”。 类与对象的关系犹如模具与铸件之间的关系。
66

?

?

?

消息(Message)
? ?

消息——一个对象要求另一个对象实施某项操作的请求。

在一条消息中,需要包含消息的接收者和要求接收者执 行某项操作的请求,但具体的操作过程由接收者自行决 定,这样可以很好地保证系统的模块性。
消息传递是对象之间相互联系的唯一途径。发送者发送 消息,接收者通过调用相应的方法响应消息,这个过程 被不断地重复,从而驱动整个程序的运转。

?

67

方法(Method)
?

面向对象技术中的方法——针对对象的属性的各种操 作。
将一些通用的过程或函数编写好并封装起来,作为方 法直接提供给用户调用。

?

68

面向对象程序设计几个重要的基本特征
?

面向对象程序设计几个重要的基本特征:
? ? ? ?

抽象(Abstract) 封装(Encapsulation) 继承(Inheritance) 多态(Polymorphism)

69

抽象(Abstract)
?

抽象——忽略事物的非本质特征,只注意那些与当前目标有关的 本质特征,从而找出事物的共性,把具有共同性质的事物划分为 一类,得出一个抽象的概念。
在理解复杂的现实世界和解决复杂的特定问题时,如何从繁杂的 信息集中抽取出有用的、能够反映事物本质的东西,降低其复杂 程度是解决问题的关键,而抽象正是降低复杂度的最佳途径。 抽象可分为过程抽象和数据抽象
?

?

?

过程抽象——即功能抽象,舍弃个别功能,抽取共同拥有的功 能。

?

数据抽象——一种更高级别的抽象,它将现实世界中存在的客 体作为抽象单元,其抽象内容既包括客体的属性特征,也包括 行为特征(起到信息隐藏的作用)。它是面向对象程序设计所 采用的核心方法。
70

封装(Encapsulation)
?

面向对象程序设计中的封装——将对象的属性和行为分 别使用适当的数据结构和方法来描述,并将它们绑定在 一起形成一个可供访问的基本逻辑单元。
用户对数据结构的访问只能通过使用类提供的外部接口。 这样,将描述这些属性的数据结构和访问这些数据结构 的方法封装在一个对象中,从而使数据结构得到隐藏, 不允许外界直接访问。

?

?

其它对象只能通过封装提供的外部接口(这些方法)对 该对象实施各项操作,保证了数据结构的安全,提高了 系统的可维护性和可移植性。
71

继承(Inheritance)
?

继承是面向对象技术提高软件开发效率的重要措施,如果类与类之 间有is-a(是一种)的关系,则可用继承机制来表示。 其定义是:特殊类的对象拥有其一般类的全部属性和服务,称作特 殊类对一般类的继承。它体现了类与类之间的不同抽象级别。根据 继承与被继承的关系,可分为派生类(或称子类)和基类(或称父 类)。 继承机制其实质是反映了从一般到特殊的关系,父类表现出的是共 性和一般性,子类表现出的是个性和特殊性,子类从父类那里获得 所有的属性和方法,并且可以对这些获得的属性和方法加以改造, 使之具有自己的特点。 继承对于软件复用和扩充有着及其重要的意义,利用代码重用技术, 能够降低开发投入,加快软件开发速度、提高软件质量,减少维护 成本。 继承可分为公有继承(public)、私有继承(private)和保护继 承(protected)三种访问控制方式。
72

?

?

?

?

多态(Polymorphism)
?

?

多态——不同层次的类中,以及在一个类的内部,同 名成员函数之间的关系问题,是解决功能和行为的再 抽象。 多态是指不同的对象收到相同的消息时产生多种不同的 行为方式。它是一种用统一的方式来处理一组各具个性 却同属一族的不同个体的机制,这就使得同样的消息被 不同的对象接收时,将被解释为不同的语义。 例如:定义了多个“add”相加的同名函数,但它们的参 数类型各不相同,如果用整型之间、实型之间、双精度 浮点型之间分别表示相加运算,则当同样的消息(相加) 被不同类型的对象(变量)接收后,不同类型的变量将 采用不同的方式进行加法运算。
73

?

5.4 常用程序设计语言
? 5.4.1 科学计算语言 ? 5.4.2 结构化程序设计语言 ? 5.4.3 面向对象程序设计语言 ? 5.4.4 其它程序设计语言 ? 5.4.5 标记式语言HTML和XHTML ? 5.4.6 脚本语言

74

5.4.1 科学计算语言
?

FORTRAN(FORmula TRANslating)可称之为第一个高级编译 语言,从其用词及涵义即把应用领域的目标锁定在科学计算(或 称数值计算)上。 从John Backus(1977年获得图灵奖)的Fortran 0到目前的 Fortran 95,版本不断更新,程序设计人员只要面对解决科学计 算问题时,就会自然想到使用公式翻译语言。 Fortran高级程序设计语言历经如此漫长的年代变迁,还是具有那 么长久的生命力,这与它为适应计算机时代的需求而不断创新是 分不开的。在该语言的发展历史中,最为重要的版本如下: ? Fortran Ⅵ Fortran 90中有Pascal特征,如指针、递归、 ? Fortran 66 动态数组等概念。 ? Fortran 77 Fortran 95中简化了开发并行程序的任务, ? Fortran 90 去除了Fortran 90中的许多特性,还有一些 特性被置入“待废弃之列”。 ? Fortran 95
75

?

?

5.4.2 结构化程序设计语言
?

?

摆脱60年代末软件危机的最佳解决方案,使开发软件编写 代码的过程中能够循规蹈矩地步入正轨,各类开发人员能 够不谋而合地使用结构化程序设计的算法最小集来完成。 语言完整性而言,有非结构化语句,例如:goto、 continue、break等语句,用到它们的话,也会严格按照 结构化程序设计的要求和约定用法限制来使用。 结构化程序设计开发方法使得软件代码可读性、可维护性、 以及可扩充性都得到了有力支持。 Pascal、C是最成功的结构化程序设计语言,既是在面向对 象程序设计中结构化程序设计开发方法依然在发挥着极其 重要的作用。
76

?

?

1. Pascal 语言
?

1971年,Niklaus Wirth推出了Pascal语言(以法国数 学家Blaise Pascal为命名),这应该属于wirth前期研究 ALGOL 60,以及吸取COBOL和PL/Ⅰ的优良特性后,而 专门设计用于程序设计教学的语言。 Pascal语言的语法非常严谨,类型丰富,层次分明,易读 易写,是第一个结构化程序设计语言,它是简单性和易于 表达的完美结合。 在70年代中期之前,通常在大学的计算机程序设计课程教 学都是采用Fortran、PL/Ⅰ、或ALGOL语言,但以后都 被Pascal语言所取代,其主要原因是Pascal语言是最适合 于结构化程序设计的教学。
77

?

?

2. C 语言
?

1972年,美国贝尔实验室的Kenneth Lane Thompson和Dennis MacAlistair Ritchie(1983年 获得图灵奖)为了重新改写UNIX操作系统,而共同设 计、开发了C语言。 C是由CPL、BCPL、B和ALGOL 68等继承发展而来的。
CPL在60年代初开发于剑桥大学。BCPL是1967年由 Martin Richards开发的一种简单的系统语言。

?
? ?

60年代末Thompson用汇编语言编写了第一版UNIX操作 系统。1970年他以BCPL为基础,在UNIX下实现了第一 个高级语言B。
78

5.4.3 面向对象程序设计语言
?

? ?

面向对象程序设计语言经历了一个很长的发展阶段,面向 对象程序设计概念的许多原始思想都来之于Simula 67, 但是直到Smalltalk演化到Smalltalk 80时(1980年), 面向对象程序设计才得到了充分的发展。同时对以前的思 想作了新的解释。 可以说面向对象程序设计语言与面向对象思想几乎是同步 发展并相互促进的。 早先的面向对象语言,如:LISP、Simula 67、 Smalltalk、CLU、C with Classes、Ada 83、Modula2和Smalltalk 80等语言。

79

1. C++ 语言
?

1980年,Bjarne Stroustrup博士(1993年获得了 ACM Grace Murray Hopper奖)在贝尔实验室开始研 究从C到C++的开发。 经历了漫长的5年时间,在1985年推出了第一个可以实 现的C++ 1.0版本,被称为Cfront。 随后至1990年推出了C++ 3.0版本。 1998年ISO对C++ 进行了标准化。 1990年有了ANSI C++标准。

? ? ? ?

80

2. Java 语言
?

Java是Sun Microsystems公司在1995年推出的一种 编程语言。通常我们以JDK(Sun开发的一套Java开发 工具)的版本来定义Java的版本。目前最新的版本是 6.0 。 Java是一种简单、面向对象、平台无关、分布式、解释 型、安全可靠、性能优异、多线程、动态的高级程序设 计语言,特别适合在网络环境下的编程使用。

?

81

3. C# 语言
? ? ? ? ? ? ?

C#(读作C sharp)是一种为生成在.NET Framework上运行的 多种应用程序而设计的面向对象的编程语言。 简单、功能强大、类型安全。 起源于C语言家族,凭借它的许多创新,在保持C样式语言的表示形 式和优美的同时,实现了应用程序的快速开发。 语法表现力强,易学。语法方面简化了C++的诸多复杂性,同时提 供了很多强大的功能, 例如,可为空的值类型、枚举、委托、匿名方法和直接内存访问, 这些都是Java所不具备的。 支持泛型方法和类型,从而提供了更出色的类型安全和性能。 提供了迭代器,允许集合类的实现者自定义迭代方法,简化了客户 端代码对它的使用。

82

5.4.4 其它程序设计语言
?

ALGOL语言

COBOL语言 ? BASIC语言 ? Ada语言 ? LISP函数型程序设计语言 ? Prolog逻辑程序设计语言
?

83

1. ALGOL 语言
? ?

ALGOL(ALGOrithmic Language)称为算法语言 。 ALGOL语言的版本58、60、68,它是第一种国际性的团体GAMM (Society for Applied Mathematics and Mechanics的德文缩 写)和ACM(Association for Computing Machinery,美国计 算机学会)共同设计的程序设计语言,也是第一种与机器无关的语 言。 第一种语法得到正式描述的语言。巴科斯范式(Backus-Naur form,BNF)形式化的成功应用促进了计算机科学许多重要领域 的发展。 其地位维持了长达二十余年之久。从1960年以来所设计的每一种 命令式程序设计语言都与ALGOL 60不无干系。实际上,它们大多 数都可直接或间接地算是ALGOL 60的新版本。例如,PL/Ⅰ、 SIMULA 67、ALGOL 68、C、Pascal、Ada、C++、Java等。
84

?

?

2. COBOL 语言
?

COBOL(COmmon Business Oriented Language)称为商业 应用通用语言 。 1959年5月,美国国防部提供资助,由一个委员会通过会议在相当 短的时间内设计出来的。 首次实现了层次数据结构。每个变量都在数据划分中详细定义,包 括小数位数和小数点的位置。 文件记录的描述也同样详细,它们被描述为输出至打印机的行,这 就使COBOL非常适合于打印报表。 支持长名(30个字符)和连字符,使编写出的程序能够望文生义。 经历了不同版本的更新,1968年、1974年和1985年都有ANSI标 准化。

?

?

?

? ?

?

导致财会电算化,从任何意义上讲,这都是一个极其重要的革新。 目前,我国还有不少群体在使用该语言,国外使用则依然比较普遍, 而该语言本身仍然在继续发展中。 85

3. BASIC 语言
? ?

BASIC(Beginner's All-purpose Symbolic Instruction Code) 语言是一种得到广泛使用但声誉不太高的程序设计语言 。
数学家John Kemeny和Thomas Kurtz在新汉普郡的Dartmouth 学院(现为大学)设计出来的(60年代初曾参与过许多版本的 Fortran和ALGOL 60编译器的研制)。 早期BASIC是第一种通过连接至远程终端加以使用的语言,当时终 端刚刚出现,而在此之前,大多数程序都只能通过打孔卡片或纸带 输入计算机。1964年5月1号凌晨4点,终于诞生了第一个使用分 时BASIC的程序。 随着微机的诞生,BASIC又被配置在微机上,以解释性或编译性方 式运行程序,因为易学,对计算机的推广应用起到了重要作用。 BASIC也经历了各种版本,例如,Turbo BASIC、Quick BASIC 等,由于用BASIC编写的程序结构性很差,在其发展过程中几乎没 有进行过标准化。
86

?

? ?

Visual BASIC 的出现
?

直到1991年,微软推出基于Windows环境,采用可视 化界面设计和事件驱动的编程机制,以及基于对象的开 发工具Visual BASIC 1.0版本之后,才又激发了广大计 算机爱好者的兴趣。

VB已经更新到Visual BASIC 6.0版本。 ? 微软现在的Visual BASIC.NET网络功能更强(它还只 是微软Visual Studio.NET中的成员之一),是VB的替 代品。因为它们存在着显著的不同差异,有些使用者开 始转向使用C#。
?

87

4. Ada 语言
? ?

?

Ada语言是为美国国防部(Department of Defense, DoD)开发的 。 1975年,美国国防部研究和工程部主任Malcolm Currie成立了高级语言工作组,其成员来自军界各个行 业,另外还与英国、法国和西德保持着联系。 Ada语言的研究与开发可分为: ? 前三个阶段(1983年之前)围绕Ada 83版本。 ? 后三个阶段(1988年之后)围绕Ada 9X版本。 ? 中间Ada语言设计则封冻了至少5年。

88

5. LISP 函数型程序设计语言
?
? ?

LISP(List Processor)是一个全面而强大的语言 。
早期人们视其为一个外观和表现很奇怪的语言,而且认 为使用LISP的开销相当大。 LISP的开发是为了用于符号计算和表处理应用,主要是 AI(Artificial Intelligence,人工智能)领域的计算。 在许多AI应用中,LISP及其以后的版本仍是标准语言。 在AI中,许多领域都已经得到开发,这主要归功于LISP 的应用。尽管也可以使用其它类型的语言(主要是逻辑 程序设计语言),但大多数现有的专家系统都是用LISP 开发的。 LISP还在知识表示、机器学习、智能训练系统和语音建 模等领域占据着主导地位。
89

?

?

在 AI 领域之外
? ?

在AI领域之外,LISP也相当成功。 例如,EMACS文本编辑器就是用LISP编写的,符号数 学系统MACSYMA也是用LISP编写的,此系统除了提供 其它功能外,还可以完成符号区分和集成。 LISP机器是一种个人计算机,其整个系统软件均用LISP 编写。 LISP还成功地用于为大量应用领域构造专家系统。

? ?

90

6. Prolog 逻辑程序设计语言
?

逻辑程序设计起源要归功于Robinson为逻辑推导所开 发的规约规则。 Prolog主要由Aix-Marseille大学的Alain Colmeraur 和Phillippe Roussel所开发,并得到了Edinburgh大 学的Robert Kowalski的一些帮助 。 关系数据库管理系统(Relational Database Management Systems,RDBMS)以表的形式存储数据。查询通常用关 系算子表示,这是一种符号逻辑形式。 这些系统查询语言是非过程性的,而逻辑程序设计也是 非过程性的,因此二者从这个意义上讲是相同的,用户 不必描述如何检索出答案,只需描述答案的特征即可。
91

?

?

?

6. Prolog 逻辑程序设计语言(续)
? ? ?

逻辑程序设计和RDBMS之间的关联是很显然的。 简单的信息表可以由Prolog结构来描述,而表之间的关 系则可以方便而容易地描述为Prolog规则。 检索过程交由规约操作完成,Prolog的目标语句提供了 对RDBMS的查询。因此,逻辑程序设计恰能满足 RDBMS实现的需求。 符号逻辑提供了逻辑程序设计和语言的基础。

?

?

逻辑程序设计的方法是将一组事实和规则(表示事实间 关系)用作为一个数据库,并使用一个自动推导过程来 检查新命题的合法性,在此假设数据库中的事实和规则 均为真,这种方法正是为自动定理证明开发的。
92

5.4.5 标记式语言HTML和XHTML
? ?

HTML(Hypertext Markup Language )即超文 本标记语言。 XHTML(eXtensible HTML) 是一种在HTML 基 础上优化和改进的新语言。

93

1. HTML 超文本标记语言
?

HTML(超文本标记语言)是WWW(World Wide Web )的描 述语言。由Tim Berners-lee提出。 设计目的
?

?

能把存放在一台电脑中的文本或图形与另一台电脑中的文本或 图形方便地联系在一起,形成有机的整体,人们不用考虑具体 信息是在当前电脑上还是在网络的其它电脑上。

?

用鼠标在某一文档中点取一个图标,Internet就会马上转到与 此图标相关的内容上去,而这些信息可能存放在网络的另一台 电脑中。

?

HTML是由HTML命令组成的描述性文本,HTML命令可以说明文 字、图形、动画、声音、表格、链接等。 HTML的结构包括头部(Head)、主体(Body)两大部分。头部 描述浏览器所需的信息,主体包含所要说明的具体内容。
94

?

2. XHTML
?

2000年底,国际W3C(WWW Consortium)组织公 布发行了XHTML 1.0版本。XHTML 1.0是一种在 HTML 4.0基础上优化和改进的新语言。 设计目的
? ?

?

基于XML(eXtensible Markup Language)应用。

XHTML(eXtensible HTML)是一种增强了的HTML。

?

它的可扩展性和灵活性将适应未来网络应用更多的需求。

95

HTML 三个主要缺点
? ?

XHTML解决HTML语言所存在的严重制约其发展的问题。 HTML发展到今天存在三个主要缺点:
?

不能适应现在越来越多的网络设备和应用的需要。 (手机、PDA、信息家电都不能直接显示HTML) HTML代码不规范、臃肿。 (浏览器需要足够智能和庞大才能够正确显示HTML) 数据与表现混杂。 (页面要改变显示,就必须重新编写HTML)

?

?

?

W3C的XHTML是HTML向XML过渡的一个桥梁。

96

XML 是Web发展的趋势
? ?

XHTML是当前替代HTML 4.0标记语言的标准。 使用XHTML 1.0,只要你小心遵守一些简单规则,就 可以设计出既适合XML系统,又适合当前大部分HTML 浏览器的页面。 也就是说,你可以立刻设计使用XML,而不需要等到人 们都使用支持XML的浏览器。

? ?

可以使web平滑的过渡到XML。

97

XHTML 的优势
? ?

XHTML非常严密。 早期的浏览器接受私有的HTML标签,所以人们在页面设 计完毕后必须使用各种浏览器来检测页面,看是否兼容, 往往会有许多莫名其妙的差异,人们不得不修改设计以 便适应不同的浏览器。 XHTML能与其它基于XML的标记语言、应用程序及协议 进行良好的交互工作。 XHTML是Web标准家族的一部分,能很好地应用在无线 设备等其它用户代理上。

? ?

98

5.4.6 脚本语言
?

脚本语言(Scripting Language)是以脚本的形式定义 一项任务,以此控制操作环境,扩展应用程序的性能。 2种不同形式的脚本语言 ? JavaScript(1998年):是一种嵌入到HTML中的客 户端脚本语言。 ? PHP(Personal Home Page ,2000年):是嵌入到 HTML中的服务器脚本语言。

?

99

1. JavaScript 脚本语言
? ?

JavaScript是WWW上的一种功能强大的编程语言 。 由浏览器中的解释器来解释执行。它不仅可以直接应用 于HTML文档以获得交互式效果或其他动态效果,而且 可以运行于服务器端,从而替代传统的CGI程序。

?

JavaScript脚本程序的特点:
?

开发客户端Web应用程序,也就是开发所谓的客户 端脚本。

?
?

客户端脚本程序通常都是解释执行的。
被嵌入到HTML文件中。

100

1. JavaScript 脚本语言(续)
?

随着HTML文件一同下载到浏览器端。

?

浏览器读HTML文件,然后解释执行并显示其中的元素。 读取HTML文件并分辨其中的元素的过程称为语法分析 或解析(parsing)。如果解析到JavaScript脚本,则 浏览器执行其脚本语句。
是最流行的Web脚本语言,其主要原因在于它具有最广 泛的兼容性,可以运行于多个浏览器平台上。 VBScript也是一种通用的Web脚本语言,由微软公司 开发,但由于它只能被IE浏览器所支持,所以无法与 JavaScript抗衡。至于VBScript以外的其他Web脚本 语言就更是影响微弱了。
101

? ?

2. PHP 脚本语言
?

PHP是嵌入到HTML文件中的服务器端脚本语言 。 PHP脚本语言的特点
? ?

?

专门用于Web应用。 在Web服务器上解释PHP代码。 PHP代码通常会生成HTML代码作为输出。 Web浏览器绝对不会看到PHP代码。

(当某个浏览器请求了PHP代码所在的HTML文件后)
? ?

102

5.5 程序设计范型
? 5.5.1 命令型程序设计语言 ? 5.5.2 函数型程序设计语言 ? 5.5.3 逻辑程序设计语言 ? 5.5.4 面向对象程序设计语言

103

交互式语言和非交互式语言
?

按照使用方式,程序设计语言有交互式语言和非交互式 语言之分:
? 交互式语言——反映人机交互作用的语言(BASIC)。 ? 非交互式语言——不反映人机交互作用的语言。如

FORTRAN、COBOL、ALGOL 69、Pascal、C等都是 非交互式语言。

104

程序设计范型
?

程序设计范型(Paradigm)是指设计程序的规范、模 型和风格,它是一类程序设计语言的基础。
成功的程序设计语言最初都是为某一特殊用途而设计的。 尽管在很多程序设计语言中都含有命令结构和声明结构,但 程序设计语言还是可以被划分为4大类型: ? 命令型程序设计语言。 ? 函数型程序设计语言。 ? 逻辑程序设计语言。 ? 面向对象程序设计语言。 有些程序设计语言(例如,C++、Java等)既是面向对象又 是命令型程序设计语言,也可称为多范型程序设计语言。
105

? ?

?

5.5.1
?

命令型程序设计语言

在执行命令型程序设计语言的时候,每次只能执行一步计 算,因为程序中的每一步都依赖于它前面的步骤。 命令型语言的特点 ? 算法必须详细指定。 ? 赋值语句、变量。 ? 包括指令或语句的具体执行顺序。 绝大多数程序设计语言只要不是纯函数型、逻辑和面向对 象程序设计语言,都具有命令型语言的特性。 较有影响力或常用的命令型程序设计语言有:FORTRAN、 ALGOL、COBOL、PL/I、SIMULA 67、BASIC、 Pascal、C、Ada、C++、Delphi、Java等。
106

?

? ?

5.5.2
?
?

函数型程序设计语言

1958年的LISP即为函数型程序设计语言的典型代表。
函数型程序设计语言的特点 ? 所有计算都是通过将函数应用参数来实现的。 ? 不再需要赋值语句和变量。 ? 迭代过程可用递归函数调用来指定。 ? 语义比命令型语言的语义简单得多。 目前通常使用的两个LISP版本为Scheme(1975)和COMMON LISP(1984)。 由Robin Milner于爱丁堡大学设计的ML(MetaLanguage)元语言, 它基本上是一种函数型语言,但是也支持命令型程序设计。 而Haskell(1992)是一种纯函数型语言,它的特点是使用了“懒计 算”,即表达式的值只在需要时才会计算得出,这为该语言增添了一 些令人意想不到的功能。
107

? ? ?

5.5.3
? ?

逻辑程序设计语言

Prolog就是最为通用的一种逻辑程序设计语言。

在人工智能应用领域早期主要使用LISP语言,后来到70年代初 期有了Prolog。 ? 逻辑程序设计语言的特点 ? 是基于规则的语言的一个例子。 ? 规则的指定可以采用任何顺序。 ? 由语言实现环境选择一种执行顺序,以生成所需的结果。 ? 这种软件开发方法与其它三类语言所用的方法大不相同,显然 需要一种截然不同的语言。简而言之,用逻辑程序设计语言编 程是非过程性的,逻辑程序设计是用一种形式化的逻辑表示法 来指导计算机完成计算处理。 ? 谓词算子即为当前逻辑程序设计语言中所用的表示法。谓词算 子提供了与计算机通信的基本形式,证明方法(用有限归约) 则提供了推导技术。

108

5.5.4
?

面向对象程序设计语言

C++是目前应用最广泛的语言,并支持多种范型,包括OOP、类属程 序设计和过程式程序设计。 面向对象程序设计语言的特点: ? 将客观事物都视作为具有属性和行为的对象。 ? 抽象类、继承与多态。 Smalltalk是绝无仅有的 ? 对象访问机制。 纯面向对象语言 ? 异常处理机制。 ? 增强了程序的复用能力、开发效率和可维护性等。 支持面向对象程序设计的语言目前已经成为主流,大部分语言都出现 过支持面向对象程序设计的版本。面向对象程序设计语言有: Smalltalk、CLOS、VB、VC、Delphi、Java、JavaScript、C#。 对于不同的语言,其对面向对象程序设计的特定支持也各不相同,有 的也支持函数型程序设计,或者仍然采用了某些基本结构,并且看上 去仍象是原来的命令型语言。

?

?

?

109

脚本语言和特殊用途语言
? ? ? ?

JavaScript、PHP脚本语言。 用于生成商业报表的RPG 。 用于控制可编程的机器工具的APT 。 用于系统仿真的GPSS等。

110

Bjarne Stroustrup曾经说过的一番话语
“对于软件领域堪称专业的人士来说,了解多种语言 和多种程序设计范型是至关重要的。目前,C++是多范型程 序设计的最佳语言,而且也是学习多种不同形式程序设计 的很好的语言。不过,只了解C++并不好,更不用说只了解 某一种单范型语言了。这有些像色盲或只会说一种语言的 人;你很难知道你遗漏了什么。学习和掌握了多种程序设 计风格,并了解在不同语言中该如何加以使用,往往是促 成好的程序设计的源动力”。

111

5.6

习题(1/2)

1. 什么是计算机程序?你能列出计算机程序设计语言有哪些? 2. 结构化程序设计中的基本结构有哪些? 3. 什么叫算法?算法的特征是什么? 4. 算法的描述方法有哪些?哪些是常用的?区别在何处? 5. 分别用不同的描述方法描述结构化程序的3种基本结构。 6. 编写求最大值的算法。 7. 什么是结构化程序设计?为何要采用结构化程序设计? 8. 结构化程序设计方法有哪些特点? 9. 什么是面向对象程序设计?为何要采用面向对象程序设计? 10. 面向对象程序设计方法有哪些重要概念和基本特征?
112

5.6

习题(2/2)

11. 分别描述常用程序设计语言的共同点和不同点。 12. 什么是程序设计范型?程序设计范型有哪些? 13. 有多范型的程序设计语言吗?若有,是何种程序设计语言? 14. 在不同的应用领域,你能想到使用什么程序设计语言吗? 15. 将5.1.1中的步行从甲地到丙地,改为开车从甲地到丙地,并且设A 线含有5个红绿灯,B和C线上只有1个红绿灯。则当交通高峰期就开 车走B和C线,非交通高峰期就开车走A线。试用不同的算法描述方法 编写该算法。 16. 进一步改写第15题。附加条件是:非交通高峰期时,并且时间段为0 点至5点时,就开车走A线。否则,开车走B和C线。试用不同的算法 描述方法重新编写该算法。 17. 现有10个整数已经按升序排列。请编写算法,要求用折半查找算法 查找第一次出现的键K值。 18.标准建模语言UML有哪五类图? 19.简单叙述C++、Java、C#语言的共同点和不同点。 20.什么是标记语言?什么是脚本语言?脚本语言有哪些? 113


《大学计算机基础》第二层次子课程-C 程序设计基础(201....ppt

暂无评价|0人阅读|0次下载 | 举报文档 《大学计算机基础》第二层次子课程-C 程序设计基础(2010V1)_其它_高等教育_教育专区。大学计算机基础 教学课件 北京航空航...

《大学计算机基础》第二层次子课程课程简介(2009)final.doc

《大学计算机基础》第二层次子课程简介 2009 年 12 月 31 日 《大学计算机基础...实验名称:C 程序设计语言编程大作业或算法设计大作业. 实验目的:掌握算法的各种...

《大学计算机基础》第二层次子课程选课通知(附课程简介....doc

暂无评价|0人阅读|0次下载 | 举报文档 《大学计算机基础》第二层次子课程选课...网页设计与制作 2 节/周(14-16) 焦福菊 J0-004 C 程序设计基础 2 节/周...

关于《大学计算机基础》和《程序设计》两门课程建议.doc

暂无评价|0人阅读|0次下载 | 举报文档 关于《大学计算机基础》和《程序设计》...《C 语言程序设计》是工学、理学类专业的一门重要基础课,属于结构化程序设计,...

《大学计算机基础》课程教学大纲(2009).doc

《大学计算机基础》课程教学大纲(2009)_工学_高等...4 2 2 2 4 学时 B类 4 C类 4 模块 4 1....程序设计基础 2. 数据结构 3. 软件工程基础 2 2...

大学计算机基础_程序设计基础(C语言入门及编程环境)_图文.ppt

暂无评价|0人阅读|0次下载 | 举报文档 大学计算机基础_程序设计基础(C语言入门及编程环境)_理学_高等教育_教育专区。程序设计基础(一)算法 教学目的 ? 复习...

关于《大学计算机基础》课程教学问题的通知.doc

第 2 次是 2009 级理科《大学计算机基础》课程免修考试,拟在安排下一学 期...高层次计算机公选课程, 目前已开设的课 程有《Visual Basic 程序设计基础》《...

《大学计算机基础》各章习题答案(Win7+Office2010).doc

《大学计算机基础》各章习题答案(Win7+Office2010)_...( 0.001 )2 (11010011)2=( 211 )10 (127)10...“Ctrl+C”键;单击目标盘及文件夹;按“Ctrl+V”...

《大学计算机基础》各章习题答案(Win7+Office2010).doc

《大学计算机基础》各章习题答案(Win7+Office2010)_...9. 什么是程序设计?程序设计的过程有哪些? 程序...“Ctrl+C”键;单击目标盘及文件夹;按“Ctrl+V”...

《大学计算机基础》第5章-程序设计基础(2010)[1]_图文.ppt

大学计算机基础 教学课件 北京航空航天大学 1 第5章 程序设计基础 5.1 5.2 5.3 程序和程序设计语言 算法程序设计步骤与程序设计方法 5.4 5.5 常用程序设计...

北京高校精品课件-《大学计算机基础》第5章-程序设计基....ppt

暂无评价|0人阅读|0次下载 | 举报文档 北京高校精品课件-《大学计算机基础》第5章-程序设计基础_工学_高等教育_教育专区。北京航空航天大学 精品课件计算机学院 大...

(3)北京邮电大学2009年版课程简介(计算机学院).doc

2009 年 8 月 北京邮电大学出版社 《大学计算机基础》(文科)课程简介课程编号:...《C 高级语言程序设计》课程简介课程编号:1300029 课程名称:程序设计基础 (64 ...

《大学计算机基础》课程简介_图文.ppt

《大学计算机基础》课程简介_其它_高等教育_教育专区...第二层次课 ? ? 有5门子课程,每门子课程6学时...多媒体技术基础 (3学时) 程序设计基础 (2学时) ...

《大学计算机基础》课程简介(2012)【OK】_图文.ppt

《大学计算机基础》课程简介(2012)【OK】_理学_高等...第二层次数据库技术基础(6学时) 网页设计与制作(6...上机实验课另行安排 时间:7~15周,地点:实验楼C区...

《大学计算机基础》第1章计算机基础知识(2013)_图文.pdf

暂无评价|0人阅读|0次下载 | 举报文档 《大学计算机基础》第1章计算机基础知识...技术基础 程序设计基础 子课程4:多媒体动画设计 子课程5:软件工程基础 二层...

《大学计算机基础》第1章-计算机基础知识(2013)【OK】_....pdf

暂无评价|0人阅读|0次下载 | 举报文档 《大学计算机基础》第1章-计算机基础知识...程序设计基础 子课程4:多媒体动画设计子课程5:软件工程基础 2 第1章 计算机...

《 大学计算机基础 》教学大纲.pdf

13 《程序设计基础(C语言) 教学大纲 ......4130826 二、课程名称:大学计算机基础 (1)中文名:大学计算机...层次 本大纲适用于全校非计算机专业本科层次学生 2、...

《大学计算机基础》教学大纲.doc

课程性质和教学目的 《大学计算机基础》 是为非...算法与程序设计基础:算法的基本概念,算法复杂度的...Hutchinson, Stacey C. Sawyer 著. Computers, ...

《大学计算机基础》课程教学大纲.doc

《大学计算机基础》课程教学大纲 - 《大学计算机基础》课程教学大纲 一、层次与学

大学计算机基础第9章 程序设计基础_图文.ppt

暂无评价|0人阅读|0次下载 | 举报文档 大学计算机基础第9章 程序设计基础_其它_高等教育_教育专区。大学计算机课件 第九章 程序设计基础 1/88 本章教学目的: 了...