4.5 计算机编程概述

4.5 计算机编程概述

程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。 所有的软件都是由计算机编程实现。

4.5.1 计算机语言的发展

根据程序设计语言发展的历程,可将其大致分为4类:机器语言、汇编语言、高级语言和4GL语言。

1)机器语言

机器语言是指直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义。 例如,某台计算机字长为16位,即有16个二进制数组成一条指令或其他信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。 不同处理器类型的计算机,其机器语言是不同的,按照一种计算机的机器指令编制的程序,不能在指令系统不同的计算机中执行。 机器语言的缺点是:难记忆、难书写、难编程、易出错、可读性差和可执行差。

2)汇编语言

为了克服机器语言的缺点,人们采用了与二进制代码指令实际含义相近的英文缩写词、字母和数字等符号来取代二进制指令代码,这就是汇编语言(也称为符号语言)。 汇编语言是由助记符(memoni)代替操作码,用地址符号(symbol)或标号(label)代替地址码所组成的指令系统。 使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序称为汇编程序,汇编程序是系统软件中的语言处理系统软件。 汇编程序把汇编语言翻译成机器语言的过程称为汇编。

汇编语言比机器语言易于读写、调试和修改,同时具有机器语言的全部优点。 但在编写复杂程序时,相对高级语言代码量较大,而且汇编语言依赖于具体的处理器体系结构,不能通用,因此不能直接在不同处理器体系结构之间移植。

3)高级语言

机器语言和汇编语言统称为低级语言,由于其二者依赖于硬件体系,且汇编语言中的助记符量大、难记,于是人们又发明了更加方便易用的高级语言。 在这种语言下,其语法和结构更类似普通英语,且由于远离对硬件的直接操作,使得一般人经过学习之后都可以进行编程。

(1)传统的高级程序设计语言

1954年,约翰·巴克斯发明了FORTRAN语言。 FORTRAN是最早出现的高级程序设计语言,主要应用在科学和工程计算领域。

1958年,在FORTRAN的基础上改进的ALGOL语言诞生了,与FORTRAN相比,ALGOL引入了局部变量和递归过程的概念,提供了较为丰富的控制结构和数据类型,对后来的高级语言产生了深刻影响。

1960年诞生的COBOL是商用数据处理应用中广泛使用的标准语言,它通用性强,容易移植,并提供了与事务处理有关的大范围的过程化技术。 COBOL是世界上最早实现标准化的语言,它的出现、应用与发展,改变了人们对“计算机只能用于数值计算”的观点。

1964年,由 Dartmouth 学院 John G.Kemeny 与 Thomas E. Kurtz 两位教授所开发的Beginner’s All⁃purpose Symbolic Instruction Code(初学者通用的符号指令代码),是最著名的BASIC语言。 由于BASIC语言立意甚佳,简单、易学的基本特性,很快便流行起来,几乎所有小型、微型,以及家用计算机,甚至部分大型计算机,都提供给使用者这种语言撰写程式。 在微型计算机方面,则因为BASIC语言可配合微型计算机的操作功能,使得BASIC早已成为微型计算机的主要语言之一。 随着计算机科学技术的迅速发展,特别是微型计算机的广泛使用,计算机厂商不断地在原有的BASIC基础上进行功能扩充,出现了多种BASIC版本,例如,TRS⁃80 BASIC,Apple BASIC,GWBASIC,IBMBASIC(即BASICA)和True BASIC。 此时BASIC已经由初期小型、简单的学习语言发展成为功能丰富的使用语言。 它的许多功能已经能与其他优秀的计算机高级语言相媲美,而且有的功能(如绘图)甚至超过了其他语言。

(2)通用的结构化程序设计语言

结构化程序设计语言的特点是具有很强的过程功能和数据结构功能,并提供结构化的逻辑构造。 这一类语言的代表有Pascal,C和Ada等,它们都是从ALGOL语言派生出来的。

