admin 管理员组

文章数量: 887021


2023年12月22日发(作者:微信公众号平台官网电话客服)

二级C++分类模拟286

(总分69.5, 做题时间90分钟)

选择题

1.

下列程序的输出结果是 ____ 。

#include<iostream.h>

void main()

{

char*Str;

str="testI";

cout<<str[5];

}

SSS_SINGLE_SEL

A test!

B test

C 空字符

D 异常

该问题分值: 2

答案:C

[解析] 字符指针str值为“test!”,它们的下标由0开始,并且具有一个尾符,输出str[5]的位置为尾符标识,指针字符指向的尾符为空。所以答案为空字符,即选项C正确。

2.

已知在一个类体中包含如下函数原型:VOLUMEOPER ATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是______。

A 这是运算符一的重载运算符函数

B 这个函数所重载的运算符是一个一元运算符

C 这是一个成员函数

D 这个函数不改变类的任何数据成员的值

该问题分值: 1

答案:B

[解析] 本题考核运算符的重载。题中语句为运算符一这是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。

3.

有如下类定义:

class Bag{

public:

Bag(int p=200, char s="M"):price(p), size(s) {cout<<size; }

private:

SSS_SINGLE_SEL

int price;

char size;

};

若执行语句Bag Alice, Kelly(Mice), *Twins[2], F4[4];

则输出结果为______。

SSS_SINGLE_SEL

A MMMMMMMM

B MMMMMM

C MMMMM

D MMMM

该问题分值: 1

答案:C

[解析] 首先Bag Alice语句,会调用默认构造函数Bag(int p=200,char

s="M"),输出size的值M;接着Bag Kelly(Alice)语句会调用编译器生成的复制构造函数,完成初始化,复制构造函数只负责初始化成员变量,没有输出语句;Bag *Twins[2]定义一个Bag*类型的数组,包含两个Bag*类型的元素,并不会构造Bag对象,没有输出;而:Bag F4[4]定义了一个Bag类型的数组,包含4个Bag类型的元素,同时这4个元素会使用默认构造函数完成初始化,所以调用Bag(int p=200,char s="M"),输出4个M。综上,输出结果为MMMMM,答案为C选项。

4.

数据的存储结构是指______ 。

A 存储在外存中的数据

B 数据所占的存储空间量

C 数据在计算机中的顺序存储方式

D 数据的逻辑结构在计算机中的表示

该问题分值: 2

答案:D

[解析] 计算机存储的相关概念。

5.

下列关于模板的叙述中,错误的是______。

A 调用模板函数时,在一定条件下可以省略模板实参

B 可以用int、double这样的类型修饰符来声明模板参数

C 模板声明中的关键字class都可以用关键字typename替代

D 模板的形参表中可以有多个参数

该问题分值: 1

答案:C

SSS_SINGLE_SELSSS_SINGLE_SEL

[解析] 本题考查类模板是类的抽象,类是类模板的实例。函数模板允许使用多个类型参数,但在template定义部分的每个形参前必须有关键字typename或class;模板的类型参数由关键字class或关键字typename及其后的标识符构成,(在标准C++之前关键字typename没有被支持,把这个关键字加入到C++中的原因是因为有时必须要靠它来指导编译器解释模板定义。)本题C选项错误。

6.

当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方式为 ____ 。

SSS_SINGLE_SEL

A ios::in

B ios:: out

C ios::in lios::out

D 以上都不对

该问题分值: 1

答案:D

7.

有如下程序:

#include<iostream>

using namespace std;

class XX{

int x;

public:

XX(int XX=0):x(xx){}

int getX(){return x;}

};

class YY:public XX{

int y;

public:

YY(int xx,int yy):XX(xx),y(yy){}

int getV(){return getX()+y;}

};

int main(){

YY c(3,4);

cout<<()+()<<endl;

return 0;

}

运行这个程序的输出结果是______。

SSS_SINGLE_SEL

A 3

B 4

C 7

D 10

该问题分值: 2

答案:D

[解析] 由于类YY公开继承自类XX,所以执行表达式()+()的值等于3+3+4=10。

8.

