全国计算机二级C++考试真题及答案.docx

上传人:b****5 文档编号:5927147 上传时间:2023-01-02 格式:DOCX 页数:18 大小:25.19KB
下载 相关 举报
全国计算机二级C++考试真题及答案.docx_第1页
第1页 / 共18页
全国计算机二级C++考试真题及答案.docx_第2页
第2页 / 共18页
全国计算机二级C++考试真题及答案.docx_第3页
第3页 / 共18页
全国计算机二级C++考试真题及答案.docx_第4页
第4页 / 共18页
全国计算机二级C++考试真题及答案.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

全国计算机二级C++考试真题及答案.docx

《全国计算机二级C++考试真题及答案.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C++考试真题及答案.docx(18页珍藏版)》请在冰豆网上搜索。

全国计算机二级C++考试真题及答案.docx

全国计算机二级C++考试真题及答案

2021年9月全国计算机二级C++考试真题及答案

一、选择题(每题2分,共70分)

以下各题A)、B)、C)、D)四个选项中,只有一个选项是正确的。

请将正确选项填涂在答题卡相应位置上,答在试卷上不得分。

(1)以下表达中正确的选项是

A)线性表的链式存储构造与顺序存储构造所需要的存储空间是一样的

B)线性表的链式存储构造所需要的存储空间一般要多于顺序存储构造

C)线性表的链式存储构造所需要的存储空间一般要少于顺序存储构造

D)上述三种说法都不对

答案:

D

解析:

线性表的链式储存肯定要比顺序储存占据更多的空间

(2)以下表达中正确的选项是

A)在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化

B)在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化

C)在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化

D)上述三种说法都不对

答案:

D

解析:

C应该是:

栈顶指针随栈中元素的变化而变化

(3)软件测试的目的是

A)评估软件可靠性

B)发现并改正程序中的错误

C)改正程序中的错误

D)发现程序中的错误

(4)下面描述中,不属于软件危机表现的是

A)软件过程不标准

B)软件开发生产率低

C)软件质量难以控制

D)软件本钱不断提高

(5)软件生命周期是指

A)软件产品从提出、实现、使用维护到停顿使用退役的过程

B)软件从需求分析、设计、实现到测试完成的过程

C)软件的开发过程

D)软件的运行维护过程

(6)面向对象方法中,继承是指

A)一组对象所具有的相似性质

B)一个对象具有另一个对象的性质

C)各对象之间的共同性质

D)类之间共享属性和操作的机制

(7)层次型、网状型和关系型数据库划分原那么是

A)记录长度

B)文件的大小

C)联系的复杂程度

D)数据之间的联系方式

(8)一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,那么实体工作人员、与实体计算机之间的联系是

A)一对一

B)一对多

C)多对多

D)多对一

(9)数据库设计中反映用户对数据要求的模式是

A)内模式

B)概念模式

C)外模式

D)设计模式

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

那么由关系R和S得到关系T的操作是

A)自然连接

B)交

C)投影

D)并

(11)以下关于函数参数的表达中,正确的选项是

A)在函数原型中不必声明形参类型

B)函数的实参和形参共享内存空间

C)函数形参的生存期与整个程序的运行期相向

D)函数的形参在函数被调用时获得初始值

答案:

D

解析:

A——不必声明的是形参,而不是其类型

B——形参内存空间在栈上,实参那么不一定

C——仅仅在函数执行期内

(12)以下关于对象初始化的表达中,正确的选项是

A)定义对象的时候不能对对象进展初始化

B)定义对象之后可以显式地调用构造函数进展初始化

C)定义对象时将自动调用构造函数进展初始化

D)在一个类中必须显式地定义构造函数实现初始化

答案:

C

解析:

A——可以而且必须对对象进展初始化,这就是为什么你自己不写构造函数系统都要‘硬’给你整个默认的原因。

B——定义之后就不能再初始化了。

classA

{

};

int_tmain(intargc,_TCHAR*argv[])

{

Aa;

a.A();

return1;

}

如上例,编译器提示:

errorC2274:

“函数样式转换〞:

位于“.〞运算符右边时非法

D——可以使用默认的构造函数。

(13)以下关于基类和派生类关系的表达中,正确的选项是

A)每个类最多只能有一个直接基类

B)派生类中的成员可以访问基类中的任何成员

C)基类的构造函数必须在派生类的构造函数体中调用