Pascal是一种计算机通用的高级程序设计语言。 Pascal的取名是为了纪念17世纪法国著名哲学家和数学家Blaise Pascal。 它由瑞士Niklaus Wirth教授于20世纪60年代末设计并创立。1971年,瑞士联邦技术学院尼克劳斯·沃尔斯(N.Wirth)教授发明了另一种简单明晰的计算机语言,这就是以计算机先驱帕斯卡的名字命名的Pascal语言。 Pascal语言语法严谨,层次分明,程序易写,具有很强的可读性,是第1个结构化的编程语言。 它一面世就受到广泛欢迎,迅速地从欧洲传到美国。 沃尔斯一生还写作了大量有关程序设计、算法和数据结构的著作,因此,他获得了1984年度的“图灵奖”。

C语言是一种面向过程的计算机程序设计语言,它是目前众多计算机语言中举世公认的优秀结构程序设计语言之一。 它由美国贝尔研究所的D.M.Ritchie于1972年推出。1978年后,C语言已先后被移植到大、中、小及微型机上。 C语言的特点是适用于编写系统软件和应用软件,它具有丰富的数据结构,支持用户自定义函数,与汇编语言接口好,具有丰富的函数库,具有比较强的图形处理能力。

Ada是一种表现能力很强的通用程序设计语言,它是由美国国防部为克服软件开发危机,耗费巨资,历时近20年研制成功的。 作为一种用于嵌入式实时计算机设计的标准语言,Ada它被誉为第4代计算机语言的成功代表。

(3)专用语言

专用语言是为特殊的应用而设计的语言,通常具有自己特殊的语法形式,面对特定的问题,输入结构及词汇与该问题的相应范围密切相关。 具有代表性的专用语言有C++, Java等。

1980年贝尔实验室的Bjarne Stroustrup发明了“带类的C”,增加了面向对象程序设计所需要的抽象数据类型“类”,带类的C语言于1983年被命名为C++(Cplusplus),成为面向对象程序设计语言。 C++有丰富的类库和函数库,可嵌入汇编语言,使程序优化,但这种语言难以学习和掌握,需要有C语言编程的基础经验和较为广泛的知识。 目前,C++成为当今最受欢迎的面向对象的程序设计语言,因为它既融合了面向对象的能力,又与C语言兼容,保留了C语言的许多重要特征。 C++常见的开发工具有Borland C ++、Microsoft Visual C++等。

Java诞生于1995年,至今已有16年历史。 Java名称的来源:Java是印度尼西亚爪哇岛的英文名称,因盛产咖啡而闻名。 Java语言中的许多库类名称多与咖啡有关,如Java Beans(咖啡豆)、Net Beans(网络豆)和Object Beans(对象豆)等。 SUN和Java的标识也正是一杯正冒着热气的咖啡。10多年来,Java就像爪哇咖啡一样誉满全球,成为实至名归的企业级应用平台霸主,而Java语言也如同咖啡一般醇香动人。 Java是一种简单的、面向对象的、分布式的、解释型的、健壮安全的、结构中立的、可移植的、性能优异、多线程的动态语言,Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,从而减少了应用系统的维护费用。 Java对对象技术的全面支持和Java平台内嵌的API能够缩短应用系统的开发时间并降低成本。 Java的编译一次即可,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。 特别是Java企业应用编程接口(Java Enterprise APIS)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。 Java有建立在公共密钥技术上的确认技术,指示器语义的改变将使应用程序不能再去访问以前的数据结构或者私有数据,这样大多数病毒也就无法破坏数据。 因而,使用Java可以构造无病毒、安全的系统。 它适用于Internet环境,并具有较强的交互性和实时性,提供了网络应用的支持和多媒体的存取,推动了Internet和企业网络Web的进步。 SUN公司的J2EE平台的发布,推动了Java在各个领域的应用。

(4)4GL语言

