admin 管理员组

文章数量: 1086019


2024年12月30日发(作者:java能开发什么)

程序设计语言基础练习试卷2

(题后含答案及解析)

题型有:1. 选择题

选择题(每小题1分,共75分)下列各题A、B、C、D四个选项中,只有

一个选项是正确的,请将此选项涂写在答题卡相应位置上,答在试卷上不得分。

1. ______是有运行时把过程调用和响应调用需要的代码加以结合的过程。

A.词法分析

B.静态绑定

C.动态绑定

D.预编译

正确答案:C

解析:动态绑定是在程序运行过程中发生的,选项C为正确答案。其他选

项都是在程序编译过程中或编译前发生的。 知识模块:程序设计语言基础

2. 函数调用采用______方式时,系统将实参的地址传递给形式参数。

A.传值调用

B.引用调用

C.宏调用

D.内部调用

正确答案:B

解析:形参为形式参数,是在定义函数名和函数体的时候使用的参数。实参

为实际参数,是在调用时传递该函数的参数。函数调用时,传值是把实参的值赋

值给行参,对行参的修改,不会影响实参的值。引用调用时,以地址方式传递参

数。传递以后,行参和实参都是同一个对象,只是名字不同而已,对行参的修改

将影响实参的值。选项B是正确答案。 知识模块:程序设计语言基础

3. 在C语言中,若函数调用时实参是数组名,则传递给对应形参的是

______。

A.数组空间的首地址

B.数组的第一个元素值

C.数组中元素的个数

D.数组中所有的元素

正确答案:A

解析:在C语言中,数组名表示该数组的起始地址,如果函数调用时,实

参为数组名,那么,传递给形参的是数组的首地址。本题正确答案为选项A。 知

识模块:程序设计语言基础

4. 对高级语言源程序进行编译时,可发现源程序中的______错误。

A.堆栈溢出

B.变量未定义

C.指针异常

D.数组元素下标越界

正确答案:B

解析:高级语言源程序中的错误分为两类:语法错误和语义错误。①语法错

误指语言结构上的错误。②语义错误又可分为静态语义错误和动态语义错误。静

态语义错误指编译时就能发现的程序含义上的错误,动态语义错误只有在程序运

行时才能表现出来。堆栈溢出、指针异常和数组元素下标越界都是程序运行中才

能出现的问题,而遵循先声明后引用原则的程序语言必须先定义变量,然后才能

使用,否则编译器会在语法分析阶段指出变量未定义错误。本题正确答案为选项

B。 知识模块:程序设计语言基础

5. 关于汇编语言,以下叙述中正确的是______。

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

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

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

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

正确答案:D

解析:计算机能直接识别或执行的语言是机器语言,其他形式的语言程序都

要先翻译成机器语言才能运行。汇编语言是对机器语言的第一层抽象,将0、1

序列表示的操作用符号表示,例如,用MOV表示数据传送、ADD表示相加运

算等,因此汇编语言需要翻译,实现该翻译任务的软件称为汇编程序(或汇编器)。

知识模块:程序设计语言基础

6. 程序设计语言的定义一般应包括______几个方面。

A.语法、语义和语句

B.语法、语义和语用

C.语义、语句和语用

D.语法、语用和语句

正确答案:B

解析:一般情况下,程序设计语言的定义都涉及语法、语义、语用等3个方

面。 ①语法是指由程序语言基本符号组成程序中的各个语法成分(包括程序)

的一组规则,不涉及语法成分的特定含义,也不涉及使用者。 ②语义是程序

语言中按语法规则构成的各个语法成分的含义,但不涉及使用者。 ③语用表

示了构成语言的各个记号和使用者的关系。 故本题应该选择B。 知识模块:

程序设计语言基础

7. ______是正确的说法。

A.C语言程序必须经过编译才能运行

B.脚本语言程序只能在浏览器中执行

C.JavaScript是一种超文本标记语言

D.在可视化编程中,源程序不能被编译

