您好,欢迎来到暴趣科技网。
搜索
您的当前位置:首页软件水平考试(中级)软件设计师上午(基础知识)试题模拟试卷78(

软件水平考试(中级)软件设计师上午(基础知识)试题模拟试卷78(

来源:暴趣科技网


软件水平考试(中级)软件设计师上午(基础知识)试题模拟试卷

78 (题后含答案及解析)

题型有:1. 选择题

选择题(每小题1分,共75分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将此选项涂写在答题卡相应位置上,答在试卷上不得分。

1. 下面关于编程语言的各种说法中,(1)是不正确的。 A.逻辑型语言适用于书写自动定理证明

B.Smalltalk、C++、Java、C#都是面向对象语言 C.函数型语言适用于人工智能领域

D.由于C语言程序是由函数构成的,因此它是一种函数型语言

正确答案:D

解析:本题考查各程序语言的特点。按照程序设计范型的分类,程序设计语言基本上可以分为命令式程序设计语言、函数式程序设计语言、面向对象程序设计语言和逻辑程序设计语言。 命令式程序设计语言是基于动作的语言,计算在这里被看作是一个动作的序列。这些动作能够改变变量的值,最典型的动作就是赋值。命令式程序设计语言的代表有Fortran,Pascal和C语言等。 函数是一种对应规则(映射),使定义域中每个元素和值域中唯一的元素相对应。函数式语言是一类以λ演算为基础的语言,主要用于人工智能领域,其代表有Lisp、ML等。 面向对象程序设计语言中最核心的东西是对象和类的概念。面向对象的三个核心概念是封装、继承和多态。面向对象程序设计语言的代表有C++、SmallTalk、Java等。 逻辑程序设计语言是一类以形式逻辑为基础的语言,其代表是建立在关系理论和一阶谓词理论基础上的Prolog。Prolog有很强的推理功能,适用于书写自动定理证明、专家系统和自然语言理解等问题的程序。 知识模块:程序语言与语言处理程序

2. 序言性注释是指在每个程序或模块开头的一段说明,起辅助理解程序的作用,一般包括:程序的表示、名称和版本号,程序功能描述,接口与界面描述,输入/输出数据说明,开发历史,与运行环境有关的信息等。下列叙述中不属于序言性注释功能的是(2)。

A.程序对硬件、软件资源的要求 B.重要变量和参数说明

C.嵌入在程序中的SQIL语句

D.程序开发的原作者、审查者、修改者、编程日期等

正确答案:C

解析:本题主要考查注释的概念。注释一般分为序言性注释和功能性注释。 序言性注释通常位于每个程序的开头部分,给出程序的整体说明,可以包括程序

对硬件、软件资源的要求,重要变量和参数的说明,程序的作者、审查者、编程日期、修改日期等,程序实现的功能描述。 功能性注释的位置一般嵌在源程序体之中,主要用于描述程序中相关语句的作用或注释后程序段的要实行什么功能。 知识模块:程序语言与语言处理程序

3. 传值调用和引用调用是常用的函数调用方式,下列描述中正确的是(3)。 A.在传值调用方式下,是将形参的值传给实参

B.在传值调用方式下,形参可以是任意形式的表达式 C.在引用调用方式下,是将实参的地址传给形参

D.在引用调用方式下,实参可以是任意形式的表达式

正确答案:C 解析:本题主要考查函数调用时的参数传递方式。 当用户调用一个过程时,就会发生通过参数传递信息的过程之间的通信。形式参数就是过程定义中用于命名所传递的数据或其他信息的标志符,而实在参数是在调用点表示向被调用过程传递的数据或其他信息的表达式。在大多数的语言中,形式参数和实在参数之间的对应关系通常按位置来确定。程序语言传递参数的方式通常有传值调用、引用调用和传值-结果调用。 (1)传值调用。在传值调用时,过程的形式参数取得的是实在参数的值。在这种情况下,形式参数实际上是过程中的局部量,其值的改变不会导致调用点所传送的实在参数的值发生改变,也就是说数据的传送是单向的,只往下传,不能回传结果。在C语言中只有按值调用的过程参数传递方式。 (2)引用调用。在引用调用时,过程的形式参数取到的是实在参数所在单元的地址。在过程中,对该形式参数的引用相当于对实在参数所在的存储单元的地址引用。任何改变形式参数值的操作会反映在该存储单元中,也就是反映在实在参数中,因此数据的传送是双向的。C++语言既支持按值调用,也支持按引用调用。 (3)传值-结果调用。传值-结果调用也称为拷入拷出,因为初始时实在参数值被拷贝给形式参数,而在过程调用结束时再把形式参数值拷回给实在参数。 在函数调用时,不管是传值调用,还是引用调用,其形参和实参都不能是任意形式的表达式。 知识模块:程序语言与语言处理程序

4. 编译器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等几个阶段,其中,(4)并不是每种编译器都必需的。

A.语法分析和语义分析

B.中间代码生成和目标代码生成 C.中间代码生成和代码优化 D.代码优化和目标代码生成

正确答案:C 解析:本题考查程序设计语言的编译器原理。 从低级语言到高级语言的编译器,这类编译器中用来从由高级语言生成的低级语言代码重新生成高级语言代码的又被叫做反编译器。也有从一种高级语言生成另一种高级语言的编译器,或生成一种需要进一步处理的中间代码的编译器(又叫级联)。典型的编译器输出是由包含入口点的名字和地址以及外部调用(到不在这个目标文件中的函数调用)

的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必须采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。 编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器又叫做“本地”编译器。另外,编译器也可以生成用来在其他平台上运行的目标代码,这种编译器又叫做交叉编译器。交叉编译器在生成新的硬件平台时非常有用。“源码到源码编译器”是指用一种高级语言作为输入,输出也是高级语言的编译器。例如,自动并行化编译器经常采用一种高级语言作为输入,转换其中的代码,并用并行代码注释对它进行注释(如OpenMP)或者用语言构造进行注释(如 FORTRAN的DOALL指令)。 编译器后端主要负责分析,优化中间代码以及生成机器代码。一般说来所有的编译器分析、优化、变型都可以分成两大类:函数内还是函数之间进行。显然,函数间的分析、优化更准确,但需要更长的时间来完成。 编译器分析的对象是前端生成并传递过来的中间代码,现代的优化型编译器常常用好几种层次的中间代码来表示程序,高层的中间代码接近输入的源程序的格式,与输入语言相关,包含更多的全局性的信息,和源程序的结构;中层的中间代码与输入语言无关,低层的中间代码与机器语言类似。不同的分析,优化发生在最适合的那一层中间代码上。 并不是所有的编译器都会有目标代码或代码优化的过程。 知识模块:程序语言与语言处理程序

5. 高级语言程序编译的过程可以分成千个阶段,其中把单词符号分解成句子属于(5)阶段的工作。

A.词法分析 B.语法分析 C.语义分析 D.分析代码生成

正确答案:B

解析:高级语言源程序的编译过程通常分为词法分析、语法分析、语义分析中间代码生成、优化、目标代码生成5个阶段。 词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词(也称单词符号,或简称符号)在词法分析阶段工作所依循的是语言的词法规则。描述词法规则的有效工具是正规式和有限自动机。 语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号分解成各类语法单位(语法范畴),如“短语”、“句子”、“子句”、“程序段”等。 语义分析与中间代码生成:这一阶段通常包括两方面的工作首先对各种语法范畴进行静态语义检查,如果正确则进行另一方面的工作,即进行中间代码的翻译。 通常使用属性文法描述语义规则。 所谓“中间代码”是一种含义明确,便于处理的记号系统。 中间代码除四元式外,还有三元式、间接三元式、逆波兰记号、树形表示等。 优化:优化的任务在于对前段产生的中间代码进行加工,以期在最后阶段产生更为高效(省时间和空间)的代码。优化所依循的原则是程序的等价变换规则,其方法有公共子表达式的提取、循环优化、删除无用代码等。 目标代码生成:把中间代码(或经优化处理后)变换成特定机器上的低级语言代码。它有赖于硬件系统结构和机器指令含义。 知识模块:程序语言与语言处理程序

6. 有限自动机可分为确定的有限自动机和不确定的有限自动机。那么确定的有限自动机A与不确定的有限自动机B等价,则(6)。

A.A与B的状态个数相等

B.A与B可识别的记号完全相同

C.B能识别的正规集是A所识别正规集的真子集 D.A能识别的正规集是B所识别正规集的真子集

正确答案:B

解析:本题考查程序设计语言的有限自动机,是常考的知识点。 有限状态自动机由3部分组成: (1)一根输入带:输入带可以理解成由一系列带块组成,每个带块上只含有一个输入符号(终结符号),输入带上输入符号串由特殊符号“⊥”结束,⊥!∈T。 (2)一个输入头:初始时,输入头指向第一个带块(即指向输入带最左端的带块),输入头每次将输入头下方带块上的输入符号读入,然后输入头向右移动一个带块,准备读入下一个带块上的输入符号。 (3)一个有限状态控制器:有限状态控制器所能处于的状态的全体组成状态集合Q, Q中有若干特殊状态:一个初始状态q0和若干最终状态qf。开始时有限状态控制器处于初始状态,以后有限状态控制器所处状态由状态转换函数d决定。 下面给出有限状态自动机M的形式描述: 非确定有限状态自动机M是一个五元组,M=(VT,Q,d,q0,Qf)。其中: VT:有限非空终结符集合。 Q:有限非空状态集合。 d:从Q×VT到Q的幂集2Q上的状态转换函数。 q0:初始状态,q0∈Q。 Qf:最终状态集,Qf∈Q |Qf|≥1。 有限状态自动机M被称为确定性的,当且仅当转换函数d对于任何q∈Q,ai∈VT, d(q,ai)至多只有一个元素q’。对于任一个非确定性的有限状态自动机M,存在一个确定的有限状态自动机M’,使M所接受的语言L(M’)就是L(M)。 有限自动机的确定化:对于任一个非确定性的有限状态自动机M,都可以构造其对应的确定性有限自动机M’,使这两个自动机接受相同的字符串集合L(M’)=L(M)。 所以若某DFA D与某NFA M等价,则DFA D与NFA M可识别的记号相同。 知识模块:程序语言与语言处理程序

7. 以下关于编译和解释程序的描述,正确的是(7)。

A.解释程序不需要进行词法和语法分析,而是直接分析源程序的语义并产生目标代码

B.编译程序不需要进行词法和语法分析,而是直接分析源程序的语义并产生目标代码

C.编译程序不生成源程序的目标代码,而解释程序则产生源程序的目标代码

D.编译程序生成源程序的目标代码,而解释程序则不产生源程序的目标代码例

正确答案:B

解析:在计算机中,使用高级语言开发的程序都是不能直接运行的。需要经过一系列的处理才能运行。这个过程,根据其处理方式的不同,可分为解释型和编译型。 解释型:接受所输入的用程序语言编写的源程序,然后直接解释执行,一般是读一句源程序,翻译一句,执行一句,不产生目标代码。这类语言中

的最典型代表是BASIC。 编译型:它将某种程序语言编写的源程序直接翻译成为另一种语言(目标语言程序),而且两者在逻辑上等价,其过程包括词法分析、语法分析、语义分析等过程。很多高级程序设计语言都属于这一类,如C语言、C++等。 综上所述,可以知道,编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成。 知识模块:程序语言与语言处理程序

8. 某确定性有限自动机(DFA)的状态转换图如图2-1所示,令d=0|1|2|…|9,则以下字符串中,能被该DFA接受的是(8)。

A.80008 B.1-2.E+5 C.-968.12 D.12.576E10

正确答案:C

解析:本题考查确定性有限自动机,是常考的知识点。 一个DFA可以表示成一个状态图(或称状态转换图)。假定DFAM含有m个状态, n个输入字符,那么这个状态图含有m个结点,每个结点最多有n个弧射出,整个图含有唯一一个初态结点和若干个终态结点,初态结点冠以双箭头“=>”或标以“-”,终态结点用双圈表示或标以“+”,若f(ki,a)=kj,则从状态结点ki到状态结点kj画标记为a的弧;被DFA所接受是指从初态开始来终态,所输入的字符串能够按顺序的执行下去,若到某个状态不能往下走得到下一个字符,则认为不可接受。本题的状态图的状态间的字符有一、d、E、.,下面来逐个分析4个选项: A选项不能被接受。由于80008都是数字,所以从初态0出发不经过状态4,而是直接到状态1,因为0和1之间产生字符为d,又在状态1处有d*,所以表面可以接受 “dddd”形式的字符串;但是,状态1之后的产生字符是E和.,不再是数字d,若输入全数字则到不了终态6。所以输入3857是不能接受的。 B选项不能被接受。从初态0→4→1→2,就不能再往下走了,因为状态2后的产生字符是“-、d”,不是“+”,也无法到达终态6。 C选项能被接受。从初态0→4→1→5→6,由于状态1和6处的可以反复多个字符,所以本选项正确。 D选项不能被接受。从初态0→1→5→6,虽然从初态到终态,但无法接受字符E了,所以错误。 知识模块:程序语言与语言处理程序

9. 关于以下描述错误的是(9)。

A.高级语言都是用接近人们习惯的自然语言和数学语言作为语言的表达形式

B.计算机只能处理由0和1的代码构成的二进制指令或数据 C.每一种高级语言都有它对应的编译程序

D.C语言源程序经过C语言编译程序编译之后生成一个后缀为EXE的二进制文件

正确答案:D 解析:本题主要考查高级程序设计语言的基础知识。下面分别分析一下本题的4个选项。 由于高级程序设计语言具有可读写、可理解性好等特点,这就要求高级程序设计语言用接近人们习惯的自然语言和数学语言作为语言的表达

形式,选项A的说法正确。 在计算机中,机器可以接受和处理的只能是由0和1组成的二进制代码,用高级语言编写的程序都需要经过编译和连接,使其转化为二进制代码才能被机器执行。因此,选项B的说法正确。 由于高级语言编写的程序都需要经过编译和连接,才能被计算机执行,因此每一种高级语言都有它对应的编译程序,C选项的说法正确。 C语言源程序经过C语言编译程序编译之后生成一个后缀为OBJ的二进制文件(称为目标文件);最后要由“连接程序”把此OBJ文件与C语言提供的各种库函数连接起来生成一个后缀为EXE的可执行文件。因此,选项D的说法不正确。 知识模块:程序语言与语言处理程序

10. 下列关于编译系统对某高级语言进行翻译的叙述中,错误的是(10)。 A.不同的高级程序语言可以产生同一种中间代码 B.在机器上运行的目标程序完全于源程序

C.目标代码生成阶段的工作与目标机器的体系结构相关 D.经过反编译,可以将目标代码还原成源代码

正确答案:D

解析:本题主要考查对编译系统的理解。 求解这个题目,首先要了解源程序、中间代码、目标代码的关系。其中源程序是指用高级语言编写的程序,将源程序经过编译,就可以得到中间代码并最终得到目标代码,目标代码就是可以在具体机器上执行的代码,这时源程序和编译程序都不再参与目标程序的执行过程,所以在机器上运行的目标程序是完全于源程序的。 另外,目标代码是在机器上运行的代码,所以它的生产与目标机器的体系结构是密切相关的。 中间代码是一种简单且含义明确的记号系统,与具体的机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码,另外由于与具体机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性。 编译是将高级语言源程序翻译成机器语言程序(即目标代码),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高级语言源代码,只能转换成功能上等价的汇编程序。 知识模块:程序语言与语言处理程序

11. 对于以下编号为①、②、③的正则式,正确的说法是(11)。 ①(a*b*)b* ②(a|b)b* ③(b*|a*)*b

A.正则式①、②等价 B.正则式①、③等价 C.正则式②、③等价

D.正则式①、②,③等价

正确答案:C

解析:本题主要体现对闭包的理解。 正则闭包:A+=A1∪A2∪A3∪…∪An∪…(也就是所有幂的组合)。闭包:A*:A0∪A+ (在正则闭包的基础上,加上A0={ε})。比如a*={a,aa,aaa,…,ε),而(ab)*={ab,abab, ababab,…,ε)。 正规式中的运算符“|”、“.”、“*”分别称为“或”、“连接”和“闭包”。在正规式的书写中,连接运算符“.”可省略。运算的优先级从高到低顺序排列为:“*”、“.”、“|”。 那么在本题中,(a*b*)*b所表示的含义就是以b

结尾的且只包含a和b字符的任意字符串。 在正则式(a|b)*b中,闭包内的可以选a也可选b,而且a和b在最终字符串中的顺序没有确定,可以是任意的,因此该正则式所表示的含义也是以b结尾的且只包含a和b字符的任意字符串。 在正则式(b*|a*)*b中,括号包内的可以选a*也可选b*,然后对结果进行闭包,同样的道理,a和b在最终字符串中的顺序没有确定,可以是任意的,因此该正则式所表示的含义也是以b结尾的且只包含a和b字符的任意字符串。 综上所述,可知题目中给出的三个正则式都表示以b结尾的且只包含a和b字符的任意字符串,因此是等价的。 知识模块:程序语言与语言处理程序

12. 集合L={ambm|m≥0)(12)。 A.可用正规式“a*b*”表示

B.不能用正规式表示,但可用非确定的有限自动机识别 C.可用正规式“ambm”表示

D.不能用正规式表示,但可用上下文无关文法表示

正确答案:D 解析:用正规式定义一些简单的语言,但是很多复杂一些的语言不能用正规式表达。例如,正规式不能用于描述配对或嵌套的结构,具体的例子有由配对括号构成的串的集合不能用正规式描述,语句的嵌套结构也不能用正规式描述;还有,重复串也不能用正规式表示,如集合{WCW|W是a和b的串)不能用正规式描述。 正规式只能表示给定结构的固定次数的重复或没有指定次数的重复。在本题中,指定了重复的次数m,但m又不是固定的,所以也不能使用正规式表示。 有限状态自动机识别的语言是正规语言。对于每个非确定的有限自动机,都有一个与其等价的正规式。因此,题目中的集合既然不能使用正规式表达,也就不能用非确定的有限自动机识别。 上下文无关文法的描述功能比正规式更强,正规式可以描述的每种结构都可以用上下语言无关文法来描述,但反之不然。上下文无关文法能表示次数不固定的重复。因此本题的答案选D。 知识模块:程序语言与语言处理程序

13. 程序语言的大多数语法现象可用上下文无关文法描述。对于一个上下文无关文法G=(N,T,P,S),其中N是非终结符号的集合,T是终结符号的集合,P是产生式集合,S是开始符号。令集合V:N∪T,那么G所描述的语言是(13)的集合。

A.从S出发推导出的包含V和T中所有符号的串 B.从S出发推导出的只包含V中所有符号的串 C.从S出发推导出的只包含T中符号的串 D.T中所有符号组成的串

正确答案:C

解析:对于一个上下文无关文法G=(N,T,P,S),如果它的产生式规则都取如下的形式: V∈w,这里V∈VN,w∈(VT∪VN)*。开始符号是一种特殊的非终结符,而所谓终结符号是组成语言的基本符号,从语法分析的角度来看,终结符号是一个语言不能再进行分割的基本符号。上下文无关文法取名为“上下文无关”的原因就是因为字符V总可以被字串w自由替换,而无须考虑字符V出

现的上下文。在这道题里,V∈N∪T,根据“上下文无关”的特性,V总可以被字串N∪T自由的替换;但当V=N∪T时,由于非终结符的不唯一性,要构成等式成立,必须要N∪T中的符号串收缩为终结符,即都是T的集合。所以上下文无关方法G所描述的语言是从S出发推导出的仅包含T中符号的串的集合。 知识模块:程序语言与语言处理程序

14. 某一确定有限自动机(DFA)的状态转换图如图2-2所示,与该DFA等价的正规式是(14)。

A.10*(0|1)* B.((0*0)*1*)* C.1*((0|1)00)* D.(1*(01*0)*)*

正确答案:D 解析:本题主要考察有限自动机和正规式,这个知识点也是考试中的重点和难点。 对于判断一个有限自动机与那个正规式等价,常见的方法是分析有限自动机,清楚有限自动机所表示的含义和特性,然后用排除法找到与该有限自动机等价的正规式。 对于本题,首先分析题目中给出的状态转换图,由图可知,状态q0为唯一的终态,也是初态,那么从初态到终态可以不输入然后字符,因此该有限自动机可识别空串。 另外,仔细分析有限自动机,不难发现,以一个0离开状态q0然后再以一个0返回状态q0。那么从初态到终态输入0的个数必须是偶数,而该有限自动机只能识别0和1两种字符。因此该自动机识别的串是包含偶数0的二进制代码串。 清楚了该有限自动机的特性和含义后,我们再逐个分析四个正规式。 在正规式1*0(0|1)木中,不能确保O的个数是偶数,而不能表示空串(因为所有闭包取空,结果仍然有一个1),因此这个正规式肯定不与有限自动机等价。 在正规式((0*0)*1*)*中,可以表示空串,但不能确保O的个数是偶数,因此也不等价于题目给出的有限自动机。 同样的道理,可知正规式1*((0|1)00)*也不与题目给出的有限自动机等价。 而在正规式(1*(01*0)*)*中,即可以表示空串,也由于(01*0)这部分不管重复多少次,都能确保0的个数是偶数,因此等价。 知识模块:程序语言与语言处理程序

15. 图2-3所示为一确定有限自动机的状态转换图,图中的(15)是可以合并的状态。

A.0和1 B.2和3 C.1和2 D.0和3

正确答案:B

解析:在状态转换图中,每一个结点代表一个状态,其中双圈是终结状态。该题实际上是一个简化确定有限自动机(DFA)的过程,一个确定有限自动机可以通过消除多余状态和合并等价状态而转换成一个最小的与之等价的有限自动机。 先介绍两个概念:最小状态DFA和等价状态。 最小状态DFA必须满足以下两个条件。 (1)没有多余状态(死状态):多余状态是指从该自动机的开始状态

出发,任何输入串都不能到达的那个状态。 (2)没有两个状态是互相等价(不可区别)。 两个状态s和t如果同时满足下列两个条件,我们就称s和t是等价的: (1)一致性:同是终态或同是非终态。 (2)蔓延性:从s出发读入某个a和从t出发读入某个a到达的状态等价。 本题的简化过程如下: 首先,将图中状态分为终态和非终态两个子集即({0,1},{2,3}),再进行子集划分。观察第一个子集{0,1},输入b后,状态O转换为状态1,而状态1转换为状态2。因此{1}和{2}中的状态是可区别的。 由于状态2,3输入字符a得到相同的结果3,输入字符b得到相同结果2,所以子集{2,3}是不可区别的。从而得到新的划分:({0},{1},{2,3}),因此,本题的正确答案为B。 知识模块:程序语言与语言处理程序

16. 已知函数f1( )、f2( )的定义如下所示,设调用函数f1时传递给形参x的值是10,若函数调用f2(a)以引用调用(Call By Reference)方式传递信息和以值调用(Call By Va1ue)方式传递信息,则函数f1的返回值分别为(16)。

A.20和20 B.59和20 C.59和98 D.20和98

正确答案:B

解析:本题主要考查传值调用和引用调用。 在传值调用中,形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变;而引用(传址)调用中,形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值。 在本题中,f2以引用调用时,这个时候将变量x的值10传递给变量a,即a的值为10,然后将a作为f2的实参,以引用调用方式调用f2,然后计算得到y的值为49并带回,然后在函数f1中返回a+x=49+10=59。 f2以值调用时,这个时候将变量x的值10传递给变量a,即a的值为10,然后将a作为f2的实参,以值调用方式调用f2,然后计算得到y的值为49,但无法带回,然后在函数f1中返回a+x=10+10=20。 知识模块:程序语言与语言处理程序

17. 序设计语言一般都提供多种循环语句,有先判断循环条件再执行循环体的while语句,也有先执行循环体再判断循环条件的do-while语句,那么下列描述中正确的是(17)。

A.while循环语句能够实现的功能do-while不一定能实现 B.循环条件相同时,while语句的执行效率更高

C.while语句的循环体执行次数比循环条件的判断次数少1,而do-while语句的循环体执行次数等于循环条件的判断次数

D.while语句的循环体执行次数比循环条件的判断次数少1,而do-while语句的循环体执行次数比循环条件的判断次数多1

正确答案:C 解析:本题主要考查循环结构。 常见的循环结构有while结构、do-while结构和for结构。while循环也称为当型循环,其逻辑如下图所示。 从图中,

不难看到,while语句是先判定循环条件,条件成立,则执行循环体,而条件不成立,则不执行循环题,循环结束,这样很显然,其条件的判定次数肯定不循环体的执行次数多1。而在do-while结构中,是先执行循环体,再判断条件,如果条件成立,则继续执行循环体,每次循环体结束后,都要判断一次条件,知道条件不成立,循环部分结束,所以其循环体的执行次数等于条件的判断次数。 知识模块:程序语言与语言处理程序

18. 某一确定性有限自动机(DFA)的状态转换如图2-4所示,则以下字符串中,不能被该DFA接受的是(18)。①0010 ②0001 ③0101

A.①,② B.①,③ C.②,③

D.①,②,③

正确答案:C 解析:本题主要考查有限自动机识别字符串,这也是考试中一个常考的知识点。所谓被有限自动机所识别,就是依次输入字符串中的字符,判断其是否能使有限自动机从初态开始到终态结束,如果能,则能被该有限自动机所识别,反之,则视为不能被该有限自动机所识别。 在本题中,给出了3个字符串,分别来判断这3个字符串是否能别有限自动机所识别。 对于字符串0010,从初态q0出发,输入0后,跳转到自己,然后再输入0,依然调整到自己,然后输入1,跳转到终态q1,这个时候要注意,看到这里很多考生就认为该字符串能被该有限自动机所识别,但其实不然,因为还有一个字符0没有输入,如果输入这个0,则又跳转到了初态,因此该字符串不能被有限自动机所识别。 对于字符串0001,从初态q0出发,输入3个0后,仍然跳转到自己,然后再输入1,跳转到终态q1,这时,字符串中的字符已经输入完成,因此该字符串能被该有限自动机所识别。 对于字符串0101,从初态q0出发,输入后,跳转到自己,然后再输入1,跳转到终态q1,输入字符0,又跳转到初态q0,再输入1,跳转到终态q1,因此在字符串输入完成后,自动机的状态停在终态,所以该字符串同样能被本题的有限自动机所识别。 知识模块:程序语言与语言处理程序

19. 设某程序中定义了全局整型变量x和y,且函数f( )的定义如下所示,则在语句“x=3*y+1;”中(19)。 int f(int y) { int x; x=3*y+1; return x; }

A.x和y均是全局变量

B.x是全局变量、y是局部变量 C.x是局部变量、y是局部变量 D.x是局部变量、y是全局变量

正确答案:C 解析:本题主要考查程序中变量的作用域。 根据变量作用域与其定义语句在程序中出现位置关系,可把变量分为局部变量和全局变量两种。其中,在函数外部定义的变量叫做全局变量,又称为外部变量;在函数体内定义的变量是局部变量,又称为内部变量(当然,函数的形参也是一种局部变量)。局部变量和全

局变量主要有以下区别。 (1)作用域的不同,局部变量的作用域是定义它的函数或程序段,而全局变量的作用域是整个程序。 (2)局部变量的生命周期与其存储类型有关,而全局变量的生命周期是整个程序的生命周期。 (3)当局部变量和全局变量同名时,局部变量在其作用域内具有更高的优先使用权。 (4)不同函数或程序段之中的局部变量可以同名,而不同的全局变量名称必须不相同。 所以,在本题中,虽然在函数外定义了全局变量x和y,但在函数f中,有局部变量x和v,那么在函数f中使用时,局部变量比全局变量具有更高的优先权,所以函数f中的x和y都是局部变量。 知识模块:程序语言与语言处理程序

20. 下列叙述中正确的是(20)。

A.算法的时间、空间复杂性与实现该算法所采用的程序设计语言相关 B.面向对象程序设计语言不支持对一个对象的成员变量进行直接访问 C.与汇编语言相比,采用脚本语言编程可获得更高的运行效率

D.面向对象程序设计语言不支持过程化的程序设计,只支持面向对象程序设计

正确答案:B

解析:本题考查程序设计语言基础知识。 过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,这个过程抽象程度越来越高,程序可读性越来越好,但其程序的执行效率越来越低。 面向对象程序设计语言引入了数据抽象和类的概念,即可支持过程化的程序设计,也可以支持面向对象的程序设计。其最大的特点有继承、封装和多态,其中它的封装特性决定了面向对象程序设计语言不支持对一个对象的成员变量被直接访问,否则就破坏了其封装性。 关于脚本语言的一些基本知识如下: ①脚本语言(JavaScript,VBScript等)是介于HTML和C、C++、Java、C撑等编程语言之间的程序设计语言。HTML通常用于格式化和链接文本,而编程语言通常用于向机器发出一系列复杂的指令。 ②脚本语言中也使用变量和函数,这一点与编程语言相似。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂。 ③脚本语言一般都有相应的脚本引擎来解释执行,是一种解释性语言,一般需要解释器才能运行。 ④脚本语言一般以文本形式存在,类似于一种命令。 下面举例说明脚本语言。设有一个可执行程序open_aa.exe,用于打开扩展名为“.aa”的文件。编写“.aa”文件需要指定一套规则(语法),open_aa.exe就用这种规则来理解文件编写人的意图并做出回应。因此,这一套规则就是脚本语言。 汇编语言是符号化的机器语言,一般情况下,用汇编语言编写的程序比高级语言效率更高。根据脚本语言的以上特点,“采用脚本语言编程可获得更高的运行效率”是错误的。 综上所述,可知本题的正确答案选B。 知识模块:程序语言与语言处理程序

21. 若程序中存在死循环,那么这属于(21)错误。 A.语法 B.语用 C.语义 D.语境

正确答案:C

解析:源程序中可能出现的错误主要有三类:词法错误、语法错误和语义错误。 ①词法错误如非法字符或拼写错关键字、标识符等。 ②语法错误是指语法结构出错,如少分号、begin/end不配对等。 ③静态语义错误:如类型不一致、参数不匹配等。 ④动态语义错误(逻辑错误):如死循环、变量为零时作除数等。 大多数错误的诊断和恢复集中在语法分析阶段。一个原因是大多数错误是语法错误;另一个原因是语法分析方法的准确性,它们能以非常有效的方法诊断语法错误。 在编译时,想要准确诊断语义或逻辑错误有时是很困难,所存在死循环这样的错误,一般在编译阶段是不会报错的,只要到程序运行时,才会发现。 知识模块:程序语言与语言处理程序

22. 由终结符0、1组成且仅包含偶数个0的串的集合用正规式表示为(22)。 A.(0*0)*1* B.(1*(01*0)*)* C.(0*0*)*1)* D.(0|1)*(00)*

正确答案:B

解析:本题考查对正规式的理解。 在正规式中,符号木表示闭包,即所标示部分可以重复若干次(包括0次),那么本题中4个正规式那个能表示题目描述的含义,可以逐个分析。 在选项A中,正规式(0*0)*1*中的表达式(0*0)根据重复的次数不同,得到的结果中含0的个数并不一定是奇数个,也有可能是偶数个,如001就是这个正规式所能表示的一个字符串。 在选项B中,正规式(1*(01*0)*)*中的表达式(01*0)*不管重复多少次,其0的个数都是2n个,因此这个正规式能保证0的个数是偶数个。 同样的道理,可以推断出在选项C、D中,不能确保0的个数是偶数个。 知识模块:程序语言与语言处理程序

23. 许多程序设计语言规定,程序中的数据都必须具有类型,其作用不包括(23)。

A.便于系统数据分配合理的存储单元 B.便于了解数据的取值范围

C.便于对参与表达式计算的数据对象进行检查 D.便于定义动态数据结构

正确答案:D

解析:本题考查程序设计语言的基础知识。 程序设计语言规定,程序中的数据都必须具有类型,这主要是考虑到了以下几个因素: (1)确定数据类型,这样就确定了该数据所需要占用的存储空间,便于系统为程序分配存储空间。 (2)确实了数据类型,就知道了该数据占几个字节,自然也就清楚了数据所能表示的数组范围。 (3)确定了数据类型,那么就确定了该数据能参加一些什么样的运算,如自加运算就不允许其操作数为浮点数。 知识模块:程序语言与语言处理程序

24. 以下关于程序设计语言的描述中,正确的是(24)。 A.在C语言中,对指针变量进行算术运算是没有意义的 B.在C语言中,指针变量必须由动态产生的数据对象来赋值 C.在C语言中,变量和常量都具有类型属性 D.在C语言中,变量和常量都可以被赋值

正确答案:C

解析:在C语言中,常理是指值一旦确定后就不能再变的量,而变量则是一个在程序执行过程中,可以根据需要修改的量,是一个可改变的量。当然不管是常量还是变量,它们都有其类型属性,而变量的值允许修改,因此可被赋值,常量则不能赋值。 变量是内存单元的抽象,用于在程序中表示数据。当变量存储的是内存单元地址时,称为指针变量,或者说指针变量指向了另一个变量。指针变量可以定义在函数或复合语句内,也可以定义在所有的函数之外,即可以是全局变量,也可以是局部变量。需要区分指针变量与指针所指向的变量,无论指针变量指向何种变量,其存储空间大小都是一样的。当指针变量指向数组中的一个元素时,对指针变量进行算术运算可以使其指向同一个数组中的其他元素。 知识模块:程序语言与语言处理程序

25. 表达式a*(b+c)-d的后缀表达式为(25)。 A.abcd*+- B.abc+*d- C.abc*+d- D.-+*abcd

正确答案:B

解析:题目要求根据已知的表达式写对应的后缀表达式。解这种题,如果知道前缀、中缀、后缀表达式有何关联,有什么特点,解题就非常轻松。其实前缀、中缀、后缀的得名是从二叉树来的,也就是把一个表达式转化为一棵二叉树后,对二叉树进行前序遍历得到前缀表达式,对二叉树进行中序遍历得到中序表达式(也就是一般形式的表达式),对二叉树进行后序遍历得到后缀表达式。所以这里只要把表达式转成树的形式,再对二叉树进行后序遍历,即可得到正确答案。现在最主要的问题是如何构造这棵树。构造的规则是这样的:所有的操作数只能在叶子结点上,操作符是它们的根结点,括号不构造到二叉树当中去,构造树的顺序要遵循运算的顺序。在表达式a*(b+c)-d中最先计算b+c,所以先构造如图2-6所示的部分。 然后把b+c的结果与a进行运算,有如图2-7所示的结果。 接着把运算结果和d相减,最终得到的二叉树如图2-8所示。 对此树进行后序遍历得到序列:abc+*d-,所以正确答案是B。 知识模块:程序语言与语言处理程序

26. 已知某文法G[S]:S→aSa S→b,从S推导出的符号串可用(26)(n≥0)描述。

A.(aba)n B.anban C.bn

D.abna

正确答案:B

解析:本题考查文法的推导过程,是常考的知识点。 对于这类题目,求解,可以先从开始符开始,本题中就是S,注意这是从“文法G[S]”的描述中看出的,另外在产生式中,默认大写字符是非终结符,而小写字母是终结符,这些知识题目中很可能不会给出,但必须知道。 然后分别看产生式S→aSa S→b,如果是S→b的话,那么b是终结符,就直接结束了,而如果是S用aSa替换,重复多次的话,就行成了anSan,最后S用b替代,就可以得到本题答案选B。 知识模块:程序语言与语言处理程序

27. 下列程序语言, (27)最早是为了教学的目的开发而成的。 A.C语言 B.Fortran C.Prolog D.Pascal

正确答案:D

解析:本题考查各高级程序设计语言的特点。 Fortran语言是第一个广泛应用于科学计算的高级语言。由一个主程序和若干个子程序组成,由于大部分代码都可以直接使用硬件结构实现,因此执行效率很高。 Pascal语言最早是为了教学的目的开发而成的,拥有一些相当紧凑的机制,其语言的表达能力十分强。它引入了数据结构、过程等重要概念。常用的Delphi便是采用的PASCAL语言语法规则。 C语言是20世纪70年代发展起来的通用程序设计语言,提供了指针、数组、结构、联合等新的数据类型。它通过指针可以完成地址操作能力,因此是一种较低级的语言,能够编写出高效的程序。UNIX系统本身,以及其中大量的应用程序都是使用C编写的。 Prolog程序是以特殊的逻辑推理形式回答用户的查询。Prolog程序具有逻辑的简洁性和表达能力。实际应用上多用于数据库和专家系统。 知识模块:程序语言与语言处理程序

28. 对于正规式0*(010101)*0,其正规集中字符串的特点是(28)。 A.开头和结尾必须是0 B.1必须出现奇数次 C.0不能连续出现 D.1不能连续出现

正确答案:D

解析:本题考查对正规式的理解。 在本题给出的正规式0*(010101)*0中,0*部分可以使连续出现多个0,这部分也可以表示为空,因此开头不一定是0,而(010101)*部分随着重复次数的不同,那么出现1的个数有可能是奇数次,也有可能是偶数次,但不管010101部分不管怎么重复,都不能出现连续的1,因此本题的答案选D。 知识模块:程序语言与语言处理程序

29. 下面的C程序代码段在运行中会出现(29)错误。int i=0;while(i<10);

{i=i+1;}

A.语法

B.类型不匹配 C.变量定义 D.动态语义

正确答案:D

解析:对于上面的程序段,大致一看,可能发现不了错误。所以,这类错误也是大家编程时需要注意的,错误仅仅是while语句后面多了一个分号“;”,然而这种错误是编译程序无法发现的,因为这个程序段并没有语法错误,它是一个可执行的程序段。只是程序中出现了死循环,无法停止,这种错误属于语义错误。正确的写法应是: int i=0; while(i<10) {i=i+1;) 所以正确答案为:D。 知识模块:程序语言与语言处理程序

30. 在图2-5所示的有限自动机中,0是初始状态,3是终止状态,该自动机可以识别(30)。

A.aabb B.aaab C.abab D.bbab

正确答案:A 解析:本题主要考查有限自动机。有限自动机可分为确定的有限自动机和不确定的有限自动机。其中不确定有限状态自动机与确定有限状态自动机的最大区别是它们的转移函数不同,确定有限状态自动机对每一个可能的输入只有一个状态的转移,不确定有限状态自动机对每一个可能的输入可以有多个状态转移,接受到输入时从这多个状态转移中非确定地选择一个。 在题目中,0是初始状态,3是终止状态,通过选项中的字符串可以从初始状态到达终止状态,则说明该字符串能被题目中的自动机识别。也可以理解为依次输入选项中的字符串,可以在该自动机中找到相应的路径。 对于选项A的字符串aabb,通过a可以达到状态2,然后通过a可以达到状态1,又经过b到底状态2,最后经过b达到终止状态,这时字符串输入完成,状态停留在终态,因此A可被该自动机识别。同样的道理,我们可以其他选项都不能被该自动机识别。 知识模块:程序语言与语言处理程序

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务