4GL即第4代语言(fourth⁃generationlanguage),4GL是按计算机科学理论指导设计出来的结构化语言,如ADA,MODULA⁃2,SMALLTALK⁃80等。

一般认为4GL具有简单易学,用户界面良好,非过程化程度高,面向问题,只需告知计算机“做什么”,而不必告知计算机“怎么做”,用4GL编程使用的代码量较之COBOL和PL/1明显减少,并可呈数量级地提高软件生产率等特点。 许多4GL为了提高对问题的表达能力,也为了提高语言的效率,引入了过程化的语言成分,出现了过程化的语句与非过程化的语句交织并存的局面,如LINC,NOMAD,IDEAL,FOCUS和NATURAL等均是如此。

4GL以数据库管理系统所提供的功能为核心,进一步构造了开发高层软件系统的开发环境,如报表生成、多窗口表格设计和菜单生成系统等,为用户提供了一个良好的应用开发环境。

4GL的代表性软件系统有:Power Builder,Delphi等。

4.5.2 程序设计语言的选择

在选择程序设计语言时,既要考虑程序设计语言的特性,又要考虑是否能够满足需求分析和设计阶段所产生的模型的需要。 一般而言,衡量某种程序设计语言是否适合特定的项目,应考虑以下一些因素:

①应用领域。

②算法和计算复杂性。

③软件运行环境。

④用户需求中关于性能方面的需要。

⑤数据结构的复杂性。

⑥软件开发人员的知识水平和心理因素等。

其中,应用领域常常被作为选择程序设计语言的首要标准,这主要是因为若干主要的应用领域长期以来已固定地选用了某些标准语言。 例如,C语言经常用于系统软件开发;Ada及C对实时应用和嵌入式软件更有效;FORTRAN适用于工程及科学计算领域等。

4.5.3 程序设计的基本过程

程序设计就是使用某种程序设计语言编写程序代码来驱动计算机完成特定功能的过程。 程序设计的基本过程一般由分析所求解的问题、抽象数学模型(确定数据结构)、选择合适算法(确定算法)、编写程序,以及调试通过直至得到正确结果等几个阶段所组成,如图4.7所示。

图4.7 程序设计的基本步骤

一个完整的程序设计步骤如下:

①确定数据结构。 根据任务提出的要求、指定的输入数据和输出的结果,确定存放数据的数据结构。

②确定算法。 针对存放数据的数据结构来确定解决问题及完成任务的各个步骤。

③编写代码。 根据确定的数据结构和算法,使用选定的计算机语言来编写程序代码,并输入到计算机中,保存在磁盘上,通常简称为“编程”。

④调试运行程序。 消除由于疏忽而引起的语法错误或逻辑错误,用各种可能的输入数据对程序进行调试,使其对各种合理的数据都能得到正确的结果,对不合理的数据能进行适当处理。

⑤整理文档。 对解决问题整个过程的有关资料进行整理,编写程序使用说明书。

4.5.4 程序翻译方式

1)汇编程序

汇编程序又称为会变系统,它的功能是将汇编语言程序翻译成机器语言程序。 由于汇编语言的指令与机器语言的指令基本保持了一一对应关系,因此,汇编的过程比较简单,效果非常高。 汇编的基本步骤如下:

①将指令助记符转换为机器操作码。

②将符号操作数转换为地址码。

③将操作码和操作数构成机器指令。

如果汇编程序中定义了宏指令,汇编语言程序中的一条宏指令可能被翻译成若干条机器语言指令,这种情况称为宏汇编程序。

2)编译程序

编译程序又称为编译系统,它的主要功能是将高级语言编写的程序翻译成等效的机器语言程序,以便直接运行程序。 编译程序主要执行下列步骤:

①编译。首先把源程序编译成等效的汇编代码,然后再由汇编程序将汇编代码翻译成可重新定位的目标程序,目标程序是由浮动的机器语言程序模块和相关的信息表所组成,它也不能够直接在计算机上执行,必须要经过装配连接才能构成可执行的机器语言程序,即可执行程序。

