程序设计语言基础(答案)

●已知文法G[S]:S→A0|Bl,A→S1|1,B→S0|0;该文法属于乔姆斯基定义的 __(12)__文法,它不能产生串__(13)__。

(12) A. 0 型B. 1 型C. 2 型D. 3 型

(13) A. 0011 B. 1010 C. 1001 D. 0101

●语言L={ambn|m≥0,n≥1}的正规表达式是__(14)__。

(14) A. a*bb* B. aa*bb* C. aa*b* D. a*b*

●一个文法G=(N,T,P,S),其中N 是非终结符号的集合,T 是终结符号的集合, P 是产生式集合,S 是开始符号,令集合V=N∪T,那么G 所描述的语言是__(15)__ 的集合。

(15) A.由S 推导出的所有符号串B.由S 推导出的所有终结符号串

C.V 中所有符号组成的符号串D.V 的闭包中的所有符号串

● 下图为一确定有限自动机的状态转换图,与该自动机等价的正规表达式是__

(12)__,图中的__(13)__是可以合并的状态。

(12)A.(a|b)*bb(a*b*)* B.(a|b)*bba*|b*

C.(a*b*)bb(a|b)* D.(a*|b*)*bb(a*|b*)

(13)A.0 和1 B.2 和3 C.1 和2 D.0 和

3

正确答案:A

解析:在状态转换图中,每一个结点代表一个状态,其中双圈是终结状态。该题实际上是一个简化确定有限自动机(DFA)的过程,一个确定有限自动机可以通过消除多余状态和合并等价状态而转换成一个最小的与之等价的有限自动机。

首先介绍2个概念:最小状态DFA和等价状态。

最小状态DFA必须满足以下2个条件。

(1)没有多余状态(死状态):多余状态从该自动机的开始状态出发,任何输入串都不能到达的那个状态。

(2)没有2个状态是互相等价(不可区别)。

2个状态s和t如果同时满足下列2个条件,就称s和t是等价的。

(1)一致性:同是终态或同是非终态。

(2)蔓延性:从s出发读人某个a和从t出发读入某个a到达的状态等价。

本题的简化过程如下:

首先,将图中状态分为终态和非终态2个子集即({0,1},{2,3}),再进行子集划分,观察第一个子集{0,1},输入b后,状态0转换为状态1,而状态1转换为状态2。因此{1}和{2}中的状态是可区别的。

由于状态2,3输入字符a得到相同的结果3,输入字符b得到相同结果2,所以子集

{2,3}是不可区别的。从而得到新的划分:({0},{1},{2,3}),因此,(2)空的正确答案为B。 重复子集划分步骤,发现新的状态无法再次划分。

所以,本题中2,3状态可以消除3状态,得到新的状态转换图如图3-2所示。

由图3-2可知终态2可以转换为正规表达式(a|b)*,同时必须输入连续2个b字符,才能完成0状态到终态2的转换,所以结果正规表达式必为形如“...bb(a|b)*”的字符串。又因为0和1之间由b和a轮回输入,可以表示为(ba)*,同时,状态0上输入a又回到自身,可以表示为a*。因此,(1)空的正确答案应该为(a*b*)*bb(a|b)*,根据正规式之间的代数性质,(a*b*)*bb(a|b)*与(a|b)*bb(a*b*)*等价。

● 编译的优化工作对于下面程序段构造的控制流程图有__(15)__个基本块。 A:=0

j:=100 i:=1loop1: B:=j+1

C:=B+I

A:=A+C

if i=100 goto loop2

i:=i+1 Goto loop1

loop2: write A

halt

(15)A.1 B.2 C.3 D. 4

正确答案:D

解析:基本块划分的3个步骤:

(1)满足下列3个条件之一的任一语句可充当入口。

①程序的第一个语句;

②能由条件转移语句或无条件转移语句转移到的语句;

③紧跟在条件转移语句后面的语句。

(2)根据(1)求出的每一入口语句,构造其所属的基本块。

①由该人口语句到另一入口语句(不包括该入口语句)之间的语句序列;

②由该人口语句到一转移语句(包括该转移语句)之间的语句序列;

③由该人口语句到一停转移语句(包括该转移语句)之间的语句序列。

(3)凡是未被纳入某一基本块中的语句,都是程序中控制流程无法到达的语句,从而也是不会被执行到的语句,可以从程序中删除。

在本题中,根据程序求解。

(1)确定入口。

A:=100 入口

j:=100

i:=1

loop1: B:=j+1 入口

C:=B+I

A:=A+C if i=100 goto loop2

i:=i+1 入口 goto 100p1

100p2: write A 入 口

halt 停语句

(2)确定基本块。

基本块1 A:=00 入口

j:=100

i:=1

基本块2 loop1: B:=j+1 入口

C:=B+I

A:=A+C

if i=100 goto 100p2

基本块3 i:=i+1 入口

goto loop1

基本块4 loop2: write A 入口

halt 停语句

(3)确定可删除语句。

没有无法到达的语句。

● 文法G[S]:S→xSx|y 所描述的语言是__(16)__ (n≥0)。

(16)A.(xyx) B.xyx C.xyx D.xyx nnnnn

正确答案:D

解析:正规文法到正规式的转换规则如下:

在本题中,推导过程如下:

S->xSx->xyx->x2Sx2->x2yx2->

x3Sx3->x3yx3->...->xnSxn->xnyxn

得出生成式的规律是:两个x串中间只有一个y,同时两边的x串等长。

●某一非确定性有限自动机(NFA)的状态转换图如下图所示,与该NFA 等价的正规式是_(28)_,与该NFA 等价的DFA 是_(29)_。A

(28) A.0*|(0|1)0 B.(0|10)* C.0*((011)0)* D.

0*(10)*

正确答案:B

解析:根据分析题目中给出的状态转换图可知,该NFA可识别空串以及任意数目0组成的串,但若出现1,则其后至少要有1个0才能到达终态,因此,该自动机识别的串等价于正规式(0|10)*。

●某一确定性有限自动机(DFA)的状态转换图如下图所示,令d=0|1|2|„|9,

以下字符串中,不能被该DFA 接受的是____(28)____,与该DFA 等价的正规式是_(29)___。(其中,ε表示空字符)

① 3857 ② 1.2E+5 ③ -123 . ④

.576E10

(28)A. ①②③ B.①②④ C.②③④ D.①②③④

(29)A.(-d|d)d*E(-d|d)d*|(-d|d)*.d*(ε|E(-d|d)d*)

B.(-d|d)dd*(.|ε)d*|(ε|E(-d|d)d*)

C.(-|d)dd*E(-|d)d*|(-d|d)dd*.d*(ε|E(-|d)d*)

D.(-d|d)dd*E(-d|d)d*|(-d|d|)dd*.d*(ε|E(-dd*|dd*))

正确答案:B

解析:有限自动机也称为有穷状态自动机,是一种数学机器模型,基本形式有非确定有限自动机(NFA)和确定的有限自动机(DFA),并且每一个NFA都有与其等价的DPA。有穷状态自动机的物理模型如下图所示。 [*]

一个DFA可以用状态转换图直观的方式。状态转换图是一种有向图。DFA中的每个状态对应转换图中的一个节点,从外部引入弧的节点表示开始节点,双圈节点表示终态;DFA中的每个状态转换对应图中的一条有向弧,若转换关系为/(A,a)=Q,则该有向弧从节点A出发,进入节点Q,字符a是弧上的标记。有穷状态自动机识别字符串的过程为:初始时,机器处于起始状态(题图中节点。表示初始状态)。读取一个输入符号,并进行相应的状态转移,直到输入串结束或找不到相应的状态转移时为止。根据题目终给定的自动机,识别3857、1.2E+5、-123.、.576E10的过程分别如下。 [*]

