1.程序单元,程序执行过程中的独立调用单
元 。 如子程序,分程序,过程等 。
2.单元表示
?编译时, 一个单元的源程序 。
?运行时, 单元表示由一个代码段和一个
活动记录组成, 称为单元实例 。
3.活动记录,执行单元所需要的信息,以及
该单元的局部变量所绑定的数据对象的
存储区 。
第四节 程序单元
ip
代码存储器( C) 数据存储器( D)
4.非局部变量,一个程序单元可以引用
未被本单元说明而被其它单元说明
的变量 。
5.引用环境,局部变量 +非局部变量 。
6.别名,同一单元的引用环境中有两个
变量绑定于同一数据对象, 称这些
变量具有别名 。
7.副作用的产生,对绑定于一个非局部
变量的对象进行修改 。
8.程序单元可以递归激活,从而一个单
元可以有很多个实例,但代码段相同 。
不同的仅仅是活动记录 。
9.静态分配和动态分配
Fortran Pascal 或 C
随着计算机技术的发展,计算机应用也
日益广泛,已经渗透到社会的各个领域,
对程序设计语言也提出了新的要求 (诸如
可维护性,可靠性,可移植性等 ),从而促
进了语言的发展。
第五节 程序设计语言发展简介
一, 早期的高级语言 ( 50年代)
— 追求效率
1,FORTRAN
FORmula TRANslation
.主要用于科学计算
.子程序独立编译
.COMMON语句实现了模块之间的通信
2,ALGOL 60
ALGOrithmic Language 60
,主要用于科学计算
,引入了分程序结构和递归过程
,采用 BNF形式描述语法
3,COBOL
COmmon Business Oriented Language
.广泛应用于各种事务处理领域
.引入了文件和数据描述
.类自然语言程序描述
二,早期的突破
60年代初, 不再盲目地追求效率,出现
了基于良好刻画数学原则的语言 。
1,LISP
.具有很强的符号处理能力
.统一的数据结构
.数据和程序统一的表示方法
.其基础是函数和函数作用
2,APL
.支持函数式程序设计风格
.广泛应用于涉及大量矩阵运算的科
学计算中
.具有丰富的操作符
3,SNOBOL 4
,主要用于字符串处理
,给出了一种与机器无关的宏功能,增
加了程序的可移植性
三, 概念的集成 ( 64年 )
PL/1
,希望将所有语言概念集成大全
,分程序概念和递归过程
,数据描述机能
,动态数据结构
,异常处理
,多任务机能
,可用于科学数值计算,数据处理和开发
系统软件
,难以得到广泛的应用
四, 再一次突破 (60年代后期 )
引入了许多有趣的概念
1,ALGOL 68
,以零型文法描述
,引入正交性和通用性原则
2,SIMULA67
,应用于模拟领域
,增加了一个特殊结构 —— 协同程序
,引入了类的概念
3,PASCAL
,具有明显的简洁性
,体现结构程序设计思想
,具有用户自定义类型
4,BASIC
,简单易学
,交互式工作环境
,解释执行
五, 大量的探索
70年代,支持系统软件开发
1,语言研究
涉及抽象数据类型,异常处理和并行
处理机制
2,MODULA-2
,支持模块结构,模块可以独立编译
,面向实时系统和并行系统综合功能
3,C
CPL→BCPL→B→C
,C的最大特点是具有高级语言和低级
语言的优点
,应用于各种领域
六, Ada和第四代语言
70年代以后,注重可移植性
1,Ada
,面向专门领域的特殊要求
,是在引入了一个不大的,容易理解的
概念集合的基础上开发的
,是直接体现许多现代软件设计方法学
的语言
,提高程序的可读性,可靠性,可维护性
2,第四代语言 —— 超高级语言
面向问题
,表达力更强,使用更方便,更接近于
问题的描述
,着重关心的是, 做什么,
七, 新一代程序设计语言
以抛弃冯,诺依曼概念为基础,包括
函数式,对象式,逻辑式
第一章习题
1,必做题,
1-2,1-6,1-11
2,思考题,
1-3,1-5,1-10,1-12,1-14
通 知
1,本周五的课暂停一次
2,答疑时间改为,
第六周起,双周四下午 3:00起在 806
第二章 数据类型
数据类型实质上是对存储器中
所存储的数据进行的抽象。它包
含了一组值的集合和一组操作。
第一节 引言
1,数据类型的作用
? 实现了数据抽象
? 使程序员从机器的具体特征中解脱
出来
? 提高了编程效率
2,数据类型的分类
? 内部类型
? 自定义类型
第二节 内部类型
一, 内部类型的特点
,反映基本硬件特性
如:定点加
,在语言级,标识共用某些操作的数据
对象的抽象表示
如:整型共用 +,-,*,/
二, 内部类型的优越性
1,基本表示的不可见性
基本位串对程序员是不可见的 。
25+9=34
基本表示 00011001+00001001
结果 00100010
从而具有优点:不同的程序设计风格,
可写性, 可读性, 可修改性 。
2.编译时能检查变量使用的正确性
进行静态类型检查,如非法运算,形实
参类型匹配
3,编译时可以确定无二义的操作
?超载 (多态 )的概念,运算符的意义
依赖于操作数的类型 。 如, +” 可
以表示整数加或实数加
?编译时,可拒绝混合运算,或提供
类型转换指令
?合理地使用超载,可以提高语言的
可读性和可用性
4,精度控制
可以通过数据类型显式定义数据的精度
第三节 用户定义类型
许多语言允许程序员规定
基本数据对象的聚合,乃至聚
合的聚合
1,笛卡尔积
N个集合 A1,A2,…,An的笛卡尔积表示为
A1?A2?… ?An,它是一个集合,其元素为
(a1,a2,…,an),ai?Ai
任意正多边形可表示为
integer *real
2,有限映像
① 定义:从定义域类型 DT的值的
有限集合, 到值域类型 RT的值的
有限集合的函数称为有限映像 。
var a:array[1..50] of char;
表示:整数 1至 50到字符集的有限映像
② 值域对象通过下标选取 。
③ 下标越界会出错,动态检查
④下标可用来选取值域的多个元素
⑤ SNOBOL4的 ARRAY构造符并
不要求值域集的所有元素是同一
类型的
⑥ DT到相应值的特定子集的绑定策略,
,编译时绑定 (静态数组 )
,对象建立时绑定 (执行到分程序时,
动态数组 )
,对象处理时绑定 (对 APL,子集范围可变 )
3,序列
① 序列由任意多个数据项组成,这些
数据项称为该序列的成分,且类型相

