1、程序设计语言基础练习试卷 2及答案与解析 1 _是有运行时把过程调用和响应调用需要的代码加以结合的过程。 ( A)词法分析 ( B)静态绑定 ( C)动态绑定 ( D)预编译 2 函数调用采用 _方式时,系统将实参的地址传递给形式参数。 ( A)传值调用 ( B)引用调用 ( C)宏调用 ( D)内部调用 3 在 C语言中,若函数调用时实参是数组名,则传递给对应形参的是 _。 ( A)数组空间的首地址 ( B)数组的第一个元素值 ( C)数组中元素的个数 ( D)数组中所有 的元素 4 对高级语言源程序进行编译时,可发现源程序中的 _错误。 ( A)堆栈溢出 ( B)变量未定义 ( C)指针异
2、常 ( D)数组元素下标越界 5 关于汇编语言,以下叙述中正确的是 _。 ( A)汇编语言源程序可以直接在计算机上运行 ( B)将汇编语言源程序转换成目标程序的软件称为解释程序 ( C)在汇编语言程序中,不能定义符号常量 ( D)将汇编语言源程序翻译成机器语言程序的软件称为汇编程序 6 程序设计语言的定义一般应包括 _几个方面。 ( A)语法、语义和语句 ( B)语法、语义和语用 ( C)语义、语句和语用 ( D)语法、语用和语句 7 _是正确的说法。 ( A) C语言程序必须经过编译才能运行 ( B)脚本语言程序只能在浏览器中执行 ( C) JavaScript是一种超文本标记语言 ( D)
3、在可视化编程中,源程序不能被编译 8 _语言可以编写 applet并通过 Script程序调用执行。 ( A) FORTRAN ( B) C+或 C ( C) HTML ( D) Java 9 程序以解释方式运行时,不 _。 ( A)进行词法分 析 ( B)进行语法分析 ( C)进行语义分析 ( D)产生目标程序文件 10 若程序中定义了三个函数 f1、 f2和 f3,并且函数 f1调用 f2、 f2调用 f3,那么,在程序运行时不出现异常的情况下,函数的返回方式为 _。 ( A)先从 f3返回 f2,然后从 f2返回 f1 ( B)先从 f3返回 f1,然后从 f1返回 f2 ( C)先从
4、f2返回 f3,然后从 f3返回 f1 ( D)先从 f2返回 f1,然后从 f1返回 f3 11 在 while型循环结构中, _。 ( A)循环体的执行次数等于循环条件的判断次数 ( B)循环体的执行次数多于循环条件的判断次数 ( C)循环体的执行次数少于循环条件的判断次数 ( D)循环体的执行次数与循环条件的判断次数无关 12 编译程序在语法分析阶段能检查出 _错误。 ( A)表达式中的括号不匹配 ( B)以零作除数 ( C)数组下标越界 ( D)无穷递归 13 编译器和解释器是两种高级语言处理程序,与编译器相比, (1)。编译器对高级语言源程序的处理过程可以划分为词法分析、语法分析、语
5、义分析、中间代码生成、代码优化、目标代码生成等几个阶段:其中,代码优化和 (2)并 不是每种编译器都必需的。词法分析的作用是识别源程序中的 (3);语法分析中的预测分析法是 (4)的一种语法分析方法:编译器在 (5)阶段进行表达式的类型检查及类型转换。 ( A)解释器不参与运行控制,程序执行的速度慢 ( B)解释器参与运行控制,程序执行的速度慢 ( C)解释器参与运行控制,程序执行的速度快 ( D)解释器不参与运行控制,程序执行的速度快 ( A)词法分析 ( B)语法分析 ( C)中间代码生成 ( D)语义分析 ( A)字符串 ( B)单词 ( C)标识符 ( D)语句 ( A)自左至右 (
6、B)自顶向下 ( C)自底向上 ( D)自右至左 ( A)词法分析 ( B)语法分析 ( C)语义分析 ( D)目标代码生成 18 _不是 C语言的关键字。 ( A) do ( B) else ( C) fopen ( D) static 19 在下面的程序代码中, a是全局变量。若以引用调用 (call by reference)方式调用函数 f,则输出结果为 (1);若以值调用 (call by value)方式调用函数 f,输出结果为(2)。 ( A) 10 ( B) 40 ( C) 36 ( D) 72 ( A) 10 ( B) 40 ( C) 36 ( D) 72 21 函数 f()
7、、 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 ( A) 3 ( B) 4 ( C) 5 ( D) 7 23 在下面的程序中,若实参 a与形参 x以引用调用的方式传递信息,则输出结果为 (1);若实参 a与形参 x以值调用的方式传递信息,那么输出结果为 (2)。 Mainprogram a:=1; addone(a); wri
8、te(a); Procedure addone(x) a:=x+1; x:=x+2; return; ( A) 1 ( B) 2 ( C) 3 ( D) 4 ( A) 1 ( B) 2 ( C) 3 ( D) 4 25 计算机能直接识别和执行的语言是 (1),该语言是由 (2)组成的。 ( A)机器语言 ( B) C语言 ( C)汇 编语言 ( D)数据库语言 ( A) ASCII码 ( B) SQL语句 ( C) 0、 1序列 ( D) BCD码 27 在下面的程序中,若调用 f1(x)时,参数传递采用传值方式,调用 f2(y)时,参数传递采用引用方式,则输出结果为 (1);若调用 f1(x
9、)时,参数传递采用引用方式,调用 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) 2 ( B) 4 ( C) 6 ( D) 8 程序设计语言基础练习试卷 2答案与解析 1 【正确答案】 C 【试题解析】 动态绑定是在程序运行过程中发生的,选项 C为正确答案。其他选项都是在程序编译过程中或编译前发生的。 【知识模块】
10、 程序设计语言基础 2 【正确答案】 B 【试题解析】 形参为形式参数,是在定义函数名和函数体的时候使用的参数。实参为实际参数,是在调用时传递该函数的参数。函数 调用时,传值是把实参的值赋值给行参,对行参的修改,不会影响实参的值。引用调用时,以地址方式传递参数。传递以后,行参和实参都是同一个对象,只是名字不同而已,对行参的修改将影响实参的值。选项 B是正确答案。 【知识模块】 程序设计语言基础 3 【正确答案】 A 【试题解析】 在 C语言中,数组名表示该数组的起始地址,如果函数调用时,实参为数组名,那么,传递给形参的是数组的首地址。本题正确答案为选项 A。 【知识模块】 程序设计语言基础 4
11、 【正确答案】 B 【试题解析】 高级语言源程序 中的错误分为两类:语法错误和语义错误。 语法错误指语言结构上的错误。 语义错误又可分为静态语义错误和动态语义错误。静态语义错误指编译时就能发现的程序含义上的错误,动态语义错误只有在程序运行时才能表现出来。堆栈溢出、指针异常和数组元素下标越界都是程序运行中才能出现的问题,而遵循先声明后引用原则的程序语言必须先定义变量,然后才能使用,否则编译器会在语法分析阶段指出变量未定义错误。本题正确答案为选项 B。 【知识模块】 程序设计语言基础 5 【正确答案】 D 【试题解析】 计算机能直接识别或执行的语 言是机器语言,其他形式的语言程序都要先翻译成机器语
12、言才能运行。汇编语言是对机器语言的第一层抽象,将 0、 1序列表示的操作用符号表示,例如,用 MOV表示数据传送、 ADD表示相加运算等,因此汇编语言需要翻译,实现该翻译任务的软件称为汇编程序 (或汇编器 )。 【知识模块】 程序设计语言基础 6 【正确答案】 B 【试题解析】 一般情况下,程序设计语言的定义都涉及语法、语义、语用等 3个方面。 语法是指由程序语言基本符号组成程序中的各个语法成分 (包括程序 )的一组规则,不涉及语法成分的特定含义,也不涉及使用者。 语义是程序语言中按语法规则构成的各个语法成分的含义,但不涉及使用者。 语用表示了构成语言的各个记号和使用者的关系。 故本题应该选择
13、 B。 【知识模块】 程序设计语言基础 7 【正确答案】 A 【试题解析】 脚本语言是一种解释执行的语言,需要解释器才能运行,而浏览器只是众多解释器中的一种,所以选项 B的说法不正确。 HTML是超文本标记语言,而 JavaScript是一种用于 HTML中的脚本语言,故选项 C不正确。可视化编程是指无须编程,仅通过直观的操作方式即可完成一些界面设计工作,并自动生成相关源程序,它同样需要被编译后才能运行,选项 D的说法也不正确。选项 A的说法正确,所以,本题应该选择 A。 【知识模块】 程序设计语言基础 8 【正确答案】 D 【试题解析】 对于选项 A, FORTRAN语言是科学计算的专用语言
14、。对于选项B, C+/C语言是通用程序设计语言。对于选项 C, HTML是超文本标记语言,它定义标记的集合和相关的格式化规则。对于选项 D, Java语言是通用的面向对象的程序设计语言,适用于网络程序设计。 Java编写的 applet代码,可以通过Script程序调用执行。选项 D为正确答案。 【知识模块】 程序设计语言基础 9 【正确答案】 D 【试题解析】 解释方式执行是直接执行源程序或源程序的内部形式,所以它不需要产生目标程序文件。本题正确答案为选项 D。 【知识模块】 程序设计语言基础 10 【正确答案】 A 【试题解析】 函数返回时,应该返回到被调用的位置。所以, f3是在 f2中
15、被调用的,应该返回到 f2。而 f2是在 f1中被调用的,所以应该返回 f1。故本题的正确答案是选项 A。 【知识模块】 程序设计语言基础 11 【正确答案】 C 【试题解析】 while循环也称为当循环,是先判断,然后才决定是否执行循环体。所以,判断次数一般会比执行循环体的次数多 1次。故本题应该选择 C。 【知识模块】 程序设计语言基础 12 【正确答案】 A 【试题解析】 编译程序的功能是把高级语言编写的源程序翻译成与之对应的目标程序。编译程序的工作过程可以分为词法分析、语法分析、语义分析、中间代码生成、代码优化和目标 代码生成 6个阶段。表达式括号不匹配,属于语言结构的错误,在语法分析
16、阶段可以检查出该错误,故应选 A。 【知识模块】 程序设计语言基础 13 【正确答案】 B 【知识模块】 程序设计语言基础 14 【正确答案】 C 【知识模块】 程序设计语言基础 15 【正确答案】 B 【知识模块】 程序设计语言基础 16 【正确答案】 B 【知识模块】 程序设计语言基础 17 【正确答案】 C 【试题解析】 编译器和解释器是两种高级语言处理程序,编译器是把源程序的每一条 语句都编译成机器语言,并保存成二进制文件,这样,运行时,计算机可以直接以机器语言来运行此程序,速度很快,编译器不参与运行控制。解释器则是只在执行程序时,才一条一条的解释成机器语言让计算机执行,所以运行速度是
17、不如编译后的程序运行得快,解释器参与了运行控制。本题第 1空的正确答案为选项 B。 编译过程涉及如下阶段: 词法分析阶段。这个阶段中,对源程序从前到后进行扫描,从中识别出一个个“单词 ”符号。本题第 3空的正确答案为选项 B。 语法分析阶段。在词法分析的基础上,根据语言的语法规则,将单词符号序 列分解为各类语法单位。语法分析中,有自顶向下分析和自底向上分析。预测分析法是自顶向下的语法分析方法。第 4空的正确答案为选项 B。 语义分析阶段。主要检查源程序中是否存在语义错误,并收集类型信息,供后面的代码生成阶段使用。只有语法和语义都正确的源程序,才能翻译为正确的目标代码。语法分析阶段的一个主要任务
18、是进行类型分析和检查。编译器在这个阶段进行表达式的类型检查及类型转换。第 5空的正确答案为选项 C。 中间代码生成阶段。在这个阶段中,根据语义分析的输出,生成中间代码。 代码优化阶段。因为中间 代码在时间和空间上都有很大的浪费,代码优化阶段的任务是,生成高效的目标代码。 目标代码生成阶段。把中间代码变换为特定机器上的绝对指令代码、可重定位的指令代码和汇编指令代码。 其中,代码优化和中间代码生成阶段,并不是每个编译器都必须的。第 2空的正确答案为选项 C。 【知识模块】 程序设计语言基础 18 【正确答案】 C 【试题解析】 C语言的关键字是设计和实现语言时规定的有特殊含义的标识符。选项 C的
19、fopen是标准输入输出库中打开文件操作的函数名,不是关键字。本题正确答案为选项 C。 【知识模块】 程序设计语言基础 19 【正确答案】 D 【知识模块】 程序设计语言基础 20 【正确答案】 B 【试题解析】 传值调用是指将实际参数的值传递给形式参数,实际参数与形式参数对应的存储单元是相互独立的,实际参数仅为形式参数提供初始值,在被调用函数中对形式参数的修改与实际参数没有关系。题目中,实际参数 a的值为 5,传值调用时将 5传递给形式参数 x, a是全局变量,函数 f中对 a和 x的引用是两个对象,如图 6-4所示,函数的返回值为 36。引用调用时形式参数和实际参数对应的存储单元都是 实参
20、的单元,因此函数中对 a和 x的引用是同一个对象,如图 6-5所示,函数的返回值为 64。 【知识模块】 程序设计语言基础 21 【正确答案】 D 【知识模块】 程序设计语言基础 22 【正确答案】 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
21、变量的结果为 2*2=4,b=x/2+b=4/2+2=4。在此函数调用结束后, c值为 4,所以,在 f()函数中, return a+c的结果就是 5。综上所述,第 2空的正确答案为选项 C。 【知识模块】 程序设计语言基础 23 【正确答案】 D 【知识模块】 程序设计语言基础 24 【正确答案】 B 【试题解析】 引用调用是指把实参的地址传递给相应的形参,此时子程序对形参的改变会同时改变实参的值。值调用是指把实参的值 传递给相应的形参,此时子程序对形参的改变不会影响实参的值。所以,如果本题以引用调用,则在 addone过程中,首先执行 a:=x+1会将 a加 1,然后执行 x:=x+2会
22、对形参 x加 2,因为是引用调用,所以实参 a也会加 2,故 a最终被加 3,第 1空应该选择 D。如果以值调用,在 addone过程中,只有 a:=x+1语句会影响 a的值, x:=x+2只影响形参 x的值,并不会影响实参 a,故 a最终被加 1,第 2空应该选择 B。 【知识模块】 程序设计语言基础 25 【正确答案】 A 【知识模块】 程序设计语言基础 26 【正确答案】 C 【试题解析】 目前,计算机的硬件只能识别由 0、 1序列组成的机器语言。所以,本题的正确答案为 A和 C。 【知识模块】 程序设计语言基础 27 【正确答案】 A 【知识模块】 程序设计语言基础 28 【正确答案】
23、 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。 【知识模块】 程序设计语言基础