1、1.1程序与程序设计语言程序与程序设计语言 1.1.1 常量 一提起计算机,人们就会联想到键盘、显示器和主机。其实,应用要早得多、并一直流传至今的计算机工具是算盘(见图 1.1)。那么,现代电子计算机与算盘的最大区别在哪里呢?关键在于现代计算机可以自动完成计算过程,而算盘进行的计算过程是在人的拨动下才能进行。 图 1.1 算盘 那么,为什么现代计算机可以自动完成计算过程呢?这 首先要从程序说起。程序实际上是一个非常普通的概念:按照一定的顺序安排的工作步骤。可以说,做任何事情都有相应的程序。做的事情不同,要求的效果不同,程序就不同。例如,用同样的原料,采用不同的程序,会做出不同的菜肴来。 一种工
2、具能够自动工作,一是要有记忆功能,能够记住程序;二是具有按照程序控制相关部件操作的能力。如果能让算盘记住做某种计算的口诀和计算的数据,并且有能按照口诀控制算珠自动运动的机制,则只要发出开始执行的命令,算盘就会自动完成计算。 可惜这样的机制并没有在算盘中实现。但是,却有另外一种机器却在这方面向前推进了一步。这就是明朝末年宋应星在其 天工开物 中记载的中国古代提花机(见图 1.2)。图 1.2 中国古代的提花机 中国提花机大约出现于西汉末年(公元前)。它采用用丝线结成的 “花本 ”(花版)控制经线起落,以织成要求的图样。这是最早的程序控制思想。后来,提花机沿着丝绸之路传到欧洲,历经改进, 1805
3、年法国人 Joseph Jacquard制造成功用穿孔卡片(见图 1.3)控制连杆(横针) ,用有孔和无孔进一步控制经线起落的提花机。图 1.3 穿孔卡片 穿孔卡片把程序控制技术向前推进了一步。这一技术被一位英国数学家 Charles Babbage(见图 1.4)引入到了计算机中机,用有孔和无孔的组合来表示数据和程序。图 1.4 英国数学家 Charles Babbage 18世纪末,法国数学界调集大批数学家,组成了人工手算的流水线,经过长期艰苦奋斗,终于完成了 17卷 数学用表 的编制,但是,手工计算出的数据出现了大量错误。这件事情强烈刺激了 Babbage。 1812年 20岁的 Bab
4、bage开始计算机的研制工作,他要把函数表的复杂算式转化为差分运算,用简单的加法代替平方运算,快速编制不同函数的数学用表,并将这种机器称为 “差分机 ”。经过十年的努力,终于于1822年完成了第一台差分机,可以处理 3个不同的 5位数,计算精度达到 6位小数。 1833年他又开始投身于一种 “会分析的机器 ” 分析机的研制中。他把机器设计成三个部分,一是用来储存数据信息的 “仓库( The Store) ”,二是进行数据运算处理的 “工场( The mill) ”,三是使用穿孔卡片来输入程序并用穿孔卡片输出数据。 这台机器虽然没有制造成功,但它的工作原理 程序存储控制为今天的计算机奠定了基础:
5、 ( 1)任何工具的工作,都是由程序控制的; ( 2)只有工具具有了记忆程序的功能,并具有了按照程序进行自我控制的功能,该工具才能自动工作。 1.1.2 计算机程序设计语言 程序要需要用某种形式(语言)来描述。例如,用算盘进行计算,程序是用口诀描述的,珠算的语言是口诀。现代计算机的程序则是用计算机程序设计语言来描述的。从计算机诞生到今天,程序设计语言也在伴着计算机技术的进步不断升级换代。 1. 机器语言 一种 CPU的指令系统,也称该 CPU的机器语言,它是该 CPU可以识别的一组由 0和 1序列构成的指令码。下面是某 CPU指令系统中的两条指令: 1 0 0 0 0 0 0 0 (进行一次加
6、法运算) 1 0 0 1 0 0 0 0 (进行一次减法运算) 用机器语言编程序,就是从所使用的 CPU的指令系统中挑选合适的指令,组成一个指令系列。这种程序虽然可以被机器直接理解和执行,却由于它们不直观,难记、难认、难理解、不易查错,只能被少数专业人员掌握,同时编写程序的效率很低,质量难以保证。这种繁重的手工方式与高速、自动工作的计算机极不相称。这种方式仅使用于计算机出现的初期 (使用穿孔纸带的时期 )的编程(用有孔、无孔,分别代表 1、 0),现在已经不再使用 2. 汇编语言 为减轻人们在编程中的劳动强度, 20世纪 50年代中期人们开始用一些 “助记符号 ”来代替 0, 1码编程。如前面
7、的两条机器指令可以写为 A+B A或 ADD A, B A-B 个样 A或 SUB A, B 这种用助记符号描述的指令系统,称为符号语言或汇编语言。 用汇编语言编程,程序的生产效率及质量都有所提高。但是汇编语言指令是机器不能直接识别、理解和执行的。用它编写的程序经检查无误后,要先翻译成机器语言程序才能被机器理解、执行。这个翻译转换过程称为 “代真 ”。代真后得到的机器语言程序称为目标程序 (object program),代真以前的程序,称为源程序(source program)。由于汇编语言指令与机器语言指令基本上具有一一对应的关系,所以汇编语言源程序的代真可以由汇编系统以查表的方式进行。
8、汇编语言与机器语言,都是依 CPU的不同而异,它们都称为面向机器的语言。用面向机器的语言编程,可以编出效率极高的程序。但是程序员用它们编程时,不仅要考虑解题思路,还要熟悉机器的内部结构,并且要 “手工 ”地进行存储器分配。这种编程的劳动强度仍然很大,给计算机的普及推广造成很大的障碍。 2. 高级语言 汇编语言和机器语言是面向机器的,不同类型的计算机所用的汇编语言和机器语言是不同的。 1954年出现的FORTRAN语言以及随后相继出现的其它高级语言,开始使用接近人类自然语言的、但又消除了自然语言中的二义性的语言来描述程序。这些高级语言使人们开始摆脱进行程序设计必须先熟悉机器的桎梏,把精力集中于解题思路和方法上。 第一种高级语言是 1954年问世的 FORTRAN语言。此后不久,不同风格、不同用途、不同规模、不同版本的面向过程的高级语言便风涌而起。据统计,全世界已有 2500种以上的计算机语言,其中使用较多的有近百种。图 1.5为几种广泛流行的高级语言的发展变迁情况。