②连接。 将若干可重新定位的目标程序连接在一起,构成一个完整的可重新定位的目标程序。

③加载。 将完整的可重新定位的目标程序装入主存储器中,并对目标程序重新定位,成为可在及其上直接执行的机器语言程序。

3)解释程序

解释程序又称为解释系统。 所谓解释实际上是对源程序的每一种可能的行为,都以机器语言编写一个子程序,用来模拟这一行为。 因此对高级语言程序的解释,实际上可调用一系列的子程序来完成。 解释程序重复执行下列步骤:

①取下一个语句。

②确定被执行的子程序。

③执行这一子程序。

解释程序按源程序中语句的动态顺序逐句进行分析翻译,并调用子程序执行程序功能,不产生目标程序。 解释程序的执行效率要比编译程序低很多。

4.5.5 算法

1)算法的概念

算法是对解决某一特定问题的操作步骤的具体描述。 简单地说,算法就是解决一个问题而采取的方法和步骤,如打电话,要进行拨号、接通后通话、结束通话等操作,这就是“通话算法”;植树的过程,是挖坑、栽树苗、培土和浇水,这就是“植树算法”。

在计算机科学中,算法是描述计算机解决给定问题的有明确意义操作步骤的有限集合。计算机算法一般可分为数值计算算法和非数值计算算法。 数值计算算法就是对所给的问题求数值解,如求函数的极限、求方程的根等;非数值计算算法主要是指对数据的处理,如对数据的排序、分类、查找、文字处理和图形图像处理等。

2)算法的特征

算法应具有以下基本特征:

①可行性。 算法中描述的操作必须是可执行的,通过有限次基本操作可以实现。

②确定性。 算法的每一步操作必须具有确切的含义,不能有二义性和多义性。

③有穷性。 一个算法必须保证执行有限步骤之后结束。

④输入。 一个算法有零个或多个输入以描述运算对象的初始情况,所谓零个输入是指算法本身给定了初始条件。

⑤输出。 一个算法有一个或多个输出,以反映对输入数据加工后的结果。 没有输出的算法是毫无意义的。

3)算法的表示

算法的描述应直观、清晰、易懂,便于维护和修改。 描述算法的方法有很多种,常用的表示方法有自然语言、传统流程图、N⁃S图、伪代码和计算机语言等。 其中最常用的是传统流程图和N⁃S图。

(1)自然语言

自然语言就是人们日常使用的语言,因此,自然语言表示一个算法便于人们理解。

【例4.1】 用自然语言描述求圆的面积和周长的算法。

①输入一个值给半径R。

②计算面积S=3.14×R×R。

③计算周长L=2×3.14×R。

④输出结果S,L。

【例4.2】 求s=1+2+…+100,用自然语言描述其算法。

分析:

修改表达式为s=0+1+2+…+100

其求解过程为:先求0+1,再把和加上2,再把和加上3,…,一直加到100。

1=0+1

3=1+2

6=3+3

4950=4851+99

5050=4950+100

通式:s=s+i

分析出s的特点:s的初始值0;i的特点:i初始值为1,i的终止值为100,i=i+1。

其自然语言描述算法如下:

①将0赋值给s。

②将1赋值给i。

③将s与i相加,结果存放在s中。

④将i加1,结果存放在i中。

⑤若i大于100,则输出结果s,算法结束,否则返回步骤③,算法继续执行。

用自然语言描述表示算法,虽然表达容易,且容易理解,但是文字的描述冗长且容易出现二义性,表示的算法也不够直观。 因此,一般对于简单的问题可以选择用自然语言描述其算法,而对于复杂的问题,则需要使用其他的方式来进行算法描述。

(2)程序流程图

流程图是指用一些框图来表示各种操作。 用图形表示算法,直观形象,易于理解。 美国国家标准化协会ANSI(American National Standards Institute)规定了一些常用的流程图符号,已被全世界各国程序工作者普遍采用,如图4.8所示。【例4.3】 用程序流程图描述求圆的面积和周长的算法。