D)派生类除了继承基类的成员,还可以定义新的成员

答案:

D

解析:

A——可以有多个。

B——至少私有的是无论如何都访问不到的。

C——恩街自动调用。

(14)以下关于赋值运算符“=〞重载的表达中,正确的选项是

A)赋值运算符只能作为类的成员函数重载

B)默认的赋值运算符实现了“深层复制〞功能

C)重载的赋值运算符函数有两个本类对象作为形参

D)如果己经定义了复制(拷贝)构造函数,就不能重载赋值运算符

答案:

A

解析:

C——1个形参。

D——谁说不能?

能的。

(15)以下关于模板的表达中,正确的选项是

A)如果一个类中存在纯虚函数,这个类就是类模板

B)函数模板不能有形式参数表

C)类模板是一种参数化类型的类,是类的生成器

D)类模板中不能包含构造函数

答案:

C

解析:

A——那是抽象类,不是模板。

B——我靠,形参都没有了么还搞啥模板啊,应该是模板参数表不能为空。

D——呃……这个确实能。

(16)以下关于C++预定义流对象的表达中,正确的选项是

A)cin是C++预定义的标准输入流对象

B)cin是C++预定义的标准输入流类

C)cout是C++预定义的标准输入流对象

D)cout是C++预定义的标准输入流类

答案:

A

解析:

首先,cin,cout肯定是对象。

(17)以下选项中,正确的C++标识符是

A)6_group

B)group~6

C)age+3

D)_group_6

答案:

D

解析:

不解释

(18)以下选项中,正确的C++表达式是

A)counter++3B)element3+C)a+=bD)’a’=b

答案:

C

解析:

不解释

(19)以下循环语句中有语法错误的选项是

A)inti;for(i=1;i<10;i++)cout<<‘*‘;

B)inti,j;for(i=1,j=0;i<10;i++,j++)cout<<‘*‘;

C)inti=0;for(;i<10;i++)cout<<‘*‘;

D)for

(1)cout<<‘*‘;

答案:

D

解析:

死循环是这样的:

for(;1;)

(20)以下定义语句中,错误的选项是

A)intpx*;

B)char*acp[10];

C)char(*pac)[10];

D)int(*p)();

答案:

A

解析:

不解释

(21)以下函数原型声明中,错误的选项是

A)intfnction(intm,intn);

B)intfunction(int,int);

C)intfunction(intm=3,intn);

D)intfunction(int&m,int&n);

答案:

C

解析:

不解释

(22)假设MyClass为一个类,执行“MyClassa[4],*p[5];〞语句时会自动调用该类构造函数的次数是

A)2B)5C)4D)9

答案:

C

解析:

不解释

(23)假设在表达式y/x中,“/〞是作为成员函数重载的运算符,那么该表达式还可以表示为

A)x.Operator/(Y)

B)operator/(x,Y)

C)Y.operator/(x)

D)operator/(y,x)

答案:

C

解析:

不解释

(24)假设要重载+、=、<<、=和[]运算符,那么必须作为类成员重载的运算符是

A)+和=

B)=和<<

C)==和<<

D)=和[]

答案:

D

解析:

至少‘+’,‘<<’可以这么重载:

classA

{

public:

friendAoperator+(A&,A&);

friendAoperator<<(A&,int);

};

借用马克思的一句话:

C++认为‘=’和‘[]’运算符必须是非静态的。

(25)有函数模板声明和一些变量定义如下:

templateT1sum(T2,T3);

doubledl,d2;

那么以下调用中,错误的选项是

A)sum(dl,d2);

B)sum(d1,d2);

C)sum(d1,d2);

D)sum(d1,d2);

答案:

D

解析:

我也是第一次看到这种推演的方法,不过这道题似乎并不是考推演,因为D答案太明显了。

扩展:

此题提示了模板函数在实例化运行过程中,通过实参来对模板进展推演。

形如下面代码段也是成立的。

template

doubleFunc(Vv,Ww)

{

doubleu=w+v;

returnu;

}

int_tmain(intargc,_TCHAR*argv[])

{

doubled1=1.2;

doubled2=2.2;

doubled=Func(1,d2);

return1;

}

(26)有如下语句序列:

charstr[10];cin>>str;

当从键盘输入〞Ilovethisgame〞时,str中的字符串是

A)"Ilovethisgame"

B)"Ilovethi"

C)"Ilove"

D)"I"

答案:

D