通过派生类的对象可直接访问其______。

A 公有继承基类的公有成员

B 公有继承基类韵私有成员

C 私有继承基类的公有成员

D 私有继承基类的私有成员

该问题分值: 2

答案:A

[解析] 基类的私有成员在派生类中都是不能访问的,所以选项B、D是错误的,基类的公有成员通过私有继承后,在派生类中变为了私有成员,只能在派生类中进行访问,而通过派生类的对象不能访问,所以选项C也是错误的。基类的公有成员通过公有继承后,在派生类中是公有成员,所以可以通过派生对象来访问。

9.

要定义一个具有5个元素的一维数组vect,并使其各元素的初值依次是30,50,-88,0和0,则下列定义语句中错误的是______。

A int vect[]={30,50,-88};

B int vect[]={30,50,-88,0,0};

C int vect[5]=(30,50,-88};

D int vect[5]={30,50,-88,0,0};

该问题分值: 2

答案:A

[解析] 此题考查的是一维数组定义时的初始化。当数组声明时没有给出数组的大小但是有初始化列表时,数组的大小就由列表中元素的个数来确定。所以选项A中数组只定义3个元素,不符合题目。

10.

下列关于类和对象的叙述中,错误的是 ____ 。

A 一个类只能有一个对象

B 对象是类的具体实例

C 类是对某一类对象的抽象

D 类和对象的关系是一种数据类型与变量的关系

该问题分值: 2

答案:A

SSS_SINGLE_SELSSS_SINGLE_SELSSS_SINGLE_SEL

11.

下列表达式的值为false的是 ____ 。

SSS_SINGLE_SEL

A 1<3&&5<7

B !(2>4)

C 3&0&&l

D !(5<8)||(2<8)

该问题分值: 2

答案:C

[解析] false为逻辑常量,即假。选项A)为1小于3并且5小于7,这个是真的;选项)B是2不大于4也为真;选项D)是5大于8或者2小于8,只要有一个为真,D就为真,所以选项D)也为真。选项C)中“&”为按位的与运算,3和0按位与,然后再与 1,结果为假。

12.

下列有关模板的叙述中,正确的是______。

A 函数模板不能含有常规形参

B 函数模板的一个实例就是一个函数定义

C 类模板的成员函数不能是模板函数

D 用类模板定义对象时,绝对不能省略模板实参

该问题分值: 2

答案:B

[解析] 此题考查的是模板的概念。函数模板可以含有常规形参;函数模板的一个实例就是一个函数定义;类模板中的成员函数都是模板函数;在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板形参,但是可以为类模板的参数设置默认值。

13.

类Base及其派生类Derived的定义如下:

class Base{

private:

int a;

public:

int b;

friend class Derived;

};

class Derived:public Base{

public:

void foo(){

a=0;//①

b=0;//②

}

SSS_SINGLE_SEL

};

则下列说法正确的是______。

SSS_SINGLE_SEL

A 编译时语句①有错

B 编译时语句②有错

C 编译时语句①和②均有错

D 编译时语句①和②均无错

该问题分值: 2.5

答案:D

[解析] 本题考查的是派生类的相关知识。派生类继承了父类的所有属性.又因为Derived派生类属于公有public继承,所以父类里的变量都可以在于类里使用,所以选择D。

14.

下列关于C++函数的说明中,正确的是______。

A 内联函数就是定义在另一个函数体内部的函数

B 函数体的最后一条语句必须是return语句

C 标准C++要求在调用一个函数之前,必须先声明其原型

D 编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式

该问题分值: 1

答案:C

[解析] 一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替换,而不是在定义在另一个函数体内,所以A选项错误。函数可以没有返回值,所以就不需要return了,如果被调函数在调用函数之前已经定义,那么就不需要声明,所以C选项错误,正确选项为D。

15.

下列关于模板的说法正确的是______。

A 模板的实参在任何时候都可以省略

B 类模板与模板类所指的是同一概念

C 类模板的参数必须是虚拟类型的

D 类模板中的成员函数全部都是模板函数

该问题分值: 1

答案:D

[解析] 在C++中规定如果一个类被声明为类模板,那么其中的所有成员函数就都成为了模板函数。

