资源预览内容
第1页 / 共70页
第2页 / 共70页
第3页 / 共70页
第4页 / 共70页
第5页 / 共70页
第6页 / 共70页
第7页 / 共70页
第8页 / 共70页
第9页 / 共70页
第10页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1.11.1程序与程序设计语言程序与程序设计语言 1.1.1 常量 一提起计算机,人们就会联想到键盘、显示器和主机。 其实,应用要早得多、并一直流传至今的计算机工具是算 盘(见图1.1)。那么,现代电子计算机与算盘的最大区别 在哪里呢?关键在于现代计算机可以自动完成计算过程, 而算盘进行的计算过程是在人的拨动下才能进行。 图1.1 算盘那么,为什么现代计算机可以自动完成计算过程呢? 这 首先要从程序说起。程序实际上是一个非常普通的 概念:按照一定的顺序安排的工作步骤。可以说,做任 何事情都有相应的程序。做的事情不同,要求的效果不 同,程序就不同。例如,用同样的原料,采用不同的程 序,会做出不同的菜肴来。 一种工具能够自动工作,一是要有记忆功能,能够记 住程序;二是具有按照程序控制相关部件操作的能力。 如果能让算盘记住做某种计算的口诀和计算的数据,并 且有能按照口诀控制算珠自动运动的机制,则只要发出 开始执行的命令,算盘就会自动完成计算。 可惜这样的机制并没有在算盘中实现。但是,却有另 外一种机器却在这方面向前推进了一步。这就是明朝末 年宋应星在其天工开物中记载的中国古代提花机( 见图1.2)。图1.2 中国古代的提花机中国提花机大约出现于西汉末年(公元前)。它采用用丝 线结成的“花本”(花版)控制经线起落,以织成要求的图样 。这是最早的程序控制思想。后来,提花机沿着丝绸之路传 到欧洲,历经改进,1805年法国人Joseph Jacquard制造成 功用穿孔卡片(见图1.3)控制连杆(横针),用有孔和无孔 进一步控制经线起落的提花机。图1.3 穿孔卡片 穿孔卡片把程序控制技术向前推进了一步。这一技术被一位 英国数学家Charles Babbage(见图1.4)引入到了计算机中机 ,用有孔和无孔的组合来表示数据和程序。图1.4 英国数学家Charles Babbage 18世纪末,法国数学界调集大批数学家,组成了人工手算 的流水线,经过长期艰苦奋斗,终于完成了17卷数学用表 的编制,但是,手工计算出的数据出现了大量错误。这件 事情强烈刺激了Babbage。1812年20岁的Babbage开始计 算机的研制工作,他要把函数表的复杂算式转化为差分运算 ,用简单的加法代替平方运算,快速编制不同函数的数学用 表,并将这种机器称为“差分机”。经过十年的努力,终于于 1822年完成了第一台差分机,可以处理3个不同的5位数,计 算精度达到6位小数。1833年他又开始投身于一种“会分析的 机器”分析机的研制中。他把机器设计成三个部分,一是 用来储存数据信息的“仓库(The Store)”,二是进行数据 运算处理的“工场(The mill)”,三是使用穿孔卡片来输入 程序并用穿孔卡片输出数据。 这台机器虽然没有制造成功,但它的工作原理程序存 储控制为今天的计算机奠定了基础: (1)任何工具的工作,都是由程序控制的; (2)只有工具具有了记忆程序的功能,并具有了按照程 序进行自我控制的功能,该工具才能自动工作。 1.1.2 计算机程序设计语言 程序要需要用某种形式(语言)来描述。例如,用算盘进行计算 ,程序是用口诀描述的,珠算的语言是口诀。现代计算机的程序则 是用计算机程序设计语言来描述的。从计算机诞生到今天,程序设 计语言也在伴着计算机技术的进步不断升级换代。 1. 机器语言 一种CPU的指令系统,也称该CPU的机器语言,它是该CPU可以 识别的一组由0和1序列构成的指令码。下面是某CPU指令系统中的 两条指令: 1 0 0 0 0 0 0 0 (进行一次加法运算) 1 0 0 1 0 0 0 0 (进行一次减法运算) 用机器语言编程序,就是从所使用的CPU的指令系统中挑选合适 的指令,组成一个指令系列。这种程序虽然可以被机器直接理解和 执行,却由于它们不直观,难记、难认、难理解、不易查错,只能 被少数专业人员掌握,同时编写程序的效率很低,质量难以保证。 这种繁重的手工方式与高速、自动工作的计算机极不相称。这种方 式仅使用于计算机出现的初期(使用穿孔纸带的时期)的编程(用有孔 、无孔,分别代表1、0),现在已经不再使用 2. 汇编语言 为减轻人们在编程中的劳动强度,20世纪50年代中期人们开始 用一些“助记符号”来代替0,1码编程。如前面的两条机器指令可 以写为 A+B A或ADD A,B A-B 个样 A或SUB A,B 这种用助记符号描述的指令系统,称为符号语言或汇编语言。 用汇编语言编程,程序的生产效率及质量都有所提高。但是汇 编语言指令是机器不能直接识别、理解和执行的。用它编写的程 序经检查无误后,要先翻译成机器语言程序才能被机器理解、执 行。这个翻译转换过程称为“代真”。代真后得到的机器语言程序 称为目标程序(object program),代真以前的程序,称为源程序 (source program)。由于汇编语言指令与机器语言指令基本上具 有一一对应的关系,所以汇编语言源程序的代真可以由汇编系统 以查表的方式进行。 汇编语言与机器语言,都是依CPU的不同而异,它们都称为面 向机器的语言。用面向机器的语言编程,可以编出效率极高的程 序。但是程序员用它们编程时,不仅要考虑解题思路,还要熟悉 机器的内部结构,并且要“手工”地进行存储器分配。这种编程的 劳动强度仍然很大,给计算机的普及推广造成很大的障碍。 2. 高级语言 汇编语言和机器语言是面向机器的,不同类型的计算机 所用的汇编语言和机器语言是不同的。1954年出现的 FORTRAN语言以及随后相继出现的其它高级语言,开始使 用接近人类自然语言的、但又消除了自然语言中的二义性的 语言来描述程序。这些高级语言使人们开始摆脱进行程序设 计必须先熟悉机器的桎梏,把精力集中于解题思路和方法上 。 第一种高级语言是1954年问世的FORTRAN语言。此后 不久,不同风格、不同用途、不同规模、不同版本的面向过 程的高级语言便风涌而起。据统计,全世界已有2500种以 上的计算机语言,其中使用较多的有近百种。图1.5为几种 广泛流行的高级语言的发展变迁情况。20042000199619921988198419801976197219681964196019561952JavaC+CPLBCPLBCPASCALModula-2AdaALGOL68ALGOL60FORTRANBASICQBASICVisual BASICFORTRAN 77FORTRAN 90PL/1LISPPROLOGCOBOLSimula 67Smalltalk 80C89C99C#图1.5 几种广泛流行的高级语言的发展变迁情况1.1.3 高级语言程序的开发过程 一般来说,程序开发的一般过程有如图1.6所示几个步 骤。提 出 问 题分析问题建立模型表 现 模 型编辑源程序编 译链 接测试与调试编写程序文档错 误目标文件可执行文件未发现错误源程序文件源程序代码模型问题编 辑 错 误建 模 错 误分 析 错 误不再适宜运 行 维 护交付使用图1.6 高级语言程序的开发过程1. 分析 一般来说,一个具体的问题要涉及许许多多的方面, 这是问题的复杂性所在。为了便于求解,往往要忽略一 些次要方面。这种通过忽略次要方面,而找出解题规律 ,就称为建立模型。 2. 建立模型,表现模型 表现模型就是用一种符号-语言系统来描述模型。一 般来说,模型的表现会随着对问题抽象程度的加深和细 化,不断由领域特色向计算机可解释、执行靠近,中间 也可能采用一些其他的符号系统,如流程图等,直到最 后用一种计算机程序设计语言描述出来。 3. 源程序的编辑 源程序的编辑就是在某种字处理环境下,用具体的程 序设计语言书写并修改的过程。为此就要掌握一种计算 机程序设计语言。还要应用一种专用程序编辑器或通用 的文字编辑器进行。4. 程序的编译(或解释)与链接 写出一个高级语言程序后,并不是就可以立即拿来执行。 要让机器直接执行,还要将它翻译成由机器可以直接辨认并 可以执行的机器语言程序。为区别它们,把用高级语言写的 程序(文件)称为源程序(文件),把机器可以直接辨认并 执行的程序(文件)称为可执行程序(文件)。这一过程一 般分为两步: 第1步:在程序编辑过程中输入到源文件中的是一些字符 码,但是机器可以直接处理的是0、1信息。为此,首先要将 源程序文件翻译成0、1码表示的信息,并用相应的文件保存 。这种保存0、1码信息的文件称为目标程序文件。由源文件 翻译成目标文件的过程称为编译。在编译过程中,还要对源 程序中的语法和逻辑结构进行检查。编译任务是由称做编译 器(compiler)的软件完成的。目标程序文件还不能被执行 ,它们只是一些目标程序模块。第2步:将目标程序模块以及程序所需的系统中固有的目 标程序模块(如执行输入输出操作的模块)链接成一个完整 的程序。经正确链接所生成的文件才是可执行文件。完成链 接过程的软件称为链接器(linker)。 图1.7为编译和链接过程的示意图。 程序在编译、链接过程中,也可能发现错误。这时要重新 进入编辑器进行编辑。# include int add (int ,int ); int main (void)int s;s = add(2,3);printf(“The sum is:%d”, s);return 0;int add (int a,int b)int sum;sum = a + b;return sum; 编 译 器010110010111010110101000101000100011001010 1111010001000101000100011001010111101000100111011101链 接 程 序源文件1源文件2目标文件1目标文件2110001101011100010100010001100101011110100010011101110110010010010000000000可执行文件10001000101000100011001010111101000100111011101100110011其他目标文件图1.7 编译和链接过程的示意图5. 程序的测试与调试 经编译、链接的程序文件,生成可执行文件,就可以让计 算机执行了。但是,并不是就可以得到预期的结果而交付用 户使用了,因为程序仍然会存在某些错误。因此,每一个人 编写出一个程序后,在正式交付使用前,总要试通一下。“试 通”就是试运行程序,也就是对程序进行测试。 测试是以程序通过编译、没有语法和链接上的错误为前提 ,目的是找出程序中可能存在的错误并加以改正。因此,应 该测试程序在不同情况下运行的情况,输入不同的数据可以 检测出程序在不同情况下运行的情况。测试的数据应是以“程 序是会有错误的”为前提精心设计出来的,而不是随心所欲地 乱凑而成的。它不仅应含有被测程序的输入数据,而且还应 包括程序执行它们后预期的结果。每次测试都要把实际的结 果与预期的结果相比较,以观察程序是否出错。6. 编写程序文档 经过了问题分析、设计、程序编码、测试后,程序开发的 工作基本上结束了。但是,这时还不能交付使用。因为,随 着程序规模的增大和日益复杂化,程序的使用和运行也越来 越不那么直接,用户要运行程序,还需要知道许多信息,如 : 程序的功能 需要输入的数据类型、格式和取值范围 需要使用的文件数量、名称、内容以及存放位置等 程序运行需要的软、硬件环境 程序的装入、启动方法以及交互方式等。 为此,程序开发者需要向用户提供这些资料称为程序 使用说明书或用户文档。需要说明的是,在许多软件中,这 些内容已经部分或全部地以“readme”或“help”的形式提供 。 目前,程序文档已经成为软件开发产品的必要部分。文档 在程序使用和维护中的重要性也改变了软
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号