解析:

cin认为空格是一个完毕符,这是我都没有想到的。

至于你信不信,我不管,我反正是信了。

如果要获得带空格的字符串的话,用cin.get(……)

(27)有如下程序:

#include

#include

usingstd:

:

cout;

classPoint

{

public:

frienddoubledistance(constPoint&p);//p距原点的距离

Point(intxx=0,intyy=0):

x(xx),y(yy){}//①

private:

intx,y;

};

doubledistance(constPoint&p){//②

returnsqrt(p.x*p.x+p.y*p.y);

}

intmain(){

Pointp1(3,4);

cout<

return0;

}

以下表达中正确的选项是

A)程序编译正确

B)程序编译时语句①出错

C)程序编译时语句②出错

D)程序编译时语句③出错

答案:

C

解析:

sqrt调用不明确。

(28)有如下程序:

#include

usingnamespacestd;

classCD{

public:

~CD(){cout<<'C';}

private:

charname[80];

};

intmain(){CDa,*b,d[2];return0;}

运行时的输出结果是

A)CCCC

B)CCC

C)CC

D)C

答案:

B

解析:

*不创立自然不析构。

(29)某类中有一个无参且无返回值的常成员函数Show,那么正确的Show函数原型是

A)constvoidShow();

B)voidconstShow();

C)voidShow()const;

D)voidShow(const);

答案:

C

解析:

常不常函数,表示在后头。

(30)假设已定义了类Vehicle,那么以下派生类定义中,错误的选项是

A)classCar:

Vehicle{/*类体略*/},

B)classCar:

publicCar{/*类体略*/};

C)classCar:

publicVehicle{/*类体略*/};

D)classCar:

virtualpublicVehicle{/*类体略*/};

答案:

B

解析:

B这算啥啊?

自己继承自己?

(31)有如下程序:

#include

usingnamespacestd;

classMusic

{

public:

voidsetTitle(char*str){strcpy(title,str);}

protected:

chartype[10];

private:

chartitle[20];

};

classJazz:

publicMusic

{

public:

voidset(char*str)

{

strcpy(type,"Jazz");//①

strcpy(title,str);//②

}

};

以下表达中正确的选项是

A)程序编译正确一B)程序编译时语句①出错

C)程序编译时语句②出错D)程序编译时语句①和②都出错

答案:

C

解析:

发现今年特别喜欢考继承的访问属性。

(32)有如下程序:

#include

usingnamespacestd;

classInstrument{

public:

virtualvoidDisplay()=0;

};

classPiano:

publicInstrument{

public:

voidDisplay(){/*函数体程序略*/}

};

int,main(){

Instruments;

Instrument*p=0;

//...;

return0;

};

以下表达中正确的选项是

A)语句“Insturment*p=0;〞编译时出错

B)语句“Instruments;〞编译时出错

C)类Piano中的Display函数不是虚函数

D)类Instrument是一个虚基类

答案:

B

解析:

虚基类声明指针不出错〔所以A错〕,定义对象就有问题了〔所以B对〕。

Piano是虚函数,只不过没写virtual,父类写了,子类就不用写了〔所以C错〕。

Instrument是个抽象类,不是虚基类,注意两者的区别哦!

(33)有类定义如下:

classType{

public:

Type(inti){val=i;}

Typeoperator-(int);

friendTypeoperator+(Type,Type);

private:

intval;

};

假设有对象定义Typecl;那么以下语句序列中,错误的选项是

A)Type(3)+c1;

B)cl+Type(3);

C)3-cl;

D)c1-3;

答案:

C

解析:

明年还考。

(34)有如下程序:

usingnamespacestd;

#include

#include

usingnamespacestd;

intmain(){

cout<

cout<<12.3456793<<_______<<98765;

return0;

}

假设程厚的输出是12.345679x98765xxxxx,那么划线处缺失的局部是

A)setw(10)B)setfill('x')C)setprecision(8)D)right

答案:

A

解析:

不解释。

(35)有如下程序:

#include

usingnamespacestd;

classBook{

public:

Book(char*t=""){strcpy(title,t);}

private:

chartitle[40];

};

classNovel:

publicBook

{

public:

Novel(char*t=""):

Book(t){}

char*Category()const{return"文学";}

};

intmain()

{

Book*pb;

pb=newNovel();

cout<Category();

return0;

}

假设程序运行时输出结果是“文学〞,那么划线处缺失的语句是

