1、中级软件设计师上午试题-7 及答案解析(总分:100.00,做题时间:90 分钟)一、单项选择题(总题数:58,分数:100.00)1.以下关于解释程序和编译程序的叙述中,正确的是_。(分数:2.00)A.编译程序和解释程序都生成源程序的目标程序B.编译程序和解释程序都不生成源程序的目标程序C.编译程序生成源程序的目标程序,解释程序则不然D.编译程序不生成源程序的目标程序,而解释程序反之2.以下关于传值调用与引用调用的叙述中,正确的是_。 在传值调用方式下,可以实现形参和实参间双向传递数据的效果 在传值调用方式下,实参可以是变量,也可以是常量和表达式 在引用调用方式下,可以实现形参和实参间双向
2、传递数据的效果 在引用调用方式下,实参可以是变量,也可以是常量和表达式(分数:2.00)A.B.C.D.3.可用于编写独立程序和快速脚本的语言是_。(分数:2.00)A.PythonB.PrologC.JavaDC#4.将高级语言源程序翻译成目标程序的是_。(分数:2.00)A.解释程序B.编译程序C.链接程序D.汇编程序5.在对程序语言进行翻译的过程中,常采用一些与之等价的中间代码表示形式。常用的中间代码表示不包括_。(分数:2.00)A树B.后缀式C.四元式D.正则式6.函数(过程)调用时,常采用传值与传地址两种方式在实参和形参间传递信息。以下叙述中,正确的是_。(分数:2.00)A.在传
3、值方式下,将形参的值传给实参,因此,形参必须是常量或变量B.在传值方式下,将实参的值传给形参,因此,实参必须是常量或变量C.在传地址方式下,将形参的值传给实参,因此,形参必须有地址D.在传地址方式下,将实参的值传给形参,因此,实参必须有地址7.编译和解释是实现高级程序设计语言翻译两种基本形式。以下关于编译与解释的叙述中,正确的是_。(分数:2.00)A.在解释方式下,对源程序不进行词法分析和语法分析,直接进行语义分析B.在解释方式下,无需进行词法、语法和语义分析,而是直接产生源程序的目标代码C.在编译方式下,必须进行词法、语法和语义分析,然后产生源程序的目标代码D.在编译方式下,必须先形成源程
4、序的中间代码,然后再产生与机器对应的目标代码8.若 C程序的表达式中引用了未赋初值的变量,则_。(分数:2.00)A.编译时一定会报告错误信息,该程序不能允许B.可以通过编译并运行,但运行时一定会报告异常C.可以通过编译,但链接时一定会报告错误而不能运行D.可以通过编译并运行,但运行结果不一定是期望的结果函数 t、f 的定义如下所示,其中,a 是整型全局变量。设调用函数 t前 a的值为 5,则在函数中以传值调用(call by value)方式调用函数 f时,输出为_;在函数 t中以引用调用(call by reference)方式调用函数时,输出为_。 (分数:4.00)A.12B.16C.
5、20D.24A.12B.16C.20D.249.传值与传地址是函数调用时常采用的信息传递方式,_。(分数:2.00)A.在传值方式下,是将形参的值传给实参B.在传值方式下,形参可以是任意形式的表达式C.在传地址方式下,是将实参的地址传给形参D.在传地址方式下,实参可以是任意形式的表达式10.以下关于变量和常量的叙述中,错误的是_。(分数:2.00)A.变量的取值在程序运行过程中可以改变,常量则不行B.变量具有类型属性,常量则没有C.变量具有对应的存储单元,常量则没有D.可以对变量赋值,不能对常量赋值11.下面 C程序段中 count+语句执行的次数为_。 for(int i=1;i=11;i*
6、=2) for(int j=1;j=i;j+) count+;(分数:2.00)A.15B.16C.31D.3212.程序的三种基本控制结构是_。(分数:2.00)A.过程、子程序和程序B.顺序、选择和重复C.递归、堆栈和队列D.调用、返回和跳转13.函数调用时,基本的参数传递方式有传值与传地址两种,_。(分数:2.00)A.在传值方式下,形参将值传给实参B.在传值方式下,实参不能是数组元素C.在传地址方式下,形参和实参间可以实现数据的双向传递D.在传地址方式下,实参可以是任意的变量和表达式14.下面关于程序语言的叙述,错误的是_。(分数:2.00)A.脚本语言属于动态语言,其程序结构可以在运
7、行中改变B.脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序C.PHP、JavaScript 属于静态语言,其所有成分可在编译时确定D.C#、Java 语言属于静态语言,其所有成分可在编译时确定15.程序设计语言一般都提供多种循环语句,例如实现先判断循环条件再执行循环体的 while语句和先执行循环体再判断循环条件的 do-while语句。关于这两种循环语句,在不改变循环体的条件下,_是正确的。(分数:2.00)A.while语句的功能可由 do-while语句实现B.do-while语句的功能可由 while语句实现C.若已知循环体的次数,则只能使用 while语句D.循环条件相同
8、时,do-while 语句的执行效率更高16.下列叙述中错误的是_。(分数:2.00)A.面向对象程序设计语言可支持过程化的程序设计B.给定算法的时间复杂性与实现该算法所采用的程序设计语言无关C.与汇编语言相比,采用脚本语言编程可获得更高的运行效率D.面向对象程序设计语言不支持对一个对象的成员变量进行直接访问17.在对高级语言源程序进行编译的过程中,为源程序中变量所分配的存储单元的地址属于_。(分数:1.00)A.逻辑地址B.物理地址C.接口地址D.线性地址18.以下关于语言 L=a n b n |n1)的叙述中,正确的是_。 A.可用正规式“aa*bb*”描述,但不能通过有限自动机识别 B.
9、可用正规式“a mbm”表示,也可用有限自动机识别 C.不能用正规式表示,但可以用有限自动机识别 D.不能用正规式表示,也不能通过有限自动机识别(分数:1.00)A.B.C.D.编译过程中,对高级语言程序语句的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将需要的信息正确地填入合理组织的_中;对可执行语句,则是_。(分数:2.00)A.符号表B栈C.队列D树A.翻译成机器代码并加以执行B.转换成语法树C.翻译成中间代码或目标代码D.转换成有限自动机19.语言 L=a m b n |m0,n1的正规表达式是_。 A.aa*bb* B.a*bb* C.aa*b* D.a*b*(分数:1.00
10、)A.B.C.D.20.算术表达式(a-b)*c+d 的后缀式是_(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合性遵循惯例)。(分数:1.00)A.abcd-*+B.ab-cd*+C.ab-c*d+D.abc-d*+21.以下关于程序错误的叙述中,正确的是_。(分数:1.00)A.编译正确的程序必然不包含语法错误B.编译正确的程序必然不包含语义错误C.除数为 0的错误可以在语义分析阶段检查出来D.除数为 0的错误可以在语法分析阶段检查出来22.算术表达式 x-(y+c)*8的后缀式是_(-、+、*表示算术的减、加、乘运算,运算符的优先级和结合型遵循惯例)。(分数:1.00)A.xy
11、c8-+*B.xy-c+8*C.xyc8*+-D.xyc+8*-23.下图所示为一个有限自动机(其中,A 是初态、C 是终态),该自动机所识别的字符串的特点是_。 (分数:1.00)A.必须以 1 1结尾的 0、1 串B.必须以 00结尾的 0、1 串C.必须以 01结尾的 0、1 串D.必须以 10结尾的 0、1 串24.下图所示为一个有限自动机(其中,A 是初态、C 是终态),该自动机识别的语言可用正规式_表示。(分数:1.00)A.(0|1)*01B.1*0*10*1C.1*(0)*01D.1*(0|10)*1*算术表达式采用逆波兰式表示时不用括号,可以利用_进行求值。与逆波兰式 ab-
12、cd+*对应的中缀表达式是_。(分数:2.00)A.数组B栈C.队列D.散列表A.a-b+c*dB.(a-b)*c+dC.(a-b)*(c+d)D.a-b*c+d25.若一种程序设计语言规定其程序中的数据必须具有类型,则有利于_。 在翻译程序的过程中为数据合理分配存储单元 对参与表达式计算的数据对象进行检查 定义和应用动态数据结构 规定数据对象的取值范围及能够进行的运算 对数据进行强制类型转换(分数:1.00)A.B.C.D.26.以下关于高级程序设计语言翻译的叙述中,正确的是_。(分数:1.00)A.可以先进行语法分析,再进行词法分析B.在语法分析阶段可以发现程序中的所有错误C.语义分析阶段
13、的工作与目标机器的体系结构密切相关D.目标代码生成阶段的工作与目标机器的体系结构密切相关27.下图所示为一个有限自动机(其中,A 是初态、C 是终态),该自动机可识别_。 (分数:1.00)A.0000B.1111C.0101D.101028.编译程序分析源程序的阶段依次是_。(分数:1.00)A.词法分析、语法分析、语义分析B.语法分析、词法分析、语义分析C.语义分析、语法分析、词法分析D.语义分析、词法分析、语法分析29.下图所示的有限自动机中,0 是初始状态,3 是终止状态,该自动机可以识别_。 (分数:1.00)A.ababB.aaaaC.bbbbD.abba30.下图所示为两个有限自
14、动机 M1和 M2(A是初态、C 是终态),_。 (分数:1.00)A.M1和 M2都是确定的有限自动机B.M1和 M2都是不确定的有限自动机C.M1是确定的有限自动机,M2 是不确定的有限自动机D.M1是不确定的有限自动机,M2 是确定的有限自动机31.以下关于汇编语言的叙述中,错误的是_。(分数:1.00)A.汇编语言源程序中的指令语句将被翻译成机器代码B.汇编程序先将源程序中的伪指令翻译成机器代码,然后再翻译指令语句C.汇编程序以汇编语言源程序为输入,以机器语言表示的目标程序为输出D.汇编语言的指令语句必须具有操作码字段,可以没有操作数字段32.逻辑表达式“abc(bx0)”的后缀式为_
15、。(其中、分别表示逻辑与、逻辑或,表示关系运算大于,对逻辑表达式进行短路求值)(分数:1.00)A.abcbx0B.abcbxC.abcbx0D.abcbx033.编译程序对 C语言源程序进行语法分析时,可以确定_。(分数:1.00)A.变量是否定义(或声明)B.变量的值是否正确C.循环语句的执行次数D.循环条件是否正确34.以下关于高级语言程序的编译和解释的叙述中,正确的是_。(分数:1.00)A.编译方式下,可以省略对源程序的词法分析、语法分析B.解释方式下,可以省略对源程序的词法分析、语法分析C.编译方式下,在机器上运行的目标程序完全独立于源程序D.解释方式下,在机器上运行的目标程序完全
16、独立于源程序35.对于正规式 0*(10*1)*0*,其正规集中字符串的特点是_。(分数:1.00)A.开头和结尾必须是 0B.1必须出现偶数次C.0不能连续出现D.1不能连续出现36.将高级语言源程序翻译为机器语言程序的过程中常引入中间代码。以下关于中间代码的叙述中,错误的是_。(分数:1.00)A.不同的高级程序语言可以产生同一种中间代码B.使用中间代码有利于进行与机器无关的优化处理C.使用中间代码有利于提高编译程序的可移植性D.中间代码与机器语言代码在指令结构上必须一致37.以下关于编译系统对某高级语言进行翻译的叙述中,错误的是_。(分数:1.00)A.训法分析将把源程序看做一个线性字符
17、序列进行分析B.语法分析阶段可以发现程序中所有的语法错误C.语义分析阶段可以发现程序中所有的语义错误D.目标代码生成阶段的工作与目标机器的体系结构相关38.由某上下文无关文法 MS推导出某句子的分析树如下图所示,则错误的叙述是_。 (分数:1.00)A.该文法推导出的句子必须以 a开头B.acabcbdcc是该文法推导出的一个句子C.SaAcB 是该文法的一个产生式D.a、b、c、d 属于该文法的终结符号集39.已知某高级语言源程序 A经编译后得到机器 C上的目标程序 B,则_。(分数:1.00)A.对 B进行反编译,不能还原出源程序 AB.对 B进行反汇编,不能得到与源程序 A等价的汇编程序
18、代码C.对 B进行反编译,得到的是源程序 A的变量声明和算法流程D.对 A和 B进行交叉编泽,可以产生在机器 C上运行的动态链接库40.如下图所示有限自动机的特点是_。 (分数:1.00)A.识别的 0、1 串是以 0开头且以 1结尾B.识别的 0、1 串中 1的数目为偶数C.识别的 0、1 串中 0后面必须是 1D.识别的 0、1 串中 1不能连续出现41.由 a、b 构造且仅包含偶数个 a的串的集合用正规式表示为_。 A.(a*a)*b* B.(b*(ab*a)*)* C.(a*(ba)*b)* D.(ab)*(aa)*(分数:1.00)A.B.C.D.42.程序语言的大多数语法现象可用上
19、下文无关文法描述。对于一个上下文无关文法 G=(N,T,P,S),其中 N是非终结符号的集合,T 是终结符号的集合,P 是产生式集合,S 是开始符号。令集合 V=NT 那么 G所描述的语言是_的集合。(分数:1.00)A.从 S出发推导出的包含 V中所有符号的串B.从 S出发推导出的仅包含 T中符号的串C.N中所有符号组成的串D.T中所有符号组成的串43.设某上下文无关文法如下:S11|1001|S0|SS,则该文法产生的所有二进制字符串都具有的特点是_。(分数:2.00)A.能被 3整除B.0、1 出现的次数相等C.0和 1的出现次数都为偶数D.能被 2整除44.编译器对高级语言源程序的处理
20、过程可以划分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成等几个阶段,其中,_并不是每种编译器都必需的。(分数:2.00)A.词法分析和语法分析B.语义分析和中间代码生成C.中间代码生成和代码优化D.代码优化和目标代码生成45.已知某文法 GS:S0S0S1,从 S推导出的符号串可用_(n0)描述。 A.(010)n B.0n10n C.1n D.01n0(分数:2.00)A.B.C.D.46.有限自动机(FA)可用于识别高级语言源程序中的记号(单词),FA 可分为确定的有限自动机(DFA)和不确定的有限自动机(NFA)。若某 DFA D与某 NFA M等价,则_。(分数
21、:2.00)A.DFA D与 NFA M的状态数一定相等B.DFA D与 NFA M可识别的记号相同C.NFA M能识别的正规集是 DFA D所能识别的正规集的真子集D.DFA D能识别的正规集是 NFA M所能识别的正规集的真子集47.某确定性有限自动机(DFA)的状态转换如下图所示,令 d=0|1|2|9,则以下字符串中,能被该 DFA接收的是_。 (分数:2.00)A.3857B.1.2E+5C.-123.67D.0.576E1048.C语言是一种_语言。(分数:2.00)A.编译型B.解释型C.编译、解释混合型D.脚本49.集合 L=a m b m |m0_。 A.可用正规式“a *b
22、*”表示 B.不能用正规式表示,但可用非确定的有限自动机识别 C.可用正规式“a mbm”表示 D.不能用正规式表示,但可用上下文无关文法表示(分数:2.00)A.B.C.D.50.编译程序对高级语言源程序进行翻泽时,需要在该程序的地址空间中为变量指定地址,这种地址称为_。(分数:2.00)A.逻辑地址B.物理地址C.接口地址D.线性地址51._是指在运行时把过程调用和响应调用所需要执行的代码加以结合。(分数:2.00)A.绑定B.静态绑定C.动态绑定D.继承52.给定文法 GS及其非终结符 A,FIRST(A)定义为:从 A出发能推导出的终结符号的集合(S 是文法的起始符号,为非终结符)。对
23、于文法 GS: SL|a LL,S|S 其中,GS包含的四个终结符号分别为:a, 则 FIRST(S)的成员包括_。(分数:2.00)AaB.a、C.a、和D.a、和,53.高级语言源程序的编译过程分若干个阶段,分配寄存器属于_阶段的工作。(分数:2.00)A.词法分析B.语法分析C.语义分析D.代码生成文法 G=(V T ,V N ,P,S)的类型由 G中的_决定。若 G 0 =(a,b,S,X,Y,P,S),P 中的产生式及其序号如下。 SXaaY XYY|b YXbX|a 则 G 0 为_型文法,对应于_,由 G 0 推导出句子 aaaa和 baabbb时,所用产生式序号组成的序列分别为
24、_和_。(分数:10.00)A.VTB.VNCPDSA.0B.1C.2D.3A.图灵机B.下推自动机C.有限状态自动机D.其他自动机A.13133B.12312C.12322D.12333A.13133B.12312C.12322D.1233354.编译的优化工作对于下面程序段构造的控制流程图有一个基本块。 A:=0 j:=100 i:=1 loop1:B:=j+1 C:=B+i A:=A+C if i=100 goto loop2 i:=i+1 goto loop1 loop2:write A halt(分数:2.00)A.1B.2C.3D.4中级软件设计师上午试题-7 答案解析(总分:10
25、0.00,做题时间:90 分钟)一、单项选择题(总题数:58,分数:100.00)1.以下关于解释程序和编译程序的叙述中,正确的是_。(分数:2.00)A.编译程序和解释程序都生成源程序的目标程序B.编译程序和解释程序都不生成源程序的目标程序C.编译程序生成源程序的目标程序,解释程序则不然 D.编译程序不生成源程序的目标程序,而解释程序反之解析:解析 编译程序,也称编译器,将源程序翻译成目标语言程序,然后在计算机上运行目标程序。虽然执行效率高,但编写出来的程序可读性很差,且难以修改和维护。 解释程序:也称解释器,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行。2.以下关于
26、传值调用与引用调用的叙述中,正确的是_。 在传值调用方式下,可以实现形参和实参间双向传递数据的效果 在传值调用方式下,实参可以是变量,也可以是常量和表达式 在引用调用方式下,可以实现形参和实参间双向传递数据的效果 在引用调用方式下,实参可以是变量,也可以是常量和表达式(分数:2.00)A.B.C. D.解析:解析 传值调用最显著的特征是被调用的函数内部对形参的修改不影响实参的值。传值调用的参数传递和被调用函数内对参数的使用主要按下述原则:函数定义时形参被当作局部变量看待,在函数被调用时为形参分配存储单元;调用函数前,首先计算实参的值,调用时将实参的值放入形参的存储单元;被调用函数内部对形参单元
27、中的数据进行直接访问。 引用调用是将实参的地址传递给形参,使得形参的地址就是对应实参的地址。引用调用的参数传递和被调用函数内对参数的使用主要按下述原则处理:函数定义时形参被当作局部变量看待,在函数被调用时为形参分配存储单元;调用时将实参的地址放入形参的存储单元;被调用函数内部对形参单元中的数据(地址)进行间接访问。3.可用于编写独立程序和快速脚本的语言是_。(分数:2.00)A.Python B.PrologC.JavaDC#解析:解析 Python 是一种面向对象的解释型程序设计语言,可用于编写独立程序、快速脚本和复杂应用的原型。Python 也是一种脚本语言,它支持对操作系统底层的访问。
28、Prolog是一种逻辑型语言。Prolog 程序是一系列事实、数据对象或事实间的具体关系和规则的集合。Prolog有很强的推理功能,适用于书写自动定理证明、专家系统、自然语言理解等问题的程序。 Java是一种面向对象的程序设计语言,能开发应用在 Internet上且具有软、硬件独立性和交互能力的程序。Java 可以一次编写而到处运行。 C#是微软公司发布的一种面向对象的、运行于.NET Framework 之上的高级程序设计语言。C#看起来与Java有着惊人的相似:它包括了诸如单一继承、接口、与 Java几乎同样的语法和编译成中间代码再运行的过程。但是 c与 Java有着明显的不同,它借鉴了
29、Delphi的一个特点,与 COM(组件对象模型)是直接集成的,而且它是微软公司.NET Windows 网络框架的主角。4.将高级语言源程序翻译成目标程序的是_。(分数:2.00)A.解释程序B.编译程序 C.链接程序D.汇编程序解析:解析 编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序。解释程序是另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但在运行用户程序时,它直接执行源程序或源程序的中间表示形式。解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。5.在对程序语言进行翻译的过程中,常采用一些与之等价的中间代码表示形式。常用的中间代
30、码表示不包括_。(分数:2.00)A树B.后缀式C.四元式D.正则式 解析:解析 常用的中间代码有后缀式、三元式、四元式和树等形式。6.函数(过程)调用时,常采用传值与传地址两种方式在实参和形参间传递信息。以下叙述中,正确的是_。(分数:2.00)A.在传值方式下,将形参的值传给实参,因此,形参必须是常量或变量B.在传值方式下,将实参的值传给形参,因此,实参必须是常量或变量C.在传地址方式下,将形参的值传给实参,因此,形参必须有地址D.在传地址方式下,将实参的值传给形参,因此,实参必须有地址 解析:解析 传值调用是指传递变量值的调用方式。在这种调用方式中,实参使用变量名或者表达式,形参使用变量
31、名。在调用时,调用函数将实参值拷贝到一个副本给形参,即使形参按顺序从对应的实参中获得值,这就相当于将实参值对应地赋给形参,使形参获值。传址调用是指在调用时传递变量地址值的传值调用。传址调用时要求调用函数的实参用地址值,而被调用函数的形参用指针,于是函数之间进行地址值的传递。这种传递是将实参的变量地址值传递给形参指针,即让形参指针指向实参变量,这种传递方式与调用函数拷贝实参值的副本给形参是不同的,它是让形参指针直接指向实参的变量。7.编译和解释是实现高级程序设计语言翻译两种基本形式。以下关于编译与解释的叙述中,正确的是_。(分数:2.00)A.在解释方式下,对源程序不进行词法分析和语法分析,直接
32、进行语义分析B.在解释方式下,无需进行词法、语法和语义分析,而是直接产生源程序的目标代码C.在编译方式下,必须进行词法、语法和语义分析,然后产生源程序的目标代码 D.在编译方式下,必须先形成源程序的中间代码,然后再产生与机器对应的目标代码解析:解析 编译程序是将高级语言书写的源程序翻译成与之等价的低级语言的目标程序,编译的工作阶段包括:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成。解释程序直接执行源程序或源程序的内部形式,一般是读一句源程序,翻译一句,执行一句,不产生目标代码,如 BASIC解释程序。编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成;此外
33、,前者产生的目标代码的执行速度比解释程序的执行速度要快;后者人机交互好,适于初学者使用。8.若 C程序的表达式中引用了未赋初值的变量,则_。(分数:2.00)A.编译时一定会报告错误信息,该程序不能允许B.可以通过编译并运行,但运行时一定会报告异常C.可以通过编译,但链接时一定会报告错误而不能运行D.可以通过编译并运行,但运行结果不一定是期望的结果 解析:解析 全局变量和静态局部变量在定义时如果没有初始化,编译时会自动初始化为 0;而普通的局部变量,如果没有初始化,则其值是一个随机数。在 C程序表达式中,只要引用的变量定义了,就可以通过编译并运行,但运行结果不一定是期望的结果。函数 t、f 的
34、定义如下所示,其中,a 是整型全局变量。设调用函数 t前 a的值为 5,则在函数中以传值调用(call by value)方式调用函数 f时,输出为_;在函数 t中以引用调用(call by reference)方式调用函数时,输出为_。 (分数:4.00)A.12B.16 C.20D.24解析:A.12B.16C.20D.24 解析:解析 本题主要考查函数调用时参数的传递方式。如果采用传值方式调用,则形参值的变化不会影响实参;而采用引用方式调用,则形参值的变化直接反映到实参。 本题中如果在函数 t中采用传值方式调用函数 f,a 的值传给形参 r,在函数 f中,a 的值变为 6,r 的值为 1
35、0并返回赋给变量 x,由于 a是全局变量,退出函数 f后 a的值依然为 6,所以函数 t的输出结果为16。如果函数 t采用传值方式调用函数 f,则形参 r就是对实参 a的引用,对 r的修改就是对 a的修改,在执行 a=r+1时,a 和 r的值都变为 6,执行 r=r*2,a 和 r的值都变为 12,并将 r的值返回给 x,因此函数 t的输出结果为 24。9.传值与传地址是函数调用时常采用的信息传递方式,_。(分数:2.00)A.在传值方式下,是将形参的值传给实参B.在传值方式下,形参可以是任意形式的表达式C.在传地址方式下,是将实参的地址传给形参 D.在传地址方式下,实参可以是任意形式的表达式
36、解析:解析 在传值方式下,是将实参的值传给形参,形参不能向实际参数传递信息;实参可以是表达式或常量,也可以是变量或数组元素。 在传地址方式下,是将实参的地址传给形参,实参和形参都指向同一个对象,被调用函数中对形式参数的修改实际上就是对实际参数的修改,可以实现数据的双向传递。实参必须是变量地址、数组名,不能是表达式或常量。 形参就是形式参数,用一个变量来代表,不能是表达式。10.以下关于变量和常量的叙述中,错误的是_。(分数:2.00)A.变量的取值在程序运行过程中可以改变,常量则不行B.变量具有类型属性,常量则没有 C.变量具有对应的存储单元,常量则没有D.可以对变量赋值,不能对常量赋值解析:
37、解析 常量是在程序运行过程中值不可以改变的数据。根据数据的组织类型的不同,可以将数据分为基本数据类型、用户自定义数据类型、构造类型等。变量具有类型属性,常量也有数据类型,如整数常量、字符串常量等。11.下面 C程序段中 count+语句执行的次数为_。 for(int i=1;i=11;i*=2) for(int j=1;j=i;j+) count+;(分数:2.00)A.15 B.16C.31D.32解析:解析 第 1轮循环,i=1,count+执行 1次,然后 i=2;第 2轮循环,i=2,count+执行 2次,然后 i=4;第 3轮循环,i=4,count+执行 4次,然后 i=8;第
38、 4轮循环,i=8,count+执行 8次,然后i=16,i11,不满足循环条件,循环结束。可以计算 count+语句执行的次数为 1+2+4+8=15。12.程序的三种基本控制结构是_。(分数:2.00)A.过程、子程序和程序B.顺序、选择和重复 C.递归、堆栈和队列D.调用、返回和跳转解析:解析 程序的三种基本控制结构是顺序结构、选择结构和重复结构。13.函数调用时,基本的参数传递方式有传值与传地址两种,_。(分数:2.00)A.在传值方式下,形参将值传给实参B.在传值方式下,实参不能是数组元素C.在传地址方式下,形参和实参间可以实现数据的双向传递 D.在传地址方式下,实参可以是任意的变量
39、和表达式解析:解析 首先看 A选项。在传值方式下,对应的实参和形参是两个独立的实体,占用不同的内存单元,调用函数时,系统把实参值复制一份给形参,便断开两者的联系,形参值的改变对实参无影响。因此,“传值”是单向的,只能由实参传递给形参。 B选项,形参为传值方式下的简单变量,实参可以是与其同类型的常量、变量、数组元素或表达式。 C选项,在传址方式下,函数调用时,系统将实参的地址传递给形参,即这时参数传递的不是数据本身,而是数据在内存中的地址。所以在被调用函数中,任何对形式参数的访问,都被认为是对形式参数的间接访问。实参与形参占用不同的存储单元,传递方式是双向的,形参值的改变将影响实参值。故 C选项
40、正确。D选项,形参为传址方式时,实参如果为常量或表达式,则传址无效,相当于传值方式。14.下面关于程序语言的叙述,错误的是_。(分数:2.00)A.脚本语言属于动态语言,其程序结构可以在运行中改变B.脚本语言一般通过脚本引擎解释执行,不产生独立保存的目标程序C.PHP、JavaScript 属于静态语言,其所有成分可在编译时确定 D.C#、Java 语言属于静态语言,其所有成分可在编译时确定解析:解析 脚本是一种特定的描述性语言,是依据一定的格式编写的可执行文件,又称做宏或批处理文件。脚本通常可以由应用程序临时调用并执行。脚本语言一般都是以文本形式存在,类似于一种命令。有些程序,如 C、C+、
41、Java 等则必须先经过编译,将源代码转换为二进制代码之后才可执行。而像Perl、JavaScript、VBScript 等则不需要事先编译,只要利用合适的解释器便可以执行代码。 动态类型语言是指在运行期间才去做数据类型检查的语言。也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来,不用编译即可运行。Python 和 Ruby就是一种典型的动态类型语言,其他的各种脚本语言如 JavaScript属于动态类型语言。静态类型语言的数据类型是在编译期间检查的,也就是说在写程序时要声明所有变量的数据类型。C/C+是静态类型语言
42、的典型代表,其他的静态类型语言还有 C#、Java 等。故错误的为选项 C。15.程序设计语言一般都提供多种循环语句,例如实现先判断循环条件再执行循环体的 while语句和先执行循环体再判断循环条件的 do-while语句。关于这两种循环语句,在不改变循环体的条件下,_是正确的。(分数:2.00)A.while语句的功能可由 do-while语句实现B.do-while语句的功能可由 while语句实现C.若已知循环体的次数,则只能使用 while语句 D.循环条件相同时,do-while 语句的执行效率更高解析:16.下列叙述中错误的是_。(分数:2.00)A.面向对象程序设计语言可支持过程
43、化的程序设计B.给定算法的时间复杂性与实现该算法所采用的程序设计语言无关C.与汇编语言相比,采用脚本语言编程可获得更高的运行效率 D.面向对象程序设计语言不支持对一个对象的成员变量进行直接访问解析:17.在对高级语言源程序进行编译的过程中,为源程序中变量所分配的存储单元的地址属于_。(分数:1.00)A.逻辑地址 B.物理地址C.接口地址D.线性地址解析:解析 在编译时产生的目标文件都是从地址 0开始的,在连接时将各个目标文件进行符号替换,这时会修改相应的地址,最后产生一个从地址 0开始的可执行文件。在该可执行文件中的地址称为逻辑地址。18.以下关于语言 L=a n b n |n1)的叙述中,
44、正确的是_。 A.可用正规式“aa*bb*”描述,但不能通过有限自动机识别 B.可用正规式“a mbm”表示,也可用有限自动机识别 C.不能用正规式表示,但可以用有限自动机识别 D.不能用正规式表示,也不能通过有限自动机识别(分数:1.00)A.B.C.D. 解析:解析 根据正规式和有限自动机的规范,结合题中给出的语言 L,很明显都无法将语言 L表示和识别出来。编译过程中,对高级语言程序语句的翻译主要考虑声明语句和可执行语句。对声明语句,主要是将需要的信息正确地填入合理组织的_中;对可执行语句,则是_。(分数:2.00)A.符号表 B栈C.队列D树解析:A.翻译成机器代码并加以执行B.转换成语
45、法树C.翻译成中间代码或目标代码 D.转换成有限自动机解析:解析 编译程序的功能是把用高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言)。编译程序的工作过程可以分为 6个阶段:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成,实际的编译器中可能会将其中的某些阶段结合在一起进行处理。各个阶段逻辑上可以划分为前端和后端两部分。前端包括从词法分析到中间代码生成各个阶段的工作,后端包括中间代码优化、目标代码生成与优化等阶段。这样,以中间代码为分水岭,把编译器分成了与机器有关的部分和与机器无关的部分。符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和
46、代码生成,在编译过程中需要对符号表进行怏速有效地查找、插入、修改和删除等操作。19.语言 L=a m b n |m0,n1的正规表达式是_。 A.aa*bb* B.a*bb* C.aa*b* D.a*b*(分数:1.00)A.B. C.D.解析:解析 m0,a m 说明可以有 0个 a或者多个 a;n1,b n 说明至少有 1个 b或者多个 b。a * 表示由 0个或者多个 a构成的集合,可以表示a m |m0;b * 表示由 0个或者多个 b构成的集合,bb * 才可以表示(b n |n1。20.算术表达式(a-b)*c+d 的后缀式是_(-、+、*表示算术的减、加、乘运算,运算符的优先级和
47、结合性遵循惯例)。(分数:1.00)A.abcd-*+B.ab-cd*+C.ab-c*d+ D.abc-d*+解析:解析 后缀表达式的计算是通过栈来实现的。算术表达式(a-b)*c+d 首先计算 a-b,因此 a、b 先入栈,当遇到“-”号时出栈,得出结果并压入栈;然后计算与 c相乘的结果,将 c入栈,遇到“*”号时,出栈,计算乘积并将结果入栈;最后进行与 d的加法运算,将 d入栈,遇到“+”时出栈,计算结果。21.以下关于程序错误的叙述中,正确的是_。(分数:1.00)A.编译正确的程序必然不包含语法错误B.编译正确的程序必然不包含语义错误C.除数为 0的错误可以在语义分析阶段检查出来 D.除数为 0的错误可以在语法分析阶段检查出来解析:解析 用户编写的源程序不可避免地会有一些错误,这些错误大致可以分为静态错误和动态错误。动态错误也称动态语义错误,它们发生在程序运行时,例如除数为 0、引用数组元素下标错误等。静态错误是指编译阶段发现的程序错误,可分为语法错误和静态语义错误,如单词拼写错误、标点符号错、表达式缺少操作数、括号不匹配等有关语言结构上的错误称为语法错误,而语义分析时发现的运算符与