正确答案:A

解析:脚本语言是一种解释执行的语言,需要解释器才能运行,而浏览器只

是众多解释器中的一种,所以选项B的说法不正确。HTML是超文本标记语言,

而JavaScript是一种用于HTML中的脚本语言,故选项C不正确。可视化编程

是指无须编程,仅通过直观的操作方式即可完成一些界面设计工作,并自动生成

相关源程序,它同样需要被编译后才能运行,选项D的说法也不正确。选项A

的说法正确,所以,本题应该选择A。 知识模块:程序设计语言基础

8. ______语言可以编写applet并通过Script程序调用执行。

A.FORTRAN

B.C++或C

C.HTML

D.Java

正确答案:D

解析:对于选项A,FORTRAN语言是科学计算的专用语言。对于选项B,

C++/C语言是通用程序设计语言。对于选项C,HTML是超文本标记语言,它定

义标记的集合和相关的格式化规则。对于选项D,Java语言是通用的面向对象的

程序设计语言,适用于网络程序设计。Java编写的applet代码,可以通过Script

程序调用执行。选项D为正确答案。 知识模块:程序设计语言基础

9. 程序以解释方式运行时,不______。

A.进行词法分析

B.进行语法分析

C.进行语义分析

D.产生目标程序文件

正确答案:D

解析:解释方式执行是直接执行源程序或源程序的内部形式,所以它不需要

产生目标程序文件。本题正确答案为选项D。 知识模块:程序设计语言基础

10. 若程序中定义了三个函数f1、f2和f3,并且函数f1调用f2、f2调用

f3,那么,在程序运行时不出现异常的情况下,函数的返回方式为______。

A.先从f3返回f2,然后从f2返回f1

B.先从f3返回f1,然后从f1返回f2

C.先从f2返回f3,然后从f3返回f1

D.先从f2返回f1,然后从f1返回f3

正确答案:A

解析:函数返回时,应该返回到被调用的位置。所以,f3是在f2中被调用

的,应该返回到f2。而f2是在f1中被调用的,所以应该返回f1。故本题的正确

答案是选项A。 知识模块:程序设计语言基础

11. 在while型循环结构中,______。

A.循环体的执行次数等于循环条件的判断次数

B.循环体的执行次数多于循环条件的判断次数

C.循环体的执行次数少于循环条件的判断次数

D.循环体的执行次数与循环条件的判断次数无关

正确答案:C

解析:while循环也称为当循环,是先判断,然后才决定是否执行循环体。

所以,判断次数一般会比执行循环体的次数多1次。故本题应该选择C。 知识

模块:程序设计语言基础

12. 编译程序在语法分析阶段能检查出______错误。

A.表达式中的括号不匹配

B.以零作除数

C.数组下标越界

D.无穷递归

正确答案:A

解析:编译程序的功能是把高级语言编写的源程序翻译成与之对应的目标程

序。编译程序的工作过程可以分为词法分析、语法分析、语义分析、中间代码生

成、代码优化和目标代码生成6个阶段。表达式括号不匹配,属于语言结构的错

误,在语法分析阶段可以检查出该错误,故应选A。 知识模块:程序设计语言

基础

13. 编译器和解释器是两种高级语言处理程序,与编译器相比,(1)。编译

器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语义分析、中

间代码生成、代码优化、目标代码生成等几个阶段:其中,代码优化和(2)并不

是每种编译器都必需的。词法分析的作用是识别源程序中的(3);语法分析中的

预测分析法是(4)的一种语法分析方法:编译器在(5)阶段进行表达式的类型检查

及类型转换。

A.解释器不参与运行控制,程序执行的速度慢

B.解释器参与运行控制,程序执行的速度慢

C.解释器参与运行控制,程序执行的速度快

D.解释器不参与运行控制,程序执行的速度快

正确答案:B 涉及知识点:程序设计语言基础

14.

A.词法分析

B.语法分析

C.中间代码生成

D.语义分析