A)char*Category();

B)char*Category()const;

C)virtualchar*Category()const;

D)virtualchar*Category()const=0;

答案:

D

解析:

如果是虚函数,那在Book里没有定义。

 二、填空题(每空2分,共30分)

请将每一个空的正确答案写在答题卡【1】一【15】序号的横线上,答在试卷上不得分。

注意:

以命令关键字填空的必须拼写完整。

(1)一个栈的初始状态为空。

首先将元素5,4,3,2,1依次入栈,然后退栈一次,再将元素A,B,C,D依次入栈,之后将所有元素全部退栈,那么所有元素退栈(包括中间退栈的元素)的顺序为__【1】__。

答案:

1,D,C,B,A,2,3,4,5

解析:

不解释

(2)在长度为n的线性表中,寻找最大项至少需要比拟___【2】___次。

答案:

n-1

(3)一棵二叉树有10个度为1的结点,7个度为2的结点,那么该二叉树共有__【3】___个

结点。

答案:

17

解析:

分析法:

7个度为2的节点,那么叶子节点为8个,那么还有2个不是叶子节点但是度为1的节点。

所以总节点数为2+7+8=17.

利用特殊不成立那么一般一定不成立的方法绘制一颗符合要求的二叉树,发现节点正好17个。

(4)仅由顺序、选择(分支)和重复(循环)构造构成的程序是_【4】__程序。

答案:

构造化程序。

解析:

参见2021年3月选择题5

(5)数据库设计的四个阶段是:

需求分析,概念设计,逻辑设计和_【5】_。

(6)如果一个派生类只有一个直接基类,那么该类的继承方式称为_【6】_继承;如果一个派生类同时有多个直接基类,那么该类的继承方式称为_【7】_继承。

答案:

单一、多重

解析:

我猜的。

(7)运算符“+〞允许重载为类成员函数,或者非成员函数。

假设用operator+(c1,c2)这样的表达式来使用运算符“+〞,应将“+〞重载为_【8】_函数。

答案:

友元

(8)以下程序的输出是3,请填充程序中的空缺,使该行形成一个运算符重载函数的定义。

#include

usingnamespacestd;

classMyNumber{

intn;

public:

MyNumber(intk):

n(k){}

_【9】_int()const{returnn,}

};

intmain(){

MyNumbernuml(3);

cout<

return0;

}

答案:

operator

解析:

强制转化符重载,新鲜。

(9)以下程序的输出结果是_【10】__。

#include

usingnamespacestd;

classBase{

public:

intm,n;

Base(inti,intj):

m(i),n(j){}

};

classDerived:

publicBase{

public:

intm,k;

Derived(inti,intj):

Base(i,j),m(i+1),k(j+1){}

};

intmain(){

Derivedd(1,5);

cout<

return0;

}

答案:

265

(10)根据程序中的注释将以下缺失局部补充完整。

#include

usingnamespacestd;

classA{

char*a;

public:

A():

a(0){}

A(char*aa){//把aa所指字符串复制给a所指向的存储空间

a=__【11】__char[strlen(aa)+1];

strcpy(a,aa);

}

~A(){delete[]a;}

};

答案:

new

(11)根据程序中的注释将以下缺失局部补充完整。

classPoint{

intx,y;//点的x和y坐标

public:

Point(intxx=0,intyy=0):

x(xx),y(yy){}

};

classCircle{

Pointcenter;//圆心位置

intradius;//半径

public:

//利用cx和cy分别初始化圆心的x和y坐标

Circle(intcx,intcy,intr):

__【12】__,radius(r){}

voidarea(){cout<<3.14159*radius*radius<

};

答案:

center(cx,cy)

(12)以下程序的输出结果是__【13】__。

#include

usingnamespacestd;

classBase{

intx;

public:

Base(intb):

x(b){}

virtualvoiddisplay(){cout<

};

classDerived:

publicBase{

inty;

public:

Derived(intd):

Base(d),y(d){}

voiddisplay(){cout<

};

intmain(){

Baseb

(1);

Derivedd

(2);

Base*p=&d;

b.display();

d.display();

p->display();

return0;

}

答案:

122

(13)一个双目运算符作为类的成员函数重载时,重载函数的参数表中有__【14】__个参数。

答案:

1

(14)派生类中的成员函数可以直接访问基类中的公有成员和__【15】__成员。

答案:

保护

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1