② 串是序列
③ 顺序文件的思想也是来自序列的概
念,只能顺序读写
4,递归
若数据类型 T包含属于同一类型 T的成
分, 那么类型 T称为递归类型 。
① 允许在类型定义中使用被定义类型的名

② 指针是建立递归数据对象的重要手段
5.判定或
判定或是一个选择对象结构的构造机
制,规定在两个不同选择对象之间作出适
当的选择 。 每一选择对象结构称为变体 。
例如,PASCAL的变体记录 ;
C的联合 。
6,幂集
类型 T的元素所有子集的集合, 称为
幂集,记为 Powerset(T),T称为基类
型 。
应用,每次的操作对象仅仅是某个集合的
子集 。
7,小结
通过 PASCAL的类型定义和变量说明,
给出用户定义类型显式命名的优点,
① 可读性 ( 选择名字 )
② 可修改性 ( 不修改变量说明 )
③ 可分性 ( 重复使用 )
④ 一致性检查 ( 参考第 8节 )
?匿名类型
var a,record x:integer;
y:array[1..10] of char
end;
?显式命名
type complex=record radius:real;
angle:real
end;
var c1,c2,c3:complex;
第三节 PASCAL类型结构
一, 非结构类型
1,内部类型
integer,real,boolean,char
2,有序类型
每一元素都有唯一的前驱和后继
如,整型,布尔型,字符型
3,定义新的有序类型的方法
? 枚举型 其值不能直接读 /写
? 子界型 动态检查范围
例,
type day=(sunday,monday,tuseday,wednesday,
thursday,friday,saturday);
work_day=monday..friday;
var class_day:work_day;
class_day:=succ(class_day);
二, 聚合构造
1,数组构造
? 构造符 ARRAY允许程序员定义有限映象
array[t1] of [t2]
? PASCAL把下标类型不同的数组看成不
同的类型
type a1=array[1..50] of integer;
a2=array[1..70] of integer;
?, 符合数组, 的概念(见下页)
维数相同,成分类型相同
? PASCAL可定义多维数组
type row=array[-5..10] of integer;
var my_matrax:array[3..30] of row;

var my_matrix:array[3..30,-5..10] of integer;
procedure sort(var a:array[low..high:integer] of ctype);
var i:integer;
more:boolean;
begin {sort}
more:=true;
while more do
begin
more:=false;
for i:=low to high-1 do
begin
if a[i]>a[i+1] then
begin move_right(i);
more:=true
end
end
end
end {sort};
2,记录构造
① 构造符 RECORD用以定义笛卡尔积
② 记录可以整体访问, 也可用圆点
,.”
作为选择符访问单个的域
③ PASCAL的变体记录
④ 使用变体记录不安全
3,集合构造
?SET构造符是幂集构造受限制的形式
? 基本型只能是有序类型
4,文件构造
?PASCAL文件是任意类型的诸元素的
序列
?PASCAL文件仅能顺序处理
?PUT和 GET操作
三, 指针
? 指针可引用匿名数据对象
NEW,堆
? 空指针的使用
? 指针的操作,赋值,比较
?PASCAL指针只能指向匿名数据对象
四, 小结,(P37图 2-4)