2016计算机二级《C++》选择题练习与解析

1关于运算符重载,下列表述中正确的是(  )。

2016计算机二级《C++》选择题练习与解析

A.c++已有的任何运算符都可以重载

B.运算符函数的返回类型不能声明为基本数据类型

C.在类型转换符函数的定义中不需要声明返回类型

D.可以通过运算符重载来创建c++中原来没有的运算符

参考答案:C

参考解析:重载运算符的规则如下:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c++的标准类型。故本题答案为c。

2在类的定义中,用于为对象分配内存空间,对类的数据成员进行初始化并执行其他内部管理操作的函数是( )。

A.友元函数B.虚函数C.构造函数D.析构函数

参考答案:C

参考解析:构造函数在创建对象时系统自动调用,其功能是使用给定的值将对象初始化。

3软件设计中模块划分应遵循的准则是( )。

A.低内聚低耦合

B.高内聚低耦合

C.低内聚高耦合

D.高内聚高耦合

参考答案:B

参考解析:软件没计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循一定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽町能的高。

4如果类A被说明成类B的友元,则( )。

A.类A的成员即类B的成员

B.类B的成员即类A的成员

C.类A的成员函数不得访问类B的成员

D.类B不一定是类A的友元

参考答案:D

参考解析:本题考查的是友元类的定义:类A为类B的友元类,则类A的所有成员函数都是类8的友元函数,但反之则不一定成立。

5有如下类定义:

class Foo

{

public:

Foo(int v):value(V){}//①

~Foo(){}//②

private:

Foo(){}//③

int value=0://④

};

其中存在语法错误的行是(  )。

A.①B.②C.③D.④

参考答案:D

参考解析:本题考查对象的初始化,类的数据成员是不能在声明类时初始化的,所以本题答案为D。

6下面关于数组的描述错误的是( )。

A.在C++语言中数组的名字就是指向该数组第一个元素的指针

B.长度为n的数组,下标的范围是0~n-1

C.数组的大小必须在编译时确定

D.数组只能通过值参数和引用参数两种方式传递给函数

参考答案:D

参考解析:本题考查的是数组的基本使用,数组还可以通过对应的指针调用传递参数,其余选项的说法都是正确的。

7运算符重载是对已有的运算符赋予多重含义,因此( )。

A.可以对基本类型(如int类型)的数据,重新定义“+”运算符的含义

B.可以改变一个已有运算符的优先级和操作数个数

C.只能重载c++中已经有的运算符,不能定义新运算符

D.C++中已经有的所有运算符都可以重载

参考答案:C

参考解析:重载运算符的规则如下:①c++不允许用户自己定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,即不允许参数全部是c++的标准类型。故本题答案为c。

8有如下类和对象的定义:

class Constants{

public:

static double getPI(){return 3.1416;}

};

Constants constants:

下列各组语句中,能输出3.1416的是( )。

参考答案:D

参考解析:本题考查静态成员函数。静态成员函数由于没有this指针,所以不能访问本类中的非静态成员。引用静态成员函数有2种方式,一种是直接使用类来引用,即Constants::getpI();另一种是使用对象来引用,即I()。所以本题答案为D。

9程序流程图中带有箭头的线段表示的是( )。

A.图元关系B.数据流C.控制流D.调用关系

参考答案:C

参考解析:在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示控制流。所以选择C。

10下列程序的执行结果为( )。

#include

void main()

{

int a=3,b=0;

int*P =&a;

b=+a++;

cout<<*P<<”,”<

}

A.3,4B.4,3C.3,3D.4,4

参考答案:B

参考解析:*P为所指对象a的值,语句“b=+a++;”等价于“b=b+a;a=a+1;”。

11对长度为n的线性表排序,在最坏情况下,比较次数不是n(rt一1)/2的排序方法是( )。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

参考答案:D

参考解析:除了堆排序算法的比较次数是0(nlog2n),其他的都是n(n—1)/2。

12字面常量42、4.2、42L的数据类型分别是(  )。

,double、int

9、float、int

、double、long

、float、long

参考答案:C

参考解析:本题考查整型变量的类型和浮点变量的类型,42默认为int型数据,42后面加上L后,表示long型数据,4.2默认为double型数据。

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

A.栈是“先进先出”的线性表

B.队列是“先进后出”的线性表

C.循环队列是非线性结构

D.有序线性表既可以采用顺序存储结构,也可以采用链式存储结构

参考答案:D

参考解析:栈是先进后出的线性表,所以A错误;队列是先进先出的线性表,所以B错误;循环队列是线性结构的线性表,所以C错误。

14不能作为重载函数的调用的依据是(  )。

A.参数个数B.参数类型C.函数类型D.函数名称

参考答案:D

参考解析:所谓重载函数是指同一个函数名可以对应多个函数的实现,编译器会根据参数个数、参数类型和函数返回值类型不同而自动调用相应的函数。

15下列语句中,错误的是(  )。

t int buffer=256;t double*point; const buffer=256;le*eonst point:

参考答案:D

参考解析:const是一个C++关键字,用于限定不允许改变的变量。选项B是指向常量的指针,定义时可以不初始化;选项D是指针常量,定义时必须初始化。故答案为D。

16下列运算符中,在c++语言中不能重载的是( )。

A.*B.>=C.::D./

参考答案:C

参考解析:不能被重载的运算符还包括:“.”、“.*”、“->*”和“?:”。

17有如下说明:

int a[10]={1,2,3,4,5,6,7,8,9,10},* P=a; 则数值为9的表达式是( )。

A.*P+9B.木(P+8)C.*P+=9D.P+8

参考答案:B

参考解析:本题考查指向数组的指针,本题中指针变量P指向数组a,那么*P的值就是1,即表示数组的第一个元素,那么数值为9的表达式就是将指针向后移动8个地址,即P+8指向的是数组元素值为9,所以数值为9的表达式是*(P+8)。

18执行下列语句段后,输出字符“*”的个数是( )。

for(int i=50;i>1;i-=2)Cout<<'*':

A.24B.25C.26D.50

参考答案:B

参考解析:本题考查for循环语句,题目中每执行完循环体后,i都会减2.那么只有50到2之间的偶数才能输出“*”,所以总共输出25次。

19算法的有穷性是指( )。

A.算法程序的运行时间是有限的

B.算法程序所处理的数据量是有限的

C.算法程序的长度是有限的

D.算法只能被有限的用户使用

参考答案:A

参考解析:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有穷性是指算法程序的运行时间是有限的。

20下面关于break语句的描述中,不正确的是( )。

k可以用于循环体内

k语句可以在for循环语句中出现多次

k语句可以在switch语句中出现多次

k语句可用于if条件判断语句内

参考答案:D

参考解析:本题考查的是break语句的使用,break可以结束switch语句和for循环语句,但是不能使用在条件判断语句内。