图4.8 流程图符号

用流程图表示如图4.9所示。

图4.9 流程图

【例4.4】 求s=1+2+…+100,用程序流程图描述其算法。

程序流程图由一些特定意义的图形、流程线及简要的文字说明构成的,它能清晰明确地表示程序的运行过程。 在使用过程中,人们发现流程线会使得程序的流程转向很多,容易破坏程序的结构,给阅读程序流程图带来困难。 因此,人们设计了一种新的流程图,它把整个程序写在一个大框图内,这个大框图由若干个小的基本框图构成,这种流程图简称N⁃S图。 N⁃S图也被称为盒图或CHAPIN图,如图4.10(a)所示。

【例4.5】 求s=1+2+…+100,用N⁃S图描述其算法,如图4.10(b)所示。

图4.10 流程图的N⁃S图

(3)伪代码

伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。 用伪代码写算法并无固定、严格的语法规则,只需把意思表达清楚,并且书写的格式要写成清晰易读的形式。

【例4.6】 求s=1+2+…+100,用伪代码描述其算法。

描述一:

算法开始

置s的初值为0

置i的初值为1

当i<=100,执行下面操作:

使s=s×i

使i=i+1

(循环体到此结束)

输出t的值

算法结束

描述二:

BEGIN(算法开始)

0=>s

1=>i

whilei<=100

s×i=>s

i+1=>i

printt

END(算法结束)

(4)计算机语言

可以利用某种程序设计语言对算法进行描述,程序本身就是算法的一种表示方式。

【例4.7】 求s=1+2+…+100,用C语言描述其算法。

#include<stdio.h>

voidmain()

{ ints,i;

s=0;

i=1;

while(i<=100)

s=s+i;

i=i+1;

printf("%d\n",s);

4.5.6 算法设计的基本方法

常用算法设计的基本方法有递推算法、递归算法、穷举算法、贪心算法、分治算法和动态规划算法。

(1)递推算法

递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。 递推算法分为顺推和逆推两种。

所谓顺推法是指从已知条件出发,逐步推算出要解决的问题的方法。 如斐波拉契数列,设它的函数为f(n),已知f(1)=1,f(2)=1,f(n)=f(n-2)+f(n-1)(n≥3,n∈N),则通过顺推可以知道,f(3)=f(1)+f(2)=2,f(4)=f(2)+f(3)=3,…,直至推出所要求的解。

所谓逆推法是指从已知问题的结果出发,用迭代表达式逐步推算出问题的开始条件,即顺推法的逆过程。

(2)递归算法

在调用一个函数的过程中,又调用该函数本身,把这种方法称为递归算法。 递归算法的执行过程分递推和回归两个阶段。

如求5!。 用f(5)表示5!。

分析如下:

f(5)=5×f(4)(想要计算出5!,必须先计算出4!);

f(4)=4×f(3)(想要计算出4!,必须先计算出3!);

f(3)=3×f(2)(想要计算出3!,必须先计算出2!);

f(2)=2×f(1)(想要计算出2!,必须先计算出1!);

f(1)=1(直到已知1!=1时为止,返回后即可依次计算出2!,3!,4!,5!)。

得出结论:当n≥2时,f(n)=n×f(n-1)(递归算法);

当n=1时,f(n)=1(终结条件)。

(3)穷举算法

穷举法又称为暴力破解法,主要用于密码破译,即将密码进行逐个推算直到找出真正的密码为止。 例如,一个已知是4位并且全部由数字组成的密码,其可能共有10×10×10×10=10000种组合,因此最多尝试10000次就能找到正确的密码。 理论上利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。 因此有些人运用计算机来增加效率,有些人辅以字典来缩小密码组合的范围。 如果是一个多位数,并且可能包含很多种字符的密码组合方法一定多得惊人,相对来讲破译的时间也会长得无法接受,有时可能会长达数年之久。

(4)贪心算法

贪心算法又称贪婪算法,是指在对问题求解时,总是作出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,它所做出的仅是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题都能产生整体最优解或者是整体最优解的近似解。

(5)分治算法

在计算机科学中,分治算法是一种十分重要的算法。 字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多相同的或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单到直接求解,原问题的解即子问题解的合并。 这个技巧是很多高效算法的基础,如排序算法(快速排序、归并排序等)、傅立叶变换(快速傅立叶变换)等。

(6)动态规划算法

自从动态规划算法问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛应用。 例如,最短路线、库存管理、资源分配、设备更新、排序和装载等问题,用动态规划方法比用其他方法求解更为方便。

虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划等),只要人为地引进时间因素,把它视为多阶段决策过程,也可用动态规划方法来方便地求解。