正确答案:C 涉及知识点:程序设计语言基础

15.

A.字符串

B.单词

C.标识符

D.语句

正确答案:B 涉及知识点:程序设计语言基础

16.

A.自左至右

B.自顶向下

C.自底向上

D.自右至左

正确答案:B 涉及知识点:程序设计语言基础

17.

A.词法分析

B.语法分析

C.语义分析

D.目标代码生成

正确答案:C

解析:编译器和解释器是两种高级语言处理程序,编译器是把源程序的每一

条语句都编译成机器语言,并保存成二进制文件,这样,运行时,计算机可以直

接以机器语言来运行此程序,速度很快,编译器不参与运行控制。解释器则是只

在执行程序时,才一条一条的解释成机器语言让计算机执行,所以运行速度是不

如编译后的程序运行得快,解释器参与了运行控制。本题第1空的正确答案为选

项B。 编译过程涉及如下阶段: ①词法分析阶段。这个阶段中,对源程序

从前到后进行扫描,从中识别出一个个“单词”符号。本题第3空的正确答案为

选项B。 ②语法分析阶段。在词法分析的基础上,根据语言的语法规则,将

单词符号序列分解为各类语法单位。语法分析中,有自顶向下分析和自底向上分

析。预测分析法是自顶向下的语法分析方法。第4空的正确答案为选项B。 ③

语义分析阶段。主要检查源程序中是否存在语义错误,并收集类型信息,供后面

的代码生成阶段使用。只有语法和语义都正确的源程序,才能翻译为正确的目标

代码。语法分析阶段的一个主要任务是进行类型分析和检查。编译器在这个阶段

进行表达式的类型检查及类型转换。第5空的正确答案为选项C。 ④中间代

码生成阶段。在这个阶段中,根据语义分析的输出,生成中间代码。 ⑤代码

优化阶段。因为中间代码在时间和空间上都有很大的浪费,代码优化阶段的任务

是,生成高效的目标代码。 ⑥目标代码生成阶段。把中间代码变换为特定机

器上的绝对指令代码、可重定位的指令代码和汇编指令代码。 其中,代码优

化和中间代码生成阶段,并不是每个编译器都必须的。第2空的正确答案为选项

C。 知识模块:程序设计语言基础

18. ______不是C语言的关键字。

A.do

B.else

C.fopen

D.static

正确答案:C

解析:C语言的关键字是设计和实现语言时规定的有特殊含义的标识符。选

项C的fopen是标准输入输出库中打开文件操作的函数名,不是关键字。本题正

确答案为选项 C。 知识模块:程序设计语言基础

19. 在下面的程序代码中,a是全局变量。若以引用调用(call by reference)

方式调用函数 f,则输出结果为(1);若以值调用(call by value)方式调用函数f,

输出结果为(2)。

A.10

B.40

C.36

D.72

正确答案:D 涉及知识点:程序设计语言基础

20.

A.10

B.40

C.36

D.72

正确答案:B

解析:传值调用是指将实际参数的值传递给形式参数,实际参数与形式参数

对应的存储单元是相互独立的,实际参数仅为形式参数提供初始值,在被调用函

数中对形式参数的修改与实际参数没有关系。题目中,实际参数a的值为5,传

值调用时将5传递给形式参数x,a是全局变量,函数f中对a和x的引用是两

个对象,如图6-4所示,函数的返回值为36。引用调用时形式参数和实际参数对

应的存储单元都是实参的单元,因此函数中对a和x的引用是同一个对象,如图

6-5所示,函数的返回值为64。 知识模块:程序设计语言基础

21. 函数f( )、g( )的定义如下所示,调用函数f时传递给形参a的值

为1,若采用传值(call by value)的方式调用g(c),则函数f的返回值为(1);若采

用传引用(call by reference)的方式调用g(c),则函数f的返回值为(2)。

A.7

B.5

C.4

D.3

正确答案:D 涉及知识点:程序设计语言基础

22.

A.3

B.4

C.5

