|
知识路径: > 计算机系统基础知识 > 计算机软件基础知识 > 程序设计语言和语言处理程序知识 > 程序设计语言的基本成分(数据、运算、控制和传输)、函数调用机制 > 程序语言概述 >
|
被考次数:7次
被考频率:中频率
总体答错率:50%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
相关知识点:15个
|
|
|
|
|
计算机的硬件只能识别由0、1组成的机器指令序列,即机器指令程序,因此机器指令是最基本的计算机语言。由于机器指令是特定的计算机系统所固有的、面向机器的语言,所以用机器语言进行程序设计时,有较多不便之处,如效率低、程序可读性很差、难以理解、难以修改和维护等。因此,人们就用容易记忆的符号代替0、1序列来表示机器指令,例如,用ADD表示加法、SUB表示减法等。用符号表示的指令称为汇编指令,汇编指令的集合被称为汇编语言。汇编语言与机器语言十分接近,其格式在很大程度上取决于特定计算机的机器指令,因此它仍然是一种面向机器的语言,人们称机器语言和汇编语言为低级语言。在此基础上,人们设计了功能更强、抽象级别更高的语言以支持程序设计,于是就产生了面向各类应用的程序语言,称为高级语言。常见的有Java、C、C++、C#、Python、PHP、JavaScript等。这类语言与人们使用的然语言比较接近,大大提高了程序设计的效率。
|
|
|
|
高级程序语言必须进行翻译才能为计算机硬件所理解,语言之间的翻译形式有多种,基本方式为汇编、解释和编译。
|
|
|
用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。如果源程序是用汇编语言编写的,则需要一个汇编程序将其翻译成目标程序后才能执行。如果源程序是用某种高级语言编写的,则需要对应的解释程序或编译程序对其进行翻译,然后在机器上运行。
|
|
|
解释程序也称为解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行;而编译程序(编译器)则是将源程序翻译成目标语言程序,然后在计算机上运行目标程序。这两种语言处理程序的根本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示)要参与到程序的运行过程中,运行程序的控制权在解释程序。简单来说,在解释方式下,翻译源程序时不生成独立的目标程序,而编译器则将源程序翻译成独立保存的目标程序。
|
|
|
|
|
语法是指由程序语言的基本符号组成程序中的各个语言结构(包括程序)的一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号构成语法成分的规则称为语法规则。程序语言的语法可用形式语言进行描述。
|
|
|
语义是程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义。静态语义指编译时可以确定的语法成分的含义,而运行时才能确定的含义是动态语义。一个程序的执行结果说明了该程序的语义,它取决于构成程序的各个组成部分的语义。
|
|
|
语用表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。语言的实现则有个语境问题。语境是指理解和实现程序设计语言的环境,包括编译环境和运行环境。
|
|
|
|
程序语言有交流算法和计算机实现的双重目的,现在的程序语言种类繁多,它们在应用上各有不同的侧重面。若一种程序语言不依赖于机器硬件,则称为高级语言;若程序语言能够应用于范围广泛的问题求解领域,则称为通用的程序设计语言。
|
|
|
|
各种程序语言都在不断地发展之中,许多新的语言也相继出现,各种开发工具在组件化和可视化方面进展迅速。
|
|
|
Fortran(Formula Translation)是第一个被广泛用来进行科学和工程计算的高级语言。一个Fortran程序由一个主程序和若干个子程序组成。主程序及每一个子程序都是独立的程序单位,称为一个程序模块。该语言自诞生以来广泛地应用于数值计算领域,积累了大量高效而可靠的源程序。Fortran语言的最大特性是接近数学公式的自然描述,具有很高的执行效率,目前被广泛地应用于并行计算和高性能计算领域。
|
|
|
ALGOL(ALGOrithmic Language)诞生于晶体管计算机流行的年代,ALGOL 60是程序设计语言发展史上的一个里程碑,主导了20世纪60年代程序语言的发展,并为后来软件自动化及软件可靠性的发展奠定了基础。ALGOL 60有严格的公式化说明,即采用巴科斯范式BNF来描述语言的语法。ALGOL 60引进了许多新的概念,如局部性概念、动态、递归等。
|
|
|
Pascal是一种过程式、结构化程序设计语言,由瑞士苏黎世联邦工业大学的沃斯(N. Wirth)教授设计,于1970年发表。该语言是从ALGOL60衍生的,但功能更强且容易使用。Pascal语言曾经在高校计算机软件教学中一直处于主导地位,其集成开发工具Turbo Pascal曾经非常流行。1985年发布了Object Pascal。
|
|
|
C语言是20世纪70年代初发展起来的一种通用程序设计语言,UNIX操作系统及其上的许多软件都是用C编写的。它兼顾了高级语言和汇编语言的特点,提供了一个丰富的运算符集合以及比较紧凑的语句格式。由于C提供了高效的执行语句并且允许程序员直接访问操作系统和底层硬件,因此在系统级应用和实时处理应用开发中成为主要语言。
|
|
|
C++是在C语言的基础上于20世纪80年代发展起来的,与C兼容,但是比C多了封装和抽象,增加的类机制使C++成为一种面向对象的程序设计语言。
|
|
|
C#(C Sharp)是由Microsoft公司所开发的一种面向对象的、运行于.NET Framework的高级程序设计语言,相对于C++,这个语言在许多方面进行了限制和增强。
|
|
|
Objective-C是根据C语言所衍生出来的语言,继承了C语言的特性,是扩充C的面向对象编程语言,其与流行的编程语言风格差异较大。由于GCC(GNU Compiler Collection,GNU编译器套装)含Objective-C的编译器,因此可以在GCC运作的系统中编写和编译。该语言主要由Apple公司维护,是MAC系统下的主要开发语言。与C#类似,Objective-C仅支持单一父类继承,不支持多重继承。
|
|
|
Java产生于20世纪90年代,其初始用途是开发网络浏览器的小应用程序,但是作为一种通用的程序设计语言,Java得到非常广泛的应用。Java保留了C++的基本语法、类和继承等概念,删掉了C++中一些不好的特征,因此与C++相比,Java更简单,其语法和语义更合理。
|
|
|
Ruby是松本行弘(Yukihiro Matsumoto,常称为Matz)大约在1993年设计的一种解释性、面向对象、动态类型的脚本语言。在Ruby语言中,任何东西都是对象,包括其他语言中的基本数据类型,比如整数;每个过程或函数都是方法;变量没有类型;任何东西都有值(不管是数学或者逻辑表达式还是一个语句,都会有值)等等。
|
|
|
PHP(Hypertext Preprocessor)是一种在服务器端执行的、嵌入HTML文档的脚本语言,其语言风格类似于C语言,由网站编程人员广泛运用。PHP可以快速地执行动态网页,其语法混合了C、Java、Perl以及PHP自创的语法。由于在服务器端执行,PHP能充分利用服务器的性能。另外,PHP支持几乎所有流行的数据库以及操作系统。
|
|
|
Python是一种面向对象的解释型程序设计语言,可以用于编写独立程序、快速脚本和复杂应用的原型。Python也是一种脚本语言,它支持对操作系统的底层访问,也可以将Python源程序翻译成字节码在Python虚拟机上运行。虽然Python的内核很小,但它提供了丰富的基本构建块,还可以用C、C++和Java等进行扩展,因此可以用它开发任何类型的程序。
|
|
|
JavaScript是一种脚本语言,被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常,将JavaScript脚本嵌入在HTML中来实现自身的功能。
|
|
|
Delphi是一种可视化开发工具,在Windows环境下使用,其在Linux上的对应产品是Kylix,其主要特性为基于窗体和面向对象的方法、高速的编译器、强大的数据库支持、与Windows编程紧密结合以及成熟的组件技术。它采用面向对象的编程语言Object Pascal和基于构件的开发结构框架。
|
|
|
Visual Basic.NET是基于微软.NET Framework的面向对象的编程语言。用.NET语言(包括VB.NET)开发的程序源代码不是直接编译成能够直接在操作系统上执行的二进制本地代码,而是被编译成为中间代码MSIL(Microsoft Intermediate Language),然后通过.NET Framework的通用语言运行时(CLR)来执行。程序执行时,.NET Framework将中间代码翻译成为二进制机器码后,使它得以运行。因此,如果计算机上没有安装.NET Framework,这些程序将不能够被执行。
|
|
|
|
程序语言的分类没有统一的标准,这里根据设计程序的方法将程序语言大致分为命令式和结构化的程序设计语言、面向对象的程序设计语言、函数式程序设计语言和逻辑型程序设计语言等范型。
|
|
|
(1)命令式程序设计语言。命令式语言是基于动作的语言,在这种语言中,计算被看成是动作的序列。命令式语言族开始于Fortran,Pascal和C语言都可以体现命令式程序设计的关键思想。
|
|
|
通常所称的结构化程序设计语言属于命令式语言类,其结构特性主要反映在以下几个方面:一是用自顶向下逐步精化的方法编程;二是按模块组织的方法编程;三是程序只包含顺序、判定(分支)及循环构造,而且每种构造只允许单入口和单出口。结构化程序的结构简单清晰、模块化强,描述方式接近人们习惯的推理式思维方式,因此可读性强,在软件重用性、软件维护等方面都有所进步,在大型软件开发中曾发挥过重要的作用。目前仍有许多应用程序的开发采用结构化程序设计技术和方法。C、Pascal等都是典型的结构化程序设计语言。
|
|
|
(2)面向对象的程序设计语言。程序设计语言的演化从最开始的机器语言到汇编语言到各种结构化高级语言,最后到支持面向对象技术的面向对象语言,反映的就是一条抽象机制不断提高的演化道路。
|
|
|
面向对象的程序设计在很大程度上应归功于从模拟领域发展起来的Simula,其提出了对象和类的概念。C++、Java和Smalltalk是面向对象程序设计语言的代表,它们都必须支持新的程序设计技术,如数据隐藏、数据抽象、用户定义类型、继承和多态等。
|
|
|
(3)函数式程序设计语言。函数式语言是一类以λ-演算为基础的语言,其基本概念来自于LISP,这是一个在1958年为了人工智能应用而设计的语言。函数是一种对应规则(映射),它使定义域中每个元素和值域中唯一的元素相对应。
|
|
|
|
函数定义2:Plustwo[x]:=Plusone[Plusone[x]]
|
|
|
函数定义3:fact[n]:=if n=0 then 1 else n*fact[n-1]
|
|
|
在函数定义2中,使用了函数复合,即将一个函数调用嵌套在另一个函数定义中。在函数定义3中,函数被递归定义。由此可见,函数可以看成是一种程序,其输入就是定义中左边括号中的量。它也可将输入组合起来产生一个规则,组合过程中可以使用其他函数或该函数本身。这种用函数和表达式建立程序的方法就是函数式程序设计。函数式程序设计语言的优点之一就是对表达式中出现的任何函数都可以用其他函数来代替,只要这些函数调用产生相同的值。
|
|
|
函数式语言的代表LISP在许多方面与其他语言不同,其中最为显著的是,其程序和数据的形式是等价的,这样数据结构就可以作为程序执行,程序也可以作为数据修改。在LISP中,大量地使用递归。常见的函数式语言有Haskell、Scala、Scheme、APL等。
|
|
|
(4)逻辑型程序设计语言。逻辑型语言是一类以形式逻辑为基础的语言,其代表是建立在关系理论和一阶谓词理论基础上的Prolog。Prolog代表Programming in Logic。Prolog程序是一系列事实、数据对象或事实间的具体关系和规则的集合。通过查询操作把事实和规则输入数据库。用户通过输入查询来执行程序。在Prolog中,关键操作是模式匹配,通过匹配一组变量与一个预先定义的模式并将该组变量赋给该模式来完成操作。以值集合S和T上的二元关系R为例,R实现后,可以询问:
|
|
|
|
|
|
|
逻辑型程序设计具有与传统的命令型程序设计完全不同的风格。Prolog数据库中的事实和规则是形式为“P:-P1,P2,…,Pn”的Hore子句,其中n≥0,Pi(1≤i≤n)为形如Ri(…)的断言,Ri是关系名。该子句表示规则:若P1,P2,…,Pn均为真(成立),则P为真。当n=0时,Hore子句变成P,这样的子句称为事实。
|
|
|
一旦有了事实与规则后,就可以提出询问。测试用户询问A是否成立时,采用归结方法。
|
|
|
|
②如果程序中包含Hore子句“P:-P1,P2,…,Pn”,且P和A匹配,则Prolog转而测试P1,P2,…,Pn。只有当P1,P2,…,Pn都成立时才能断言P成立。当求解某个Pi失败时,则返回到前面的某个成功点并尝试另一种选择,也就是进行回溯。
|
|
|
③只有当所有可能情况都已穷尽时,才能推导出P失败。
|
|
|
Prolog有很强的推理功能,适用于书写自动定理证明、专家系统和自然语言理解等问题的程序。
|
|
|