动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。 与前面所述的那些搜索或数值计算不同,它具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对于不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。 因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。 另外,也可以通过对若干具有代表性的问题的动态规划算法来进行分析和讨论,逐渐学会并掌握这一设计方法。

4.5.7 软件工程概述

软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。 它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。

1)软件工程的起源

软件工程的兴起要根源于20世纪60年代,70年代和80年代的软件危机。 在那个时代,许多软件最后都得到了一个悲惨的结局,软件项目开发时间大大超出了规划的时间表。 一些项目导致了财产的流失,甚至某些软件导致了人员伤亡。 同时软件开发人员也发现软件开发的难度越来越大。 在软件工程界被大量引用的案例是Therac⁃25的意外:在1985年6月到1987年1月,6个已知的医疗事故来自于Therac⁃25错误地超过剂量,导致患者死亡或严重辐射灼伤。

鉴于软件开发时所遭遇困境,北大西洋公约组织(NATO)在1968年举办了首次软件工程学术会议,并于会中提出“软件工程”来界定软件开发所需相关知识,并建议“软件开发应该是类似工程的活动”。 软件工程自1968年正式提出至今,这段时间累积了大量的研究成果,广泛地进行大量的技术实践,借由学术界和产业界的共同努力,软件工程正逐渐发展成为一门专业学科。

2)软件工程的过程

软件工程的过程通常包括4种基本的过程活动:

①软件规格说明。 规定软件的功能、性能及其运行限制。

②软件开发。 产生满足规格说明的软件,包括设计与编码等工作。

③软件确认。 确认软件能够满足客户提出的要求,对应于软件测试。

④软件演进。 为满足客户的变更要求,软件必须在使用的过程中演进,以求尽量延长软件的生命周期。

3)软件工程的特点

一个良好的软件工程过程应当具备以下特点:

①易理解性。

②可见性。 每个过程活动都以得到明确的结果而告终,保证过程的进展对外可见。

③可支持性。 容易得到CASE工具的支持。

④可接受性。 比较容易被软件工程师接受和使用。

⑤可靠性。 不会出现过程错误,或者出现的过程错误能够在产品出错之前被发现。

⑥健壮性。 不受意外发生问题的干扰。

⑦可维护性。 过程可以根据开发组织的需求的改变而改进。

⑧高效率。 从给出软件规格说明起,就能够较快地完成开发而交付使用。

4)软件工程过程模型

在一个具体的实际工程活动中,软件工程师必须设计、提炼出一个工程开发策略,用以覆盖软件过程中的基本阶段,确定所涉及的过程、方法、工具。 这种策略常被称为“软件工程过程模型”。

过程模型比较流行的有瀑布模型、原型模型、快速应用开发模型、增量模型、螺旋模型、形式化方法模型、RUP(Rational Unified Process)模型、敏捷过程模型、构件组装模型、并发开发模型等。

5)软件开发过程中的主要环节

①软件设计。 主要是把对软件的需求翻译为一系列的表达式(如图形、表格、伪码等)来描述数据结构、体系结构、算法过程,以及界面特征等。