分析题中给定的有穷状态自动机,可知该自动机识别以下形式的数值:带小数部分的十进制表示形式和以尾数、指数表示的数值形式。其中,从初态0到达终态5所识别的是带小数点的以十进制数值表示形式的字符串,小数点后可以没有数字,也可以有若干个数字,而小数点之前的整数部分可以不带符号,也可以带负号,其正规式为“(-d|d)d*.d*。当数值的表示含有指数部分时,指数部分是不带符号(表示正数)或带负号的整数形式,因此该部分的正规

式为“E(-d|d)d*”。

●对于以下编号为①、②、③的正规式,正确的说法是___(30)___。

① (aa*|ab) *b ② (a|b) *b ③ ((a|b) *|aa) *b(30)

A.正规式①、②等价B.正规式①、③等价

C.正规式②、③等价D.正规式①、②、③互不等价

正确答案:C

解析:由于正规式①产生的字符串为a*b或ab*b,②产生的字符串为a*b或b*b,③产生的字符串为a*b或b*b,故②③等价。

● 开发专家系统时,通过描述事实和规则由模式匹配得出结论,这种情况下适用的开发语言是(19)。

(19)A.面向对象语言B.函数式语言C.过程式语言D.逻辑式语言

正确答案:D

本题考查程序语言基本知识。函数式程序设计的数据结构本质上是表,而函数又可以作为值出现在表中,因此函数式程序的控制结构取决于函数,以及函数的定义和调用。函数式语言主要用于符号数据处理,如微分和积分演算、数理逻辑、游戏推演以及人工智能等其他领域。用逻辑式程序设计语言编写程序不需要描述具体的解题过程,只需要给出一些必要的事实和规则。这些规则是解决问题的方法的规范说明,根据这些事实和规则,计算机利用谓词逻辑,通过演绎推理得到求解问题的执行序列。这种语言主要用在人工智能领域,也应用在自然语言处理、数据库查询、算法描述等方面,尤其适合于作为专家系统的开发工具

● 高级程序设计语言中用于描述程序中的运算步骤、控制结构及数据传输的是

(20) 。

(20)A.语句B.语义C.语用D.语法

正确答案:A

解析:本题考查程序语言的基本成分。程序设计语言的语法是语言的外观。给出语言的语法意味着给出语句、声明和其他语言结构的书写规则。语义则表示不同的语法结构的含义。在程序语言的手册中,语言的描述都是围绕着语法结构展开的。通常,先给出各种语句结构的语法,然后给出对应该结构的语义以描述内在含义。语用是关于程序与使用者之间的关系。在高级程序设计语言中,语句用于描述程序中的运算步骤、控制结构及数据传输。 ● 对于下面的文法G[S], (44) 是其句子(从S 出发开始推导)。 G[S]:S→M|(S,M) M→P|MP P→a|b|c|„|x|x|z

(44)A.((a,F)) B.((fac,bb),g) C.(abc) D.(c,(da))

选B. S=>(S,M)=>((S,M),M)=>((M,M),M)=>((MP,M),M)=>((MPP,M),M)=>((PPP,M),M)=>((fPP,M),M)=>((faP,M),M)

=>((fac,M),M)=>((fac,MP),M)=>((fac,PP),M)=>((fac,bb),M)=>((fac,bb),g).

● 与逆波兰式ab+ -c*d-对应的中缀表达式是(45) 。

(45)A.a-b-c*d B.-(a+b)*c-d C.-a+b*c-d D.(a+b)*(-c-d)

● 下面的C 程序代码段在运行中会出现(46) 错误。

int i=0;