D.7

正确答案:C

解析:调用函数f时传递给形参a的值为1,若采用传值的方式调用g(c),

那么,因为c=a+1,所以,局部变量c的初始值为2。执行g(c)调用时,在g(c)

函数中,只是更改了x和b的值,不会影响c值,所以,return a+c,会返回3。

第1个空的正确答案为选项D。如果采用引用调用,那么,对b进行运算时,实

际上也同时对c作了修改。所以,在g( )函数中,x变量的结果为2*2=4,

b=x/2+b=4/2+2=4。在此函数调用结束后,c值为4,所以,在f( )函数中,return

a+c的结果就是5。综上所述,第2空的正确答案为选项C。 知识模块:程序设

计语言基础

23. 在下面的程序中,若实参a与形参x以引用调用的方式传递信息,则

输出结果为(1);若实参a与形参x以值调用的方式传递信息,那么输出结果为(2)。

Mainprogram a:=1; addone(a); write(a); Procedure addone(x)

a:=x+1; x:=x+2; return;

A.1

B.2

C.3

D.4

正确答案:D 涉及知识点:程序设计语言基础

24.

A.1

B.2

C.3

D.4

正确答案:B

解析:引用调用是指把实参的地址传递给相应的形参,此时子程序对形参的

改变会同时改变实参的值。值调用是指把实参的值传递给相应的形参,此时子程

序对形参的改变不会影响实参的值。所以,如果本题以引用调用,则在addone

过程中,首先执行a:=x+1会将a加1,然后执行x:=x+2会对形参x加2,因为

是引用调用,所以实参a也会加2,故a最终被加3,第1空应该选择D。如果

以值调用,在addone过程中,只有a:=x+1语句会影响a的值,x:=x+2只影响形

参x的值,并不会影响实参a,故a最终被加1,第2空应该选择B。 知识模块:

程序设计语言基础

25. 计算机能直接识别和执行的语言是(1),该语言是由(2)组成的。

A.机器语言

B.C语言

C.汇编语言

D.数据库语言

正确答案:A 涉及知识点:程序设计语言基础

26.

A.ASCII码

B.SQL语句

C.0、1序列

D.BCD码

正确答案:C

解析:目前,计算机的硬件只能识别由0、1序列组成的机器语言。所以,

本题的正确答案为A和C。 知识模块:程序设计语言基础

27. 在下面的程序中,若调用f1(x)时,参数传递采用传值方式,调用f2(y)

时,参数传递采用引用方式,则输出结果为(1);若调用f1(x)时,参数传递采用

引用方式,调用f2(y)时,参数传递采用传值方式,则输出结果为(2)。 main( )

int a=2;f1(a); write (a);procedure f1(x)f2(x);x=x+x;return;procedure

f2(y)y=y*y;return;

A.2

B.4

C.6

D.8

正确答案:A 涉及知识点:程序设计语言基础

28.

A.2

B.4

C.6

D.8

正确答案:B

解析:在许多高级语言中,都是以main( )函数作为程序入口,这是一个

约定俗成的规则,在本题的伪代码中也不例外。程序一开始,首先在main( )

函数中定义了一个局部变量a,并初始化为2,然后调用f1( )过程,若采用传

值方式,则f1( )不会对变量a做出任何的改变,因为在main( )函数中调用

f1( )过程时,传递给f1( )的只是a的值, a内容的一份拷贝,所以不会对

main( )函数中的变量a造成任何影响。故第1空应该选择A。若调用f1( )

过程时,采用的是引用方式传递参数,则在f1( )过程中,对形参x所作的修

改会直接作用到main( )函数的变量a上。在f1( )中,首先调用f2( )过程,

由于 f2( )此时采用传值方式,所以可以忽略,它不会影响形参x。接下来执

行x=x+x, x的值变为4。故最终输出结果,a的值为4,第2空应该选择B。 知

识模块:程序设计语言基础


本文标签: 语言 程序设计 调用 程序 错误