16.

下列运算符不能重载为友元函数的是______。

SSS_SINGLE_SELSSS_SINGLE_SELSSS_SINGLE_SEL

A = () [] ->

B + - ++ --

C > < >= <=

D += -= *= /=

该问题分值: 2

答案:A

[解析] 此题考查的是运算符重载的概念。C++语言规定,=、[]、()、->以及所有的类型转换运算符只能作为成员函数重载,如果要重载为友元函数就必须重载为非成员函数。

17.

下列代码段声明了3个类

class Person{};

class Student:public Person{};

class Undergraduate:Student{};

下列关于这些类之间关系的描述中,错误的是______。

A 类Person是类Undergraduate的基类

B 类Undergraduate从类student公有继承

C 类student是类Person的派生类

D 类Undergraduate是类Person的派生类

该问题分值: 2

答案:B

[解析] Student类公有继承自Person类,Undergraduate类私有继承自Student类。所以Undergraduate类是从Student类私有继承的。

18.

有如下程序

#include<iostream.h>

void main()

{char ch[2][5]=={"6937","8254"},*p[2];

int i,j,s=0;

for(i=0;i(2;i++)p[i]=ch[i];

for(i=0;i(2;i++)

for(j=0;p[i][j]>"0,j+=2)

s=10*s+p[i][j]-"0";

cout<<s;}

该程序的输出结果是 ____ 。

SSS_SINGLE_SELSSS_SINGLE_SEL

A 69825

B 63825

C 6385

D 693825

该问题分值: 2

答案:C

[解析] 该题主要要搞清楚以下几点:①定义了一个指针数组char *p[2]后,程序中第一个循环{or(i=o;i<2,i++)p[i]=ch[i];的作用是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,井使指针数组的p[1]元素指向了二维数组ch的第二行字符串,这样,就使指针数组p和二维数蛆ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式;ch[i][j]或P[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串"6937",第二行ch[1]中的内容为字符串”8254”。③程序中第二个循环中的循环体s=s。10+p[i][j] -"0";的功能是这样的,每执行一次,将s中的值乘以10(也即,将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][j]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内层循环的循环条件p[i][j],"0"是指p[i][j]中的字符只要不是字符串结束标志"0"就继续循环,语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串”

6937"中一个隔一个地取出字符,分别是"6"和"3",然后从p[1]所指向的宇符串"8254",中一个隔一个地取出字符,分别是”"8"和"5",同时经过转换和相加运算后,结果s中的值应该是6385。

19.

若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是______。

A 函数调用可以作为独立的语句存在

B 函数调用可以无返回值

C 函数调用可以出现在表达式中

D 函数调用可以作为一个函数的形参

该问题分值: 1

答案:D

[解析] 本题考查函数的调用方式。函数的形参和实参具有以下特点:①形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放分配的内存单元,因此,形参只有在函数内部有效,函数调用结束返回主调函数后则不能再使用该形参变量;②实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参,因此应通过预先用赋值、输入等办法使实参获得确定值;⑧实参和形参在数量上、类型上、顺序上应严格一致,否则会发生“类型不匹配”的错误;④函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

20.

有三个关系R、S和T如下:

则由关系R和S得到关系T的操作是______。

SSS_SINGLE_SEL

SSS_SINGLE_SEL

A 自然连接

B .并

C .交

D .差

该问题分值: 2.5

答案:D

[解析] ①并:没有两个关系R和S,它们具有相同的结构。R和S的并是由属于R或属于S的元组组成的集合,运算符为∪。记为T=R∪S。②差:R和S的差是由属于R但不属于S的元组组成的集合,运算符为一。记为T=R-S。③交:R和S的交是由既属于R又属于S的元组组成的集合,运算符为∩。记为T=R∩S。R∩S=R(R-S)。综上所述,答案选D。

21.

有如下程序:

#include<iostream>

using namespace std;

class XA{

int a;

public:

static int b;

XA(int aa):a(aa){b++;}

int getA(){return a;}

};

int XA::b=0;

int main(){

XA d1(4),d2(5);

cout<<()+()+XA::b+d1.b<<endl;

return 0;

}

运行这个程序的输出结果是______。

SSS_SINGLE_SEL

A 9

B 11

C 13

D 15

该问题分值: 2.5

答案:C

22.

下列关于线性链表的描述中,正确的是______。

Ⅰ、只含有一个指针域来存放下一个元素地址

Ⅱ、指针域中的指针用于指向该结点的前一个或后一个结点(即前件或后件)

Ⅲ、结点由两部分组成:数据域和指针域。

SSS_SINGLE_SEL

A 仅Ⅰ、Ⅱ

B 仅Ⅰ、Ⅲ

C 仅Ⅱ、Ⅲ

D 全部

该问题分值: 2.5

答案:D

[解析] 在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。

在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。

23.

如下函数模板:

template <class T> T square(T x) {return x*x;}

其中T是______。

SSS_SINGLE_SEL

A 函数形参

B 函数实参

C 模板形参

D 模板实参

该问题分值: 1

答案:C

[解析] 本题考查模板函数的基本概念,根据模板函数的定义,T是模板形参,所以答案为C。

24.

为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为

SSS_SINGLE_SEL

A public

B protected

C private

D static

该问题分值: 1

答案:A

[解析] 本题考查点为类成员的访问权限,public关键字修饰的类成员可以被类的对象通过成员操作符“.”直接访问,protected和private则不能,而

static不能单独修饰类的成员。

25.

语句while(!E)中的表达式!E等价于 ____ 。

SSS_SINGLE_SEL

A E==0

B E! =1

C E! =0

D E==1

该问题分值: 2

答案:A

[解析] 语句while(!E)中的表达式!E等价于E==0。

26.

有如下程序:

#include<iostream>

using namespace std;

int f(int x);

int sum(int n)

{

int x, s=0;

for(x=0; x<=n; x++)

s+=f(x);

return s;

}

int f(int x){return(x*x+1);}

int main()

{

int a, b;

cout<<"Enter a integer number:";

cin>>a;

b=sum(a);

cout<<"a="<<a<<", b="<<b<<endl;

return 0;

}

如果输入数字3,其输出结果是______。

SSS_SINGLE_SEL

A a=3, b=12

B a=3, b=16

C a=3, b=18

D a=4, b=20

该问题分值: 2.5

答案:C

[解析] 按照sum函数的功能,若输入a的值为3,则for循环,1次,函数f调用4次,b的值为0+(0^2+1)+(1^2+1)+(2^2+1)+(3^2+1)=18。

27.

为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为______。

SSS_SINGLE_SEL

A public

B protected

C private

D static

该问题分值: 2

答案:A

[解析] 类的public成员可以被类对象通过成员操作符“.”直接访问,protected和private成员则不能,而static不能单独修饰类的成员。

28.

下列有关继承和派生的叙述中,正确的是______。

A 如果一个派生类公有继承其基类,则该派生类对象可以访问基类的保护成员

B 派生类的成员函数可以访问基类的所有成员

C 基类对象可以赋值给派生类对象

D 如果派生类没有实现基类的一个纯虚函数,则该派生类是一个抽象类

该问题分值: 1

答案:D

[解析] 私有继承方式为基类的公用成员和保护成员在派生类中成了私有成员,其私有成员仍为基类私有,但派生类对象可以访问基类的保护成员,所以基类对象不能赋值给派生类对象。抽象类是指含有纯虚拟函数的类,所以选项D正确。

29.

软件按功能可以分为应用软件、系统软件和支撑软件(或工具软件)。下面属于应用软件的是______。

SSS_SINGLE_SELSSS_SINGLE_SEL

A 学生成绩管理系统

B C语言编译程序

C UNIX操作系统

D 数据库管理系统

该问题分值: 1

答案:D

[解析] A为工具软件,BC为系统软件。

30.

若有定义语句“int i=2,j=3;”,则表达式i/j的结果是______。

SSS_SINGLE_SEL

A 0

B 0.7

C 0.66667

D 0.66666667

该问题分值: 1

答案:A

[解析] 整数相除为整数,所以结果为0。

31.

下列对基类和派生类关系的描述中,错误的是 ____ 。

A 派生类是基类的具体化

B 派生类是基类的子集

C 派生类是基类定义的延续

D 派生类是基类的组合

该问题分值: 1

答案:B

[解析] 本题考核基类和派生类的关系。派生类中包含了基类中的成员,它是对基类定义的扩充和延续,是对基类定义的进一步具体化,而不是基类的子集。

32.

在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是

A 派生类的对象可以赋给基类的对象

B 派生类的对象可以初始化基类的引用

C 派生类的对象可以直接访问基类中的成员

D 派生类的对象的地址可以赋给指向基类的指针

该问题分值: 1

答案:C

[解析] 公有继承的派生类和基类是子类型的关系,所谓子类型是类型间一般和特殊的关系,即派生类是基类的子类型或者说基类的操作可以被用于操作派生类的对象。

33.

若已定义了类Vehicle,则下列派生类定义中,错误的是______。

A class Car:vehicle{/*类体略*/};

B class Car:public car{/*类体略*/};

C class Car:public Vehicle{/*类体略*/);

D class Car:virtual public Vehicle{/*类体略*/};

该问题分值: 2

答案:B

[解析] 类Car不能派生自它本身。

34.

SSS_SINGLE_SELSSS_SINGLE_SELSSS_SINGLE_SEL

在C++中既可以用于文件输入又可以用于文件输出的流类是______。

SSS_SINGLE_SEL

A fstream

B ifstream

C ofstream

D iostream

该问题分值: 2.5

答案:A

35.

某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是______。

SSS_SINGLE_SEL

A 10

B 8

C 6

D 4

该问题分值: 2

答案:C

[解析] 根据二叉树的基本性质3:在任意一颗二叉树中,度为0的叶子结点总是比度为2的结点多一个,所以本题中是5+1=6个。

36.

下面程序的输出结果是( )。

#include <iostream>

using namespace std;

void main()

{

int s;

for(int k=2;k<6;k+=2)

s=1;

for(int j=k; j<6;j++) s+=j;

cout<<s<<end1;

SSS_SINGLE_SEL

A 9

B 1

C 11

D 10

该问题分值: 2

答案:D

37.

以下有关析构函数的叙述不正确的是

SSS_SINGLE_SEL

A 一个类只能定义一个析构函数

B 析构函数和构造函数一样可以有形参

C 析构函数指定返回类型

D 析构函数名前必须冠有符号“~”

该问题分值: 2

答案:B

[解析] 本题考察析构函数的定义和使用,析构函数不能有形参,故正确答案应为B。

38.

生成派生类对象时,派生类构造函数调用基类构造函数的条件是______。

SSS_SINGLE_SEL

A 无需任何条件

B 基类中显式定义了构造函数

C 派生类中显式定义了构造函数

D 派生类构造函数明确调用了基类构造函数

该问题分值: 2

答案:A

39.

在一棵二叉树上第5层的结点数最多是 ____ 。

SSS_SINGLE_SEL

A 8

B 16

C 32

D 15

该问题分值: 2

答案:B

40.

有如下程序:

# include<iostream>

using namespace std;

class Publication{//出版物类

char name[30];

public:

Publication(char*name="未知名称"){

~strcpy(this->name,name);

}

const char*getName()const{return name;)

virtual const char*getType()const{return"未知类型";}

};

class Book:public Publication{//书类

public:

Book(char*namc):Publication(name){)

viriual const char*getType()const{return "书";}

};

void showPublication(Publication&p){

cout<<e()<<":"<<e()<<endl;

}

int main(){

Book book("精彩人生");

showPublication(book);

return 0;

}

运行时的输出结果是______。

A 未知类型:未知名称

B 未知类型:精彩人生

C 书:未知名称

D 书:精彩人生

该问题分值: 2.5

答案:D

[解析] 因为getType是虚函数,所以e()执行继承类的getType函数,输出“书”;e()执行基类的getName函数,输出“精彩人生”。总共输出“书:精彩人生”,故选D。

1SSS_SINGLE_SEL


本文标签: 函数 模板 派生类 基类 成员