while(i

{i=i+l;}

(46)A.语法B.类型不匹配C.变量定义D.动态语义

● “通过指明一系列可执行的运算及运算的次序来描述计算过程”是(19)语言的特点。

(19)A.逻辑式B.函数式C.交互式D.命令式(或过程式)

正确答案:D

解析:过程式(或命令式)语言是基于动作的语言,在这种语言中,计算被看成是动作的序列。因此,通过指明一列可执行的运算及运算的次序来描述计算过程是命令式语言的特点。逻辑式语言是一类以形式逻辑为基础的语言。函数式语言以γ-演算为基础。

● “X=(A+B)× (C - D/E)”的后缀式表示为(20)。

(20)A.XAB+CDE/-×= B.XAB-C-DE/×=

C.XAB+CDE-/×= D.XAB-CD-E/×=

● 下图是一有限自动机的状态转换图,该自动机所识别语言的特点是(45),等价的正规式为(46)。

(45)A.由符号a、b 构成且包含偶数个a 的串

B.由符号a、b 构成且开头和结尾符号都为a 的串

C.由符号a、b 构成的任意串

D.由符号a、b 构成且b 的前后必须为a 的串

(46)A.(a∣b)*(aa)* B.a(a∣b)*a C.(a∣b)* D.a(ba)*a

正确答案:B

解析:本题考查有限自动机的基本运算。在有限自动机的状态转换图中,每一个结点代表一个状态,其中双圈是终态结点。对于字符串ω,若存在一条从初态结点到某一终止状态结点的路径,且这条路径上所有弧的标记符连接成的字符串等于ω,则称①可由DFA M识别(接收或读出)。若一个 DFA M的初态结点同时又是终态结点,则空字ε可由该DFA识别(或接收)。DFA M所能识别的语言L(M)={ω|ω①是从M的初态到终态的路径上的弧上标记所形成的串}。分析题中给出的自动机:从初态0出发,识别一个符号a后进入状态1,在状态1可识别出任意个a或(和)任意个b,再识别出一个a而到达终态2。显然,该自动机识别的语言特点是“由a开头由a结尾,期间的a、b任意排列”。用正规式表示为“a(a|b)*a”。 ● 表达式“(a+b)* (c-d)”的后缀表示为(48)。

(48)A. ab+cd-* B. abcd+-* C. ab+*cd- D. abcd*+-

● 函数t()、f()的定义如下所示,若调用函数t 时传递给x 的值为3,并且调用函数f()时,第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,则函数t 的返回值为(49) 。

(49)A. 35 B. 24 C. 22 D. 11

● 程序设计语言中(50) 。

(50)A. while 循环语句的执行效率比do-while 循环语句的执行效率高

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

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

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

● 给定C 语言的数据结构

struct T {

int w;

union T { char c; int i; double d; } U;

};

假设char 类型变量的存储区大小是1 字节,int 类型变量的存储区大小是4 字节,double 类型变量的存储区大小是8 字节,则在不考虑字对齐方式的情况下,为存储一个struct T 类型变量所需要的存储区域至少应为(15) 字节。

(15)A. 4 B. 8 C. 12 D. 17

正确答案:C

解析:在不考虑字对齐规则的情况下,C语言中一个结构体变量的存储区大小就是其所有成员所需存储区大小之和,一个联合体变量的存储区大小就是其各成员所需存储区大小中的最大者。因此题目中给定的联合体union T变量需要的存储区大小就是存储一个 double类型变量的大小(即8字节),struct T类型变量的存储区最小应为int 类型成员w存储区大小(4字节)与union T类型成员U的存储区大小之和,即12字节。

● 在过程式程序设计(①)、数据抽象程序设计(②)、面向对象程序设计(③)、泛型(通用)程序设计(④)中,C++ 语言支持(16) ,C 语言支持(17) 。

(16)A. ① B. ②③ C. ③④ D. ①②③④

(17)A. ① B. ①③ C. ②③ D. ①②③④

● C 语言是一种(18) 语言。

(18)A. 编译型B. 解释型C. 编译、解释混合型D. 脚本

正确答案:A

编译型语言指用该语言编写的程序在执行前,需要由相应的编译器将源程序翻译为目标代码

程序,然后在目标机器上运行目标代码程序。解释型语言指用该语言编写的程序无需编译为目标代码,即可执行。对于解释型语言,都有相应的解释器,负责检查源程序的语法,进行语义分析,通常采用边翻译边执行的方式。对于C语言而言,一个C源程序必须由编译器将其翻译为目标代码,才能在目标机上运行,因此,它是编译型语言。

● 若程序运行时系统报告除数为0,这属于(20)错误。

(20)A. 语法B. 语用C. 语义D. 语境

● 集合L ={amb m m ≥ 0} (21)。

(21)A.可用正规式“a *b *”表示

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

C.可用正规式“a mb m ”表示

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

● 表达式“X = A + B × (C − D )/ E”的后缀表示形式可以为(22) (运算符优先级相同时,遵循左结合的原则)。

(22)A. XAB + CDE/−×= B. XA+BC−DE/×=

C. XABCD−×E/+= D. XABCDE+×−/=

● 在软件开发中, (29) 不能用来描述项目开发的进度安排。在其他三种图中,可用(30) 动态地反映项目开发进展情况。

(29)A. 甘特图B. PERT 图C. PERT/CPM 图D. 鱼骨图

(30)A. 甘特图B. PERT 图C. PERT/CPM 图D. 鱼骨图

● 选择软件开发工具时,应考虑功能、(31) 、稳健性、硬件要求和性能、服务和支持。

(31)A. 易用性B. 易维护性C. 可移植性D. 可扩充性

● 内聚性和耦合性是度量软件模块独立性的重要准则,软件设计时应力求(32) 。

(32)A. 高内聚,高耦合B. 高内聚,低耦合

C. 低内聚,高耦合D. 低内聚,低耦合

● 对于如下的程序流程,当采用语句覆盖法设计测试案例时,至少需要设计(34)个测试案例。

(34)A. 1 B. 2 C. 3 D. 4

解析:语句覆盖是一种设计测试案例的方法,它要求对于设计的测试案例,必须使得程序的每一条可执行语句至少执行一次。对于图7-5所示的程序流程图可设计如下测试案例。 案例1:X=1,Y=2

此时执行语句序列为:X>0→Y=Y-X→Y>0→X=1。

案例2:X=-3,Y=2

此时执行语句序列为:X>0→Y=Y+X→Y>0→X=-1。

可见,只需设计两个测试案例即可使得程序的每条可执行语句至少执行一次。 ● 正则表达式1*(0|01)*表示的集合元素的特点是(48) 。

(48)A. 长度为奇数的0、1 串B. 开始和结尾字符必须为1 的0、1 串

C. 串的长度为偶数的0、1 串D. 不包含子串011 的0、1 串 分析:1* 1*0* & 1* * * (0|01) (01) 可得知得不出长度的奇偶性,也不能判断开始和结尾的字符,通过排除法可得到,不包含字串011的0、1串有可能

● 设某程序中定义了全局整型变量x 和r,且函数f()的定义如下所示,则在语句“x = r*r +1 ;”中(49) 。

int f(int r)

{ int x;

x = r*r +1 ;

return x;

}

(49)A. x 和r 均是全局变量B. x 是全局变量、r 是形式参数

C. x 是局部变量、r 是形式参数D. x 是局部变量、r 是全局变量

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

(50)A. 从S 出发推导出的包含V 中所有符号的串

B. 从S 出发推导出的仅包含T 中符号的串

C. N 中所有符号组成的串D. T 中所有符号组成的串

正确答案:B

解析:本题考查程序语言的基础知识。一个文法定义的语言是终结符号串的集合,这些终结符号串应能从文法的起始符号出发推导出来。

● 在软件设计和编码过程中,采取(7) 的做法将使软件更加容易理解和维护。

(7)A. 良好的程序结构,有无文档均可B. 使用标准或规定之外的语句

C. 编写详细正确的文档,采用良好的程序结构

D. 尽量减少程序中的注释

● 软件文档按照其产生和使用的范围可分为开发文档、管理文档和用户文档。其中开发文档不包括(8) 。

(8)A. 软件需求说明B. 可行性研究报告C. 维护修改建议D. 项目开发计划 正确答案:C

解析:本题考查软件文档的分类和作用。软件文档在软件开发过程和运行维护中起着重要作用,比如文件可以提高软件开发过程的能见度,提高开发效率,便于协调软件的开发、使用和维护,另外也可对软件的运维和培训提供相关信息,便于各类相关人员之间进行交流。按照文档产生和使用范围,软件文件可分为开发文档、管理文档和用户文档,其中开发文档产生于软件开发过程,是前一阶段的工作成果体现,也是后一阶段工作的依据,用户文档是为用户准备的软件使用、操作、维护的资料。

● 软件维护成本在软件成本中占较大比重。为降低维护的难度,可采取的措施有(9) 。

(9)A. 设计并实现没有错误的软件B. 限制可修改的范围

C. 增加维护人员数量

D. 在开发过程中就采取有利于维护的措施,并加强维护管理

● 关于汇编语言,以下叙述中正确的是(20) 。

(20)A. 汇编语言源程序可以直接在计算机上运行

B. 将汇编语言源程序转换成目标程序的软件称为解释程序

C. 在汇编语言程序中,不能定义符号常量

D. 将汇编语言源程序翻译成机器语言程序的软件称为汇编程序

● 对高级语言源程序进行编译时,可发现源程序中的(21) 错误。

(21)A. 堆栈溢出B. 变量未定义C. 指针异常D. 数组元素下标越界

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

(22)A. 词法分析和语法分析B. 语义分析和中间代码生成

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

● 下列叙述中错误的是(23) 。

(23)A. 面向对象程序设计语言可支持过程化的程序设计

B. 给定算法的时间复杂性与实现该算法所采用的程序设计语言无关

C. 与汇编语言相比,采用脚本语言编程可获得更高的运行效率

D. 面向对象程序设计语言不支持对一个对象的成员变量进行直接访问

● 编译程序对高级语言源程序进行翻译时,需要在该程序的地址空间中为变量指定地址,这种地址称为(20)。

(20)A.逻辑地址B. 物理地址C. 接口地址D. 线性地址

● 程序设计语言一般都提供多种循环语句,例如实现先判断循环条件再执行循环体的while 语句和先执行循环体再判断循环条件的do-while 语句。关于这两种循环语句,在不改变循环体的条件下, ( 21 )是正确的。

(21)A. while 语句的功能可由do-while 语句实现

B. do-while 语句的功能可由while 语句实现

C. 若已知循环体的次数,则只能使用while 语句

D. 循环条件相同时,do-while 语句的执行效率更高

● 表达式(a-b)*(c+5)的后缀式是(22) 。

(22)A. a b c 5 + * - B. a b – c + 5 *

C. a b c - * 5 + D. a b- c 5 + *

● 给定文法G[S]及其非终结符A,FIRST(A)定义为:从A 出发能推导出的终结符号的集合(S 是文法的起始符号,为非终结符)。对于文法G[S]:

S→[L] | a

L→L, S| S

其中,G[S]包含的四个终结符号分别为:a , [ ]则FIRST(S)的成员包括(48) 。

(48)A. a B. a、[ C. a、[和] D. a、[、]和,

正确答案:B

解析:本题考查程序语言基础知识。

程序语言的语法可由上下文无关文法表示,合法的程序可看作是由该文法推导得到。 对于文法G[S],从S出发推导出[a,a]和a的过程可表示为:

S=>[L]=>[L,S]=>[S,S]=>[a,S]=>[a,a]

S=>a

从S出发可推导出以a或[开始的符号串,因此FIRST(S)的成员包括a、[。

● 高级语言源程序的编译过程分若干个阶段,分配寄存器属于(49) 阶段的工作。

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

● 设某上下文无关文法如下: S→11 | 1001 | S0 |SS,则该文法所产生的所有二进制字符串都具有的特点是(50) 。

(50)A. 能被3 整除B. 0、1 出现的次数相等

C. 0 和1 的出现次数都为偶数D. 能被2 整除

● 函数调用时,基本的参数传递方式有传值与传地址两种, (20) 。

(20)A. 在传值方式下,形参将值传给实参

B. 在传值方式下,实参不能是数组元素

C. 在传地址方式下,形参和实参间可以实现数据的双向传递

D. 在传地址方式下,实参可以是任意的变量和表达式

● 已知某高级语言源程序A 经编译后得到机器C 上的目标程序B,则(21) 。

(21)A. 对B 进行反编译,不能还原出源程序A

B. 对B 进行反汇编,不能得到与源程序A 等价的汇编程序代码

C. 对B 进行反编译,得到的是源程序A 的变量声明和算法流程

D. 对A 和B 进行交叉编译,可以产生在机器C 上运行的动态链接库

正确答案:A

解析:本题考查程序语言方面的基础知识。编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高

级语言源代码,只能转换成功能上等价的汇编程序。

● 下面关于程序语言的叙述,错误的是(22) 。

(22)A. 脚本语言属于动态语言,其程序结构可以在运行中改变

B. 脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序

C. php、JavaScript 属于静态语言,其所有成分可在编译时确定

D. C 语言属于静态语言,其所有成分可在编译时确定

● 下图所示有限自动机的特点是(48) 。

(48)A. 识别的0、1 串是以0 开头且以1 结尾

B. 识别的0、1 串中1 的数目为偶数

C. 识别的0、1 串中0 后面必须是1 D. 识别的0、1 串中1 不能连续出现 ● 由a、b 构造且仅包含偶数个a 的串的集合用正规式表示为(49) 。

(49)A. (a*a)*b* B. (b* (ab*a)*)* C. (a* (ba*)*b)* D. (a|b)* (aa)* 正确答案:B

解析:在正规式中,符号*表示重复若干次(包括O次),因此正规式“(a*a)*b*”中的表达式“(a+a)*”不能保证有偶数个a。同理,“(a*(ba*)*b)*”和“(a I b)*(aa)*”中对a的个数也没有限制,而在“(ab * a)*”中可以确保a的出现为偶数个。

● 设某语言的语法规则用上下文无关文法G=(N,T,P,S)表示,其中N 是非终结符号的集合,T 是终结符号的集合,P 是产生式集合,S 是开始符号,令V=N∪T,那么符合该语言的句子是(50) 。

(50)A. 从S 出发推导的、仅包含T 中符号的符号串

B. 从N 中符号出发推导的、仅包含T 中符号的符号串

C. 从S 出发推导的、包含V 中符号的符号串

D. 从N 中符号出发推导的、包含V 中符号的符号串

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

(20)A. 便于为数据合理分配存储单元

B. 便于对参与表达式计算的数据对象进行检查

C. 便于定义动态数据结构D. 便于规定数据对象的取值范围及能够进行的运算 正确答案:D

解析:变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可以指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪类数据。

● 以下关于C/C++语言指针变量的叙述中,正确的是(21) 。

(21)A. 指针变量可以是全局变量也可以是局部变量

B. 必须为指针变量与指针所指向的变量分配相同大小的存储空间

C. 对指针变量进行算术运算是没有意义的

D. 指针变量必须由动态产生的数据对象来赋值

● 将高级语言源程序翻译为机器语言程序的过程中常引入中间代码。以下关于中间代码的叙述中,错误的是(22) 。

(22)A. 不同的高级程序语言可以产生同一种中间代码

B. 使用中间代码有利于进行与机器无关的优化处理

C. 使用中间代码有利于提高编译程序的可移植性

D. 中间代码与机器语言代码在指令结构上必须一致

正确答案:D

试题(22分析

本题考查程序语言基础知识。

“中间代码”是一种简单且含义明确的记号系统,与具体的机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码。由于与具体机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性。

● 以下关于编译系统对某高级语言进行翻译的叙述中,错误的是(48) 。

(48)A. 词法分析将把源程序看作一个线性字符序列进行分析

B. 语法分析阶段可以发现程序中所有的语法错误

C. 语义分析阶段可以发现程序中所有的语义错误

D. 目标代码生成阶段的工作与目标机器的体系结构相关

● 若一个程序语言可以提供链表的定义和运算,则其运行时的( 49) 。

(49)A. 数据空间适合采用静态存储分配策略

B. 数据空间必须采用堆存储分配策略

C. 指令空间需要采用栈结构D. 指令代码必须放入堆区

正确答案:B

试题(49分析

本题考查程序语言基础知识。

链表中的结点空间需要程序员根据需要申请和释放,因此,数据空间应采用堆存储分配策略。

● 由某上下文无关文法M[S]推导出某句子的分析树如下图所示,则错误的叙述是( 50) 。

(50)A. 该文法推导出的句子必须以“a”开头

B. acabcbdcc 是该文法推导出的一个句子

C. “S->aAcB”是该文法的一个产生式

D. a、b、c、d 属于该文法的终结符号集

正确答案:A

解析:程序语言的语法可用上下文无关文法表示,合法的程序可看作是由该文法推导得到的。

●已知文法G[S]:S→A0|Bl,A→S1|1,B→S0|0;该文法属于乔姆斯基定义的 __(12)__文法,它不能产生串__(13)__。

(12) A. 0 型B. 1 型C. 2 型D. 3 型

(13) A. 0011 B. 1010 C. 1001 D. 0101

●语言L={ambn|m≥0,n≥1}的正规表达式是__(14)__。

(14) A. a*bb* B. aa*bb* C. aa*b* D. a*b*

●一个文法G=(N,T,P,S),其中N 是非终结符号的集合,T 是终结符号的集合, P 是产生式集合,S 是开始符号,令集合V=N∪T,那么G 所描述的语言是__(15)__ 的集合。

(15) A.由S 推导出的所有符号串B.由S 推导出的所有终结符号串

C.V 中所有符号组成的符号串D.V 的闭包中的所有符号串

● 下图为一确定有限自动机的状态转换图,与该自动机等价的正规表达式是__

(12)__,图中的__(13)__是可以合并的状态。

(12)A.(a|b)*bb(a*b*)* B.(a|b)*bba*|b*

C.(a*b*)bb(a|b)* D.(a*|b*)*bb(a*|b*)

(13)A.0 和1 B.2 和3 C.1 和2 D.0 和

3

正确答案:A

解析:在状态转换图中,每一个结点代表一个状态,其中双圈是终结状态。该题实际上是一个简化确定有限自动机(DFA)的过程,一个确定有限自动机可以通过消除多余状态和合并等价状态而转换成一个最小的与之等价的有限自动机。

首先介绍2个概念:最小状态DFA和等价状态。

最小状态DFA必须满足以下2个条件。

(1)没有多余状态(死状态):多余状态从该自动机的开始状态出发,任何输入串都不能到达的那个状态。

(2)没有2个状态是互相等价(不可区别)。

2个状态s和t如果同时满足下列2个条件,就称s和t是等价的。

(1)一致性:同是终态或同是非终态。

(2)蔓延性:从s出发读人某个a和从t出发读入某个a到达的状态等价。

本题的简化过程如下:

首先,将图中状态分为终态和非终态2个子集即({0,1},{2,3}),再进行子集划分,观察第一个子集{0,1},输入b后,状态0转换为状态1,而状态1转换为状态2。因此{1}和{2}中的状态是可区别的。

由于状态2,3输入字符a得到相同的结果3,输入字符b得到相同结果2,所以子集

{2,3}是不可区别的。从而得到新的划分:({0},{1},{2,3}),因此,(2)空的正确答案为B。 重复子集划分步骤,发现新的状态无法再次划分。

所以,本题中2,3状态可以消除3状态,得到新的状态转换图如图3-2所示。

由图3-2可知终态2可以转换为正规表达式(a|b)*,同时必须输入连续2个b字符,才能完成0状态到终态2的转换,所以结果正规表达式必为形如“...bb(a|b)*”的字符串。又因为0和1之间由b和a轮回输入,可以表示为(ba)*,同时,状态0上输入a又回到自身,可以表示为a*。因此,(1)空的正确答案应该为(a*b*)*bb(a|b)*,根据正规式之间的代数性质,(a*b*)*bb(a|b)*与(a|b)*bb(a*b*)*等价。

● 编译的优化工作对于下面程序段构造的控制流程图有__(15)__个基本块。 A:=0

j:=100 i:=1loop1: B:=j+1

C:=B+I

A:=A+C

if i=100 goto loop2

i:=i+1 Goto loop1

loop2: write A

halt

(15)A.1 B.2 C.3 D. 4

正确答案:D

解析:基本块划分的3个步骤:

(1)满足下列3个条件之一的任一语句可充当入口。

①程序的第一个语句;

②能由条件转移语句或无条件转移语句转移到的语句;

③紧跟在条件转移语句后面的语句。

(2)根据(1)求出的每一入口语句,构造其所属的基本块。

①由该人口语句到另一入口语句(不包括该入口语句)之间的语句序列;

②由该人口语句到一转移语句(包括该转移语句)之间的语句序列;

③由该人口语句到一停转移语句(包括该转移语句)之间的语句序列。

(3)凡是未被纳入某一基本块中的语句,都是程序中控制流程无法到达的语句,从而也是不会被执行到的语句,可以从程序中删除。

在本题中,根据程序求解。

(1)确定入口。

A:=100 入口

j:=100

i:=1

loop1: B:=j+1 入口

C:=B+I

A:=A+C if i=100 goto loop2

i:=i+1 入口 goto 100p1

100p2: write A 入 口

halt 停语句

(2)确定基本块。

基本块1 A:=00 入口

j:=100

i:=1

基本块2 loop1: B:=j+1 入口

C:=B+I

A:=A+C

if i=100 goto 100p2

基本块3 i:=i+1 入口

goto loop1

基本块4 loop2: write A 入口

halt 停语句

(3)确定可删除语句。

没有无法到达的语句。

● 文法G[S]:S→xSx|y 所描述的语言是__(16)__ (n≥0)。

(16)A.(xyx) B.xyx C.xyx D.xyx nnnnn

正确答案:D

解析:正规文法到正规式的转换规则如下:

在本题中,推导过程如下:

S->xSx->xyx->x2Sx2->x2yx2->

x3Sx3->x3yx3->...->xnSxn->xnyxn

得出生成式的规律是:两个x串中间只有一个y,同时两边的x串等长。

●某一非确定性有限自动机(NFA)的状态转换图如下图所示,与该NFA 等价的正规式是_(28)_,与该NFA 等价的DFA 是_(29)_。A

(28) A.0*|(0|1)0 B.(0|10)* C.0*((011)0)* D.

0*(10)*

正确答案:B

解析:根据分析题目中给出的状态转换图可知,该NFA可识别空串以及任意数目0组成的串,但若出现1,则其后至少要有1个0才能到达终态,因此,该自动机识别的串等价于正规式(0|10)*。

●某一确定性有限自动机(DFA)的状态转换图如下图所示,令d=0|1|2|„|9,

以下字符串中,不能被该DFA 接受的是____(28)____,与该DFA 等价的正规式是_(29)___。(其中,ε表示空字符)

① 3857 ② 1.2E+5 ③ -123 . ④

.576E10

(28)A. ①②③ B.①②④ C.②③④ D.①②③④

(29)A.(-d|d)d*E(-d|d)d*|(-d|d)*.d*(ε|E(-d|d)d*)

B.(-d|d)dd*(.|ε)d*|(ε|E(-d|d)d*)

C.(-|d)dd*E(-|d)d*|(-d|d)dd*.d*(ε|E(-|d)d*)

D.(-d|d)dd*E(-d|d)d*|(-d|d|)dd*.d*(ε|E(-dd*|dd*))

正确答案:B

解析:有限自动机也称为有穷状态自动机,是一种数学机器模型,基本形式有非确定有限自动机(NFA)和确定的有限自动机(DFA),并且每一个NFA都有与其等价的DPA。有穷状态自动机的物理模型如下图所示。 [*]

一个DFA可以用状态转换图直观的方式。状态转换图是一种有向图。DFA中的每个状态对应转换图中的一个节点,从外部引入弧的节点表示开始节点,双圈节点表示终态;DFA中的每个状态转换对应图中的一条有向弧,若转换关系为/(A,a)=Q,则该有向弧从节点A出发,进入节点Q,字符a是弧上的标记。有穷状态自动机识别字符串的过程为:初始时,机器处于起始状态(题图中节点。表示初始状态)。读取一个输入符号,并进行相应的状态转移,直到输入串结束或找不到相应的状态转移时为止。根据题目终给定的自动机,识别3857、1.2E+5、-123.、.576E10的过程分别如下。 [*]

分析题中给定的有穷状态自动机,可知该自动机识别以下形式的数值:带小数部分的十进制表示形式和以尾数、指数表示的数值形式。其中,从初态0到达终态5所识别的是带小数点的以十进制数值表示形式的字符串,小数点后可以没有数字,也可以有若干个数字,而小数点之前的整数部分可以不带符号,也可以带负号,其正规式为“(-d|d)d*.d*。当数值的表示含有指数部分时,指数部分是不带符号(表示正数)或带负号的整数形式,因此该部分的正规

式为“E(-d|d)d*”。

●对于以下编号为①、②、③的正规式,正确的说法是___(30)___。

① (aa*|ab) *b ② (a|b) *b ③ ((a|b) *|aa) *b(30)

A.正规式①、②等价B.正规式①、③等价

C.正规式②、③等价D.正规式①、②、③互不等价

正确答案:C

解析:由于正规式①产生的字符串为a*b或ab*b,②产生的字符串为a*b或b*b,③产生的字符串为a*b或b*b,故②③等价。

● 开发专家系统时,通过描述事实和规则由模式匹配得出结论,这种情况下适用的开发语言是(19)。

(19)A.面向对象语言B.函数式语言C.过程式语言D.逻辑式语言

正确答案:D

本题考查程序语言基本知识。函数式程序设计的数据结构本质上是表,而函数又可以作为值出现在表中,因此函数式程序的控制结构取决于函数,以及函数的定义和调用。函数式语言主要用于符号数据处理,如微分和积分演算、数理逻辑、游戏推演以及人工智能等其他领域。用逻辑式程序设计语言编写程序不需要描述具体的解题过程,只需要给出一些必要的事实和规则。这些规则是解决问题的方法的规范说明,根据这些事实和规则,计算机利用谓词逻辑,通过演绎推理得到求解问题的执行序列。这种语言主要用在人工智能领域,也应用在自然语言处理、数据库查询、算法描述等方面,尤其适合于作为专家系统的开发工具

● 高级程序设计语言中用于描述程序中的运算步骤、控制结构及数据传输的是

(20) 。

(20)A.语句B.语义C.语用D.语法

正确答案:A

解析:本题考查程序语言的基本成分。程序设计语言的语法是语言的外观。给出语言的语法意味着给出语句、声明和其他语言结构的书写规则。语义则表示不同的语法结构的含义。在程序语言的手册中,语言的描述都是围绕着语法结构展开的。通常,先给出各种语句结构的语法,然后给出对应该结构的语义以描述内在含义。语用是关于程序与使用者之间的关系。在高级程序设计语言中,语句用于描述程序中的运算步骤、控制结构及数据传输。 ● 对于下面的文法G[S], (44) 是其句子(从S 出发开始推导)。 G[S]:S→M|(S,M) M→P|MP P→a|b|c|„|x|x|z

(44)A.((a,F)) B.((fac,bb),g) C.(abc) D.(c,(da))

选B. S=>(S,M)=>((S,M),M)=>((M,M),M)=>((MP,M),M)=>((MPP,M),M)=>((PPP,M),M)=>((fPP,M),M)=>((faP,M),M)

=>((fac,M),M)=>((fac,MP),M)=>((fac,PP),M)=>((fac,bb),M)=>((fac,bb),g).

● 与逆波兰式ab+ -c*d-对应的中缀表达式是(45) 。

(45)A.a-b-c*d B.-(a+b)*c-d C.-a+b*c-d D.(a+b)*(-c-d)

● 下面的C 程序代码段在运行中会出现(46) 错误。

int i=0;

while(i

{i=i+l;}

(46)A.语法B.类型不匹配C.变量定义D.动态语义

● “通过指明一系列可执行的运算及运算的次序来描述计算过程”是(19)语言的特点。

(19)A.逻辑式B.函数式C.交互式D.命令式(或过程式)

正确答案:D

解析:过程式(或命令式)语言是基于动作的语言,在这种语言中,计算被看成是动作的序列。因此,通过指明一列可执行的运算及运算的次序来描述计算过程是命令式语言的特点。逻辑式语言是一类以形式逻辑为基础的语言。函数式语言以γ-演算为基础。

● “X=(A+B)× (C - D/E)”的后缀式表示为(20)。

(20)A.XAB+CDE/-×= B.XAB-C-DE/×=

C.XAB+CDE-/×= D.XAB-CD-E/×=

● 下图是一有限自动机的状态转换图,该自动机所识别语言的特点是(45),等价的正规式为(46)。

(45)A.由符号a、b 构成且包含偶数个a 的串

B.由符号a、b 构成且开头和结尾符号都为a 的串

C.由符号a、b 构成的任意串

D.由符号a、b 构成且b 的前后必须为a 的串

(46)A.(a∣b)*(aa)* B.a(a∣b)*a C.(a∣b)* D.a(ba)*a

正确答案:B

解析:本题考查有限自动机的基本运算。在有限自动机的状态转换图中,每一个结点代表一个状态,其中双圈是终态结点。对于字符串ω,若存在一条从初态结点到某一终止状态结点的路径,且这条路径上所有弧的标记符连接成的字符串等于ω,则称①可由DFA M识别(接收或读出)。若一个 DFA M的初态结点同时又是终态结点,则空字ε可由该DFA识别(或接收)。DFA M所能识别的语言L(M)={ω|ω①是从M的初态到终态的路径上的弧上标记所形成的串}。分析题中给出的自动机:从初态0出发,识别一个符号a后进入状态1,在状态1可识别出任意个a或(和)任意个b,再识别出一个a而到达终态2。显然,该自动机识别的语言特点是“由a开头由a结尾,期间的a、b任意排列”。用正规式表示为“a(a|b)*a”。 ● 表达式“(a+b)* (c-d)”的后缀表示为(48)。

(48)A. ab+cd-* B. abcd+-* C. ab+*cd- D. abcd*+-

● 函数t()、f()的定义如下所示,若调用函数t 时传递给x 的值为3,并且调用函数f()时,第一个参数采用传值(call by value)方式,第二个参数采用传引用(call by reference)方式,则函数t 的返回值为(49) 。

(49)A. 35 B. 24 C. 22 D. 11

● 程序设计语言中(50) 。

(50)A. while 循环语句的执行效率比do-while 循环语句的执行效率高

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

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

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

● 给定C 语言的数据结构

struct T {

int w;

union T { char c; int i; double d; } U;

};

假设char 类型变量的存储区大小是1 字节,int 类型变量的存储区大小是4 字节,double 类型变量的存储区大小是8 字节,则在不考虑字对齐方式的情况下,为存储一个struct T 类型变量所需要的存储区域至少应为(15) 字节。

(15)A. 4 B. 8 C. 12 D. 17

正确答案:C

解析:在不考虑字对齐规则的情况下,C语言中一个结构体变量的存储区大小就是其所有成员所需存储区大小之和,一个联合体变量的存储区大小就是其各成员所需存储区大小中的最大者。因此题目中给定的联合体union T变量需要的存储区大小就是存储一个 double类型变量的大小(即8字节),struct T类型变量的存储区最小应为int 类型成员w存储区大小(4字节)与union T类型成员U的存储区大小之和,即12字节。

● 在过程式程序设计(①)、数据抽象程序设计(②)、面向对象程序设计(③)、泛型(通用)程序设计(④)中,C++ 语言支持(16) ,C 语言支持(17) 。

(16)A. ① B. ②③ C. ③④ D. ①②③④

(17)A. ① B. ①③ C. ②③ D. ①②③④

● C 语言是一种(18) 语言。

(18)A. 编译型B. 解释型C. 编译、解释混合型D. 脚本

正确答案:A

编译型语言指用该语言编写的程序在执行前,需要由相应的编译器将源程序翻译为目标代码

程序,然后在目标机器上运行目标代码程序。解释型语言指用该语言编写的程序无需编译为目标代码,即可执行。对于解释型语言,都有相应的解释器,负责检查源程序的语法,进行语义分析,通常采用边翻译边执行的方式。对于C语言而言,一个C源程序必须由编译器将其翻译为目标代码,才能在目标机上运行,因此,它是编译型语言。

● 若程序运行时系统报告除数为0,这属于(20)错误。

(20)A. 语法B. 语用C. 语义D. 语境

● 集合L ={amb m m ≥ 0} (21)。

(21)A.可用正规式“a *b *”表示

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

C.可用正规式“a mb m ”表示

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

● 表达式“X = A + B × (C − D )/ E”的后缀表示形式可以为(22) (运算符优先级相同时,遵循左结合的原则)。

(22)A. XAB + CDE/−×= B. XA+BC−DE/×=

C. XABCD−×E/+= D. XABCDE+×−/=

● 在软件开发中, (29) 不能用来描述项目开发的进度安排。在其他三种图中,可用(30) 动态地反映项目开发进展情况。

(29)A. 甘特图B. PERT 图C. PERT/CPM 图D. 鱼骨图

(30)A. 甘特图B. PERT 图C. PERT/CPM 图D. 鱼骨图

● 选择软件开发工具时,应考虑功能、(31) 、稳健性、硬件要求和性能、服务和支持。

(31)A. 易用性B. 易维护性C. 可移植性D. 可扩充性

● 内聚性和耦合性是度量软件模块独立性的重要准则,软件设计时应力求(32) 。

(32)A. 高内聚,高耦合B. 高内聚,低耦合

C. 低内聚,高耦合D. 低内聚,低耦合

● 对于如下的程序流程,当采用语句覆盖法设计测试案例时,至少需要设计(34)个测试案例。

(34)A. 1 B. 2 C. 3 D. 4

解析:语句覆盖是一种设计测试案例的方法,它要求对于设计的测试案例,必须使得程序的每一条可执行语句至少执行一次。对于图7-5所示的程序流程图可设计如下测试案例。 案例1:X=1,Y=2

此时执行语句序列为:X>0→Y=Y-X→Y>0→X=1。

案例2:X=-3,Y=2

此时执行语句序列为:X>0→Y=Y+X→Y>0→X=-1。

可见,只需设计两个测试案例即可使得程序的每条可执行语句至少执行一次。 ● 正则表达式1*(0|01)*表示的集合元素的特点是(48) 。

(48)A. 长度为奇数的0、1 串B. 开始和结尾字符必须为1 的0、1 串

C. 串的长度为偶数的0、1 串D. 不包含子串011 的0、1 串 分析:1* 1*0* & 1* * * (0|01) (01) 可得知得不出长度的奇偶性,也不能判断开始和结尾的字符,通过排除法可得到,不包含字串011的0、1串有可能

● 设某程序中定义了全局整型变量x 和r,且函数f()的定义如下所示,则在语句“x = r*r +1 ;”中(49) 。

int f(int r)

{ int x;

x = r*r +1 ;

return x;

}

(49)A. x 和r 均是全局变量B. x 是全局变量、r 是形式参数

C. x 是局部变量、r 是形式参数D. x 是局部变量、r 是全局变量

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

(50)A. 从S 出发推导出的包含V 中所有符号的串

B. 从S 出发推导出的仅包含T 中符号的串

C. N 中所有符号组成的串D. T 中所有符号组成的串

正确答案:B

解析:本题考查程序语言的基础知识。一个文法定义的语言是终结符号串的集合,这些终结符号串应能从文法的起始符号出发推导出来。

● 在软件设计和编码过程中,采取(7) 的做法将使软件更加容易理解和维护。

(7)A. 良好的程序结构,有无文档均可B. 使用标准或规定之外的语句

C. 编写详细正确的文档,采用良好的程序结构

D. 尽量减少程序中的注释

● 软件文档按照其产生和使用的范围可分为开发文档、管理文档和用户文档。其中开发文档不包括(8) 。

(8)A. 软件需求说明B. 可行性研究报告C. 维护修改建议D. 项目开发计划 正确答案:C

解析:本题考查软件文档的分类和作用。软件文档在软件开发过程和运行维护中起着重要作用,比如文件可以提高软件开发过程的能见度,提高开发效率,便于协调软件的开发、使用和维护,另外也可对软件的运维和培训提供相关信息,便于各类相关人员之间进行交流。按照文档产生和使用范围,软件文件可分为开发文档、管理文档和用户文档,其中开发文档产生于软件开发过程,是前一阶段的工作成果体现,也是后一阶段工作的依据,用户文档是为用户准备的软件使用、操作、维护的资料。

● 软件维护成本在软件成本中占较大比重。为降低维护的难度,可采取的措施有(9) 。

(9)A. 设计并实现没有错误的软件B. 限制可修改的范围

C. 增加维护人员数量

D. 在开发过程中就采取有利于维护的措施,并加强维护管理

● 关于汇编语言,以下叙述中正确的是(20) 。

(20)A. 汇编语言源程序可以直接在计算机上运行

B. 将汇编语言源程序转换成目标程序的软件称为解释程序

C. 在汇编语言程序中,不能定义符号常量

D. 将汇编语言源程序翻译成机器语言程序的软件称为汇编程序

● 对高级语言源程序进行编译时,可发现源程序中的(21) 错误。

(21)A. 堆栈溢出B. 变量未定义C. 指针异常D. 数组元素下标越界

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

(22)A. 词法分析和语法分析B. 语义分析和中间代码生成

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

● 下列叙述中错误的是(23) 。

(23)A. 面向对象程序设计语言可支持过程化的程序设计

B. 给定算法的时间复杂性与实现该算法所采用的程序设计语言无关

C. 与汇编语言相比,采用脚本语言编程可获得更高的运行效率

D. 面向对象程序设计语言不支持对一个对象的成员变量进行直接访问

● 编译程序对高级语言源程序进行翻译时,需要在该程序的地址空间中为变量指定地址,这种地址称为(20)。

(20)A.逻辑地址B. 物理地址C. 接口地址D. 线性地址

● 程序设计语言一般都提供多种循环语句,例如实现先判断循环条件再执行循环体的while 语句和先执行循环体再判断循环条件的do-while 语句。关于这两种循环语句,在不改变循环体的条件下, ( 21 )是正确的。

(21)A. while 语句的功能可由do-while 语句实现

B. do-while 语句的功能可由while 语句实现

C. 若已知循环体的次数,则只能使用while 语句

D. 循环条件相同时,do-while 语句的执行效率更高

● 表达式(a-b)*(c+5)的后缀式是(22) 。

(22)A. a b c 5 + * - B. a b – c + 5 *

C. a b c - * 5 + D. a b- c 5 + *

● 给定文法G[S]及其非终结符A,FIRST(A)定义为:从A 出发能推导出的终结符号的集合(S 是文法的起始符号,为非终结符)。对于文法G[S]:

S→[L] | a

L→L, S| S

其中,G[S]包含的四个终结符号分别为:a , [ ]则FIRST(S)的成员包括(48) 。

(48)A. a B. a、[ C. a、[和] D. a、[、]和,

正确答案:B

解析:本题考查程序语言基础知识。

程序语言的语法可由上下文无关文法表示,合法的程序可看作是由该文法推导得到。 对于文法G[S],从S出发推导出[a,a]和a的过程可表示为:

S=>[L]=>[L,S]=>[S,S]=>[a,S]=>[a,a]

S=>a

从S出发可推导出以a或[开始的符号串,因此FIRST(S)的成员包括a、[。

● 高级语言源程序的编译过程分若干个阶段,分配寄存器属于(49) 阶段的工作。

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

● 设某上下文无关文法如下: S→11 | 1001 | S0 |SS,则该文法所产生的所有二进制字符串都具有的特点是(50) 。

(50)A. 能被3 整除B. 0、1 出现的次数相等

C. 0 和1 的出现次数都为偶数D. 能被2 整除

● 函数调用时,基本的参数传递方式有传值与传地址两种, (20) 。

(20)A. 在传值方式下,形参将值传给实参

B. 在传值方式下,实参不能是数组元素

C. 在传地址方式下,形参和实参间可以实现数据的双向传递

D. 在传地址方式下,实参可以是任意的变量和表达式

● 已知某高级语言源程序A 经编译后得到机器C 上的目标程序B,则(21) 。

(21)A. 对B 进行反编译,不能还原出源程序A

B. 对B 进行反汇编,不能得到与源程序A 等价的汇编程序代码

C. 对B 进行反编译,得到的是源程序A 的变量声明和算法流程

D. 对A 和B 进行交叉编译,可以产生在机器C 上运行的动态链接库

正确答案:A

解析:本题考查程序语言方面的基础知识。编译是将高级语言源程序翻译成机器语言程序(汇编形式或机器代码形式),反编译是编译的逆过程。反编译通常不能把可执行文件还原成高

级语言源代码,只能转换成功能上等价的汇编程序。

● 下面关于程序语言的叙述,错误的是(22) 。

(22)A. 脚本语言属于动态语言,其程序结构可以在运行中改变

B. 脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序

C. php、JavaScript 属于静态语言,其所有成分可在编译时确定

D. C 语言属于静态语言,其所有成分可在编译时确定

● 下图所示有限自动机的特点是(48) 。

(48)A. 识别的0、1 串是以0 开头且以1 结尾

B. 识别的0、1 串中1 的数目为偶数

C. 识别的0、1 串中0 后面必须是1 D. 识别的0、1 串中1 不能连续出现 ● 由a、b 构造且仅包含偶数个a 的串的集合用正规式表示为(49) 。

(49)A. (a*a)*b* B. (b* (ab*a)*)* C. (a* (ba*)*b)* D. (a|b)* (aa)* 正确答案:B

解析:在正规式中,符号*表示重复若干次(包括O次),因此正规式“(a*a)*b*”中的表达式“(a+a)*”不能保证有偶数个a。同理,“(a*(ba*)*b)*”和“(a I b)*(aa)*”中对a的个数也没有限制,而在“(ab * a)*”中可以确保a的出现为偶数个。

● 设某语言的语法规则用上下文无关文法G=(N,T,P,S)表示,其中N 是非终结符号的集合,T 是终结符号的集合,P 是产生式集合,S 是开始符号,令V=N∪T,那么符合该语言的句子是(50) 。

(50)A. 从S 出发推导的、仅包含T 中符号的符号串

B. 从N 中符号出发推导的、仅包含T 中符号的符号串

C. 从S 出发推导的、包含V 中符号的符号串

D. 从N 中符号出发推导的、包含V 中符号的符号串

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

(20)A. 便于为数据合理分配存储单元

B. 便于对参与表达式计算的数据对象进行检查

C. 便于定义动态数据结构D. 便于规定数据对象的取值范围及能够进行的运算 正确答案:D

解析:变量是用来存储值的所在处,它们有名字和数据类型。变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。在声明变量时也可以指定它的数据类型。所有变量都具有数据类型,以决定能够存储哪类数据。

● 以下关于C/C++语言指针变量的叙述中,正确的是(21) 。

(21)A. 指针变量可以是全局变量也可以是局部变量

B. 必须为指针变量与指针所指向的变量分配相同大小的存储空间

C. 对指针变量进行算术运算是没有意义的

D. 指针变量必须由动态产生的数据对象来赋值

● 将高级语言源程序翻译为机器语言程序的过程中常引入中间代码。以下关于中间代码的叙述中,错误的是(22) 。

(22)A. 不同的高级程序语言可以产生同一种中间代码

B. 使用中间代码有利于进行与机器无关的优化处理

C. 使用中间代码有利于提高编译程序的可移植性

D. 中间代码与机器语言代码在指令结构上必须一致

正确答案:D

试题(22分析

本题考查程序语言基础知识。

“中间代码”是一种简单且含义明确的记号系统,与具体的机器无关,可以有若干种形式。可以将不同的高级程序语言翻译成同一种中间代码。由于与具体机器无关,使用中间代码有利于进行与机器无关的优化处理,以及提高编译程序的可移植性。

● 以下关于编译系统对某高级语言进行翻译的叙述中,错误的是(48) 。

(48)A. 词法分析将把源程序看作一个线性字符序列进行分析

B. 语法分析阶段可以发现程序中所有的语法错误

C. 语义分析阶段可以发现程序中所有的语义错误

D. 目标代码生成阶段的工作与目标机器的体系结构相关

● 若一个程序语言可以提供链表的定义和运算,则其运行时的( 49) 。

(49)A. 数据空间适合采用静态存储分配策略

B. 数据空间必须采用堆存储分配策略

C. 指令空间需要采用栈结构D. 指令代码必须放入堆区

正确答案:B

试题(49分析

本题考查程序语言基础知识。

链表中的结点空间需要程序员根据需要申请和释放,因此,数据空间应采用堆存储分配策略。

● 由某上下文无关文法M[S]推导出某句子的分析树如下图所示,则错误的叙述是( 50) 。

(50)A. 该文法推导出的句子必须以“a”开头

B. acabcbdcc 是该文法推导出的一个句子

C. “S->aAcB”是该文法的一个产生式

D. a、b、c、d 属于该文法的终结符号集

正确答案:A

解析:程序语言的语法可用上下文无关文法表示,合法的程序可看作是由该文法推导得到的。


相关文章

  • 大学几乎所有学科的课本答案[2]
  • 大学几乎所有学科的课本答案! 来源: 任明嘉的日志 经济金融 [PDF格式]<会计学原理>同步练习题答案 [Word格式]<成本会计>习题及答案(自学推荐,23页) [Word格式]<成本会计>配套习题集 ...查看


  • 11秋[ 编译原理]
  • 考生答题情况 -------------------------------------------------------------------------------- 作业名称:11秋< 编译原理>第一次作业 出 卷 人 ...查看


  • 大学计算机 第五章单元测验
  • 关于计算机程序,下列叙述正确的是(). A. 只有可执行程序(.exe )才能在计算机中运行. B. 计算机程序是用自然语言书写的关于问题求解的方法和步骤的描述. C. 计算机程序编程人员利用某种计算机程设计语言,根据用户业务需求来编写完成 ...查看


  • 大一计算机基础试题
  • 以微处理器为核心的微型计算机属于第__四__代计算机. 用24×24点阵的汉字字模存储汉字,每个汉字需_72 __字节. 显示器的分辨率指的是水平分辨率和_垂直分辨率_的乘积 . 局域网的拓扑结构主要有总线型.__星型__.环型.树型.全互 ...查看


  • 四川省会计电算化初级考试试题及答案第二章
  • [总题数(138)总分(138)及格分数(83)] 一.多选题:[题数(18),每题(1)分,总计(18)分] 1.计算机掉电后,下列那些设备的数据不会全部丢失. A.RAM B.ROM C.硬盘 D.软盘 [正确答案:BCD] 2.一个完 ...查看


  • 风景园林景观规划设计基本原理
  • 风景园林景观规划设计基本原理 1.1景观规划设计的概念与特征 1单选(2分) 以下哪一句对风景园林三大基本方面的概念有误? A. 道路交通.建筑物与形态方面有关 B. 活动方面包括行为.精神.历史 C. 生态.植物.水体.土壤属于背景方面 ...查看


  • 计算机基础知识 2
  • 基础知识 单选题 1.计算机中,完成程序指令指定的基于二进制数的算术运算或逻辑运算的部分是______. A :内存储器 B :外存储器 C :输入输出设备 D :运算器 答案:D 2.计算机中,控制运算器完成程序指令指定的基于二进制数的算 ...查看


  • 福建省计算机一级选择
  • 1. 信息论的创始人是( ). A . 布尔 B . 图灵 C . 冯·诺依曼 D . 香农 答案:D 2. 尽管计算学科已成为一个应用广泛的学科,但其根本问题仍然是能行问题,能行问题是指( ). A . 什么问题都能够被顺序地处理 B . ...查看


  • [1032][C语言程序设计]
  • 1. 设变量b 是int ,c 为float, 则表达式b+c之值的数据类型是( ) int float double 不确定 2. 设char s[2*5]="12345678";,数组s 的长度是() 10 9 8 ...查看


  • 2003版判断题与答案
  • 判断题及答案 第三部分 判断题及答案 1.世界上第一台电子计算机名字叫ENIAC .( ) A. 正确 B. 错误 正确答案:A. 2.电子计算机是只用来进行科学计算的电子设备.10.大型计算机的性能优于微型计算机.( ) A. 正确 B. ...查看


热门内容