②编码。 主要依据设计表达式写出正确的容易理解、容易维护的程序模块。

③软件测试。 主要是通过各种类型测试及相应的调试,以发现功能、逻辑和实现上的缺陷,使软件达到预定的要求。

6)软件维护

在软件运行及维护阶段对软件产品进行的修改就是所谓的维护。

软件维护的类型有4种:

①改正性维护。 为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用,应当进行的诊断和改正错误的过程称为改正性维护。

②适应性维护。 在使用过程中,外部环境,数据环境可能发生变化。 为使软件适应这种变化,而去修改软件的过程称为适应性维护。

③完善性维护。 修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件的可维护性。 在这种情况下进行的维护活动称为完善性维护。

④预防性维护。 预防性维护是为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好的基础。

习 题

1.单选题

(1)一般操作系统的主要功能是( )。

A.对汇编语言、高级语言和甚高级语言进行编译

B.管理用各种语言编写的源程序

C.管理数据库文件

D.控制和管理计算机系统软、硬件资源

(2)操作系统的作用是( )。

A.软、硬件的接口 B.进行编码转换

C.把源程序翻译成机器语言程序D.控制和管理系统资源的使用

(3)操作系统是一种对计算机( )进行控制和管理的系统软件。

A.硬件 B.资源 C.软件 D.文件

(4)计算机能够直接识别和处理的语言是( )。

A.汇编语言 B.自然语言 C.机器语言 D.高级语言

(5)在微机中的“DOS”,从软件归类来看,应属于( )。

A.应用软件 B.工具软件 C.系统软件 D.编辑系统

(6)某单位的财务管理软件属于( )。

A.工具软件 B.系统软件 C.编辑软件 D.应用软件

(7)属于面向对象的程序设计语言( )。

A.C B.FORTRAN C.Pascal D.Visual Basic

(8)计算机能直接执行的程序是( )。

A.源程序 B.机器语言程序 C.高级语言程序 D.汇编语言程序

(9)CPU执行人所指定的最小任务为( )。

A.程序 B.指令 C.语句 D.地址

(10)比较算法和程序,以下说法中正确的是( )。

A.算法可采用“伪代码”或流程图等方式来描述

B.程序只能用高级语言表示

C.算法和程序是一一对应的

D.算法就是程序

2.填空题

(1)软件分为_____、_____两类。

(2)程序翻译的3种方式分别是_____、_____、_____。

3.判断题

(1)在Windows操作系统中,如果用户只启动了一个应用程序工作,那么该程序可以自始至终独占CPU。 ( )

(2)程序中仅使用条件选择结构也可直接描述重复的计算过程。 ( )

(3)软件是以二进位表示,且通常以电、磁、光等形式存储和传输的,因而很容易被复制。( )

(4)在具有多任务处理功能的操作系统中,一个任务通常与一个应用程序相对应。( )

(5)为了提高计算机的处理速度,计算机中可以包含多个CPU,以实现多个操作的并行处理。 ( )

(6)多任务处理就是CPU在同一时刻执行多个程序。 ( )

(7)实时操作系统的主要特点是允许多个用户同时联机使用计算机。 ( )

(8)软件必须依附于一定的硬件和软件环境,否则它可能无法正常运行。 ( )

(9)所有存储在磁盘中的MP3音乐都是计算机软件。 ( )

(10)计算机软件包括软件开发和使用所涉及的资料。 ( )

4.简答题

(1)简述操作系统的概念。

(2)简述操作系统的5大功能。

(3)简述操作系统发展的4个基本阶段。

(4)简述算法的基本概念,算法包含哪些特点?

(5)用C语言编写程序实现:1+3+5+7+…+97+99。

(6)用C语言编写程序实现:1-3+5-7+…+97-99。

(7)用C语言编写程序实现:(1-1/3+1/5-1/7+…+1/97-1/999999)∗4。