国家二级(C++)机试模拟试卷3(共331题)_第1页
国家二级(C++)机试模拟试卷3(共331题)_第2页
国家二级(C++)机试模拟试卷3(共331题)_第3页
国家二级(C++)机试模拟试卷3(共331题)_第4页
国家二级(C++)机试模拟试卷3(共331题)_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

家二级(C++)机试模拟试卷3(共9

套)

(共331题)

家二级(C++)机试模拟试卷第1套

一、选择题(本题共39题,每题1.0分,共39分。)

1、下面关于数据库三级模式结构的叙述中,正确的是()。

A、内模式可以有多个,外模式和模式只有一个

B、外模式可以有多个,内模式和模式只有一个

C、内模式只有一个,模式和外模式可以有多个

D、模式只有一个,外模式和内模式可以有多个

标准答案:B

知识点解析:数据库的三级模式结构是指数据库系统的外模式、模式和内模式。

个数据库可以有多个外模式,但只有一个模式和一个内模式。

2、在软件开发中,需求分析阶段产生的主要文档是()。

A、可行性分析报告

R、软件需求规格说明书

C、概要设计说明书

D、集成测试计划

标准答案:B

知识点解析:A错误,可行性分析阶段产生可行性分析报告。c错误,概要设计说

明书是总体设计阶段产生的文档。D错误,集成测试计划是在概要设计阶段编写的

文档。B正确,软件需求规格说明书是后续工作如设计、编码等需要的重要参考文

档。

3、下列叙述中,不属于设计准则的是()。

A、提高模块独立性

B、使模块的作用域在该模块的控制域中

C、设计成多入口、多出口模块

D、设计功能可预测的模块

标准答案:C

知识点解析:大量软件没计表明,以卜.的设计准则是可以借鉴为设计的指导和对软

件结构图进行优化,这些准则是:提高模块独立性;模块规模适中;深度、宽度、

扇出和扇入适当;使模块的作用域在该模块的控制域中;应减少模块的接口和界面

的复杂性;设计成单入口、单出口的模块;设计功能可预测的模块。

4、下列程序执行后,输出的结果是()。intx=-5,y=0;while(++x)y++:cout<

A、1

B、2

C、4

D、5

标准答案:C

知识点解析:循环条件是++x,在C++中,对于非0值全都为真,0代表假。x的初

始值为一5,所以循环能进行4次。

5、下列有关继承和派生的叙述中,正确的是()。

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

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

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

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

标准答案:D

知识点解析:私有继承方式为基类的公用成员和保护成员在派生类中成了私有成

员,其私有成员仍为基类私有,但派生类对象可以访问基类的保护成员,所以基类

对象不能赋值给派生类对象。抽象类是指含有纯虚拟函数的类,所以选项D正

确。

6、下面关于指针的说法中错误的是()。

A、在指针定义的同时可以对其进行初始化

B、指针根据其所指向变量的类型的不同,所占用内存大小也不同

C、指针中存放的是内存单元的地址

D、相同类型的指针之间可以相互赋值

标准答案:B

知识点解析:指针是一种用来存放其他变量地址的数据类型,它的声明形式为:

(类型)*(变量名),可以在声明的时候对其进行初始化。由于其存放的是内存单元的

地址,所以大小一般都是4个字节。

7、下列关于构造函数的描述中,错误的是()。

A、构造函数可以设置默认的参数

B、构造函数在定义类对象时自动执行

C、构造函数可以是内联函数

D、构造函数不可以重教

标准答案:D

知识点解析:在一个类中可以定义多个构造函数,以便对类对象提供不同的初始化

的疗法,供用户选用。这些构造函数具有相同的名字,而参数的个数或参数的类型

不相同。

8、下面关于构造函数和析构函数的描述中,错误的是()。

A、析构函数可以声明为虚函数

B、对虚析构函数的调用可以采用动态联编

C、一个类的虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响

D、构造函数可以声明为虚函数

标准答案:D

知识点解析:析构函数可以声明为虚函数,但是构造函数不能声明为虚函数;类的

虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响。

9^有如下程序:classBasc(public:intdata;};classDcrivcdl:publicBase{};

classDerived2:protectedBase{);intmain(){Derivedldl;Derived2d2;

dl.data=0://①d2.data=0://@return0:}下列关于程序编译结果的描

述中,正确的是()。

A、①②皆无编译错误

B、①有编译错误,②无编译错误

C、①无编译错误,②有编译错误

D、①②皆有编译错误

标准答案:C

知识点解析:本题考查公用继承和保护继承对基类成员的访问属性。在公用继承

中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基

类私有。在受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,

其私有成员仍为基类私有。本题中Derived】公用继承Base,所以①编译正确,

Derived2保护继承Base,所以②编译不正确。

10、下列关于成员函数特征的描述中,错误的是(),

A、成员函数一定是内联函数

B、成员函数可以重载

C、成员函数可以设置参数的默认值

D、成员函数可以是静态的

标准答案:A

知识点解析:因为成员函数可以在类体内定义,也可以在类体外定义,所以成员函

数不一定都是内联函数;成员函数可以重载,可以设置参数的默认值,成员函数可

以是静态的。

11、下列各组类型声明符中,含义相同的一组是(),

A、unsignedlongint和long

signedshortint和short

C^unsignedshort和short

D、shortint和ini

标准答案:B

知识点解析:本题考查整型变量的类型,A、C选项中前者为无符号的,后者为有

符号的,D选项中shorlim为2个字节,im为4个字节。

12、程序执行后的输出结果是()。#includevoidmain(){charflag=c:switch(flag)

{casea:cout«]<b':cout«:"2"<

A、12

B、23

C、34

D、45

标准答案:C

知识点解析:因为flag='c',所以执行cout<<“3”<

13、下列符号中能够作为C++标识符的是()。

A、const

B、2a

C、_shape

D、-count

标准答案:C

知识点解析:本题考查C++标识符的命名规则,其规则有如下几点:①所有标识

符必须由字母、数字或下画线组成,且必须由字母或下画线开头;②所有标识符

不能使用C++已有的关骐字;③大、小写字母表示不同意义,即代表不同的标识

符。选项A是关键字,选项B不能以数字开头,选项D包含了字符”,,且不能以

此字符开头。故答案为C。

14、已知函数f的原型是voidf(int*a,long&b);变量vl、v2的定义是:int

vi;longv2;下列调用语句中正确的是()。

A、f(vl,&v2):

B、f(vl,v2);

C、f(&vl,&v2);

D、f(&vl,v2);

标准答案:D

知识点解析:函数参数的3种传递方式:①将变量名作为形参和实参,即传值方

式;②传递变量指针;③引用形参。本题中函数f的第一个形参为指针,那么调

用f函数时,第一个参数必须是地址,所以必须是&vl,第二个形参为引用,所以

对应实参为v2即可。故本题答案为D。

15>有如下类定义:classPoint(private:staticinthow_many;j;

how_many=0:要初始化Point类的静态成员how」nany,下画线处应填

入的内容是()。

A、int

B、staticint

C>intPoint::

D、staticintPoint::

标准答案:c

知识点。析:本题考查静态数据成员,静态数据成员可以初始化,但只能在类体外

进行初始化,其一般形式为:数据类型类名::静态数据成员名=初值。所以本题

答案为C。

16、有如下程序:#include<iostream>usingnamespacestd;classAA(intk:

protected:intn;voidsctK(intk){this->k=k;}public:voidsetN(intn){this—>

n=n;)};classBB:publicAA{/*类体略*/};intmain(){BBx;x.n=l:/

/1x.setS(2);//2X.k=3://3x.setK(4);//4return0:}在标注号码

的四条语句中正确的是()。

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:本题考查公用继承对基类成员的访问属性。在公用继承中,熨类的公

用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有。所以

本题中n、k和setK变为了派生类的保护成员,不能直接使用,即1、3、4错浜,

所以B选项正确。

17、将x+y*z中的"+,注成员函数重载,“*”用友元函数重载应写为()。

A、operator+(operator*(y,z))

B、x.operator+(operator*(y»z))

C、x.operator+(x*(y,z))

D、x+(operator*(y.z))

标准答案:B

知识点解析:在定义了重载运算符后的函数后,函数operator十重载了运算符

“+”。如果在类以外的其他地方定义了一个函数,在类体中用行iend对该函数进行

声明,此函数就称为本类的友员函数。用友元函数重我就是运算符函数不作为

成员函数,而把它放在类外,被改写为"operator*"。为成员函数重载,

x.operator+o所以x+-y*z被改写为“x.operator+(operator*(y,z))”。

18、下列关于常成员的叙述中,正确的是()。

A、常成员函数只能由常对象调用

B、常成员函数不能更新对象的状态

C、常数据成员可以被类对象共享

D、常数据成员可以在构造函数体中初始化

标准答案:B

知识点解析:常对象只能调用常成员函数,普通对象可以调用全部成员函数,包括

常成员函数,选项A错误;常成员函数不能改变所操作对象的数据成员,即常成

员函数不能更新对象的状态,选项B正确;常数据成员是指在类定义中不能修改

其值的数据成员,它和普通类成员一样,不能被所有类对象共享,选项C错误;

类中的常数据成员只能通过构造函数的参数初始化列表进行初始化,选项D错

误。故本题答案为B选项。

19、有如卜程序:#includeusingnamespacestd;classAppliance{public:Appliance()

{coutw'A';}〜Appliance。{}};classTV:publicAppliance}public:TV(int

s-41):size(s){cout«*T*<

A、T41

B、AT41

C、T41T41

D、AT41AT41

标准答案:B

知识点解析:执行派生类构造函数的顺序是:1、调用基类构造函数,2、调用子对

象构造函数,3、再执行派生类析构函数,4、执行基类的析构函数,所以本题中定

义rooml时,先调用基类构造函数输出A,然后执行TV的构造函数输出T4L而

定义对象指针,并不会调用构造函数,所以什么也不输出,结果为AT41,B选项

正确。

20、有如下程序:#include#includeusingnamespacestd;classAnimal{public:virtual

stringGetType()const{return"Animal";}virtualstringGetVoice()const{return

"Voice1*;});classDog:publicAnimal{public:stringGetType()const{return"Dog";)

stringGetVoice()const{return"Woof;}};classCat:publicAnimal{public:string

GetType()const{return"Cat";}stringGetVoice()const{return"Miaow'*;));void

Type(Animal&a){cout<

A、DogspeakVoice-CatspeakVoice

B、DogspcakWoof-CatspcakMiaow

C、AnimalspcakVoice-AnimalspcakVoice

D、AnimalspeakWoof-AnimalspeakMiaow

标准答案:B

知识点解析:本题考查虚函数的运用,本题中定义Dogd;Type(d)时,执行类class

的Type函数,输出Dog,然后输出speak,然后执行派生类的Speak函数输出

Voice,最后输出同理cat输出类似,所以结果为B选项正确。

21、以下程序中调用cin函数给变量a输入数值的方法是错误的,其错误原因是

()o#includevoidmain(){int*p,*q,a,b;p=&a;cout«"inputa:";

cin»p:)

A、*P表示的是指针变量P的地址

B、p表示的是变量a的地址,而不是变量a的值

C、*p表示的是指针变量P的值

D、*p只能用来说明P是一个指针变量

标准答案:B

知识点解析:p表示的是变量a的地址,定义后*p表示的是变量a的值。

22、下列语句或语句序列中错误的是

A、inta;constint*point=<fca;

B、constinta=10;

C>constint*point=10;

D、constint*point=newint(10);

标准答案:C

知识点解析:本题考查常指针,C选项中不能直接将整型变量赋值给常指针,所以

C选项错误。

23、有如下类定义:classXX(intxdata;public:XX(intn=0):xdata(n){)};class

YY:publicXX{intydata;public:YY(intm=0,intn=0):XX(m),ydata(n)(});其中

YY类的对象所包含的数据成员的个数是

A、4

B、3

C、2

D,1

标准答案:C

知识点解析:派生类公用继承基类,那么基类中私有不可访问,保护成员依旧是保

护成员,公有成员依旧是公有成员:保护继承基类,那么基类的公用成员和保护成

员在派生类中成为保护成员,私有成员不可访问;私有继承那么公有成员和保护成

员变为私有,私有成员不可访问。本题中派生类继承基类的私有成员,不可直接访

问但是可以通过基类的成员函数使用基类的私有数据成员,加上派生类的本身的数

据成员,共有2个数据成员,C选项正确。

24、有如下类声明:classHow{intk;public:How(intn):k(n){}How(How

&h):k(h.k){}};则类How所拥有的构造函数的数量是

A、2

B、3

C、4

D、5

标准答案:A

知识点解析•:C++中,一个类若定义了构造函数,编译器就不会再生成默认构造函

数,若定义了复制构造函数,编译器也不会再生成复制构造函数,所以类How拥

有两个构造函数,答案为A。

25>有如下类声明:classBase1{};classBase2{};classDerived:publicBase2,public

Basel{};在一个Derived对象消亡时,析构函数被调用的顺序是

A、-Derived〜Basel、〜Base2

B、-Deriveds-Basel>~Base2

C、〜Basel、~Base2、-Derived

D^~Base2、-Basel、-Derived

标准答案:A

知识点解析:C++中,派生类构造函数都是先调用基类构造函数,再根据声明次序

定义数据成员,另外对于多继承,派生类的构造函数初始化列表中,基类构造函数

是按照基类在派生类的派生列表中出现的次序调用的;而析构函数是按构造函数运

行顺序的逆序进行调用的,可知题目中析构函数的调用顺序为:派生类Derived的

析构函数,Basel的析构函数,Base2的析构函数:答案为A。

26、下列语句中,与语句”(a

A、if(a

B、if(a>=b)n=0;

C>if(a>=b)n=0;elseif(b>=c)n=l;

D、if(a

标准答案:D

知识点解析:本题考查逗号表达式,题目中逗号表达式(ac时,n为0;a>b时,n

为0;与该意思相同的就是D选项,而A选项if语句中的判断语句不正确。

27、一棵二义树共有25个结点,其中5个是叶子结点,则度为1的结点数为

()

A、16

B、10

C、6

D、4

标准答案:A

知识点解析:根据二叉网的性质3:在任意一棵二叉树中,度为。的叶子结点总是

比度为2的结点多一个,所以本题中度为2的结点是5—1=4个,所以度为1的结

点的个数是25—5—4=16个。

28、有如下类定义:classPass{staticintcount;public:Pass(){)voidshow()const;

friendintgetCount();staticintincre();};在所声明的4个函数中,具有ihis指针的彳i

A^Pass和show

B、Pass和show

C、show和incre

D^getCount和incre

标准答案:A

知识点3析:C++的类定义中,只有非静态成员函数具有ihis指针,Pass类中

getCount。函数是友兀函数,不属于成员函数,没有this指针,选项B、D错误:

incre。函数是静态成员函数,没有this指针,选项C错误;答案为A。

29、有如下类定义:classB)public:voidfunl(){)private:voidfun2(){}protected:

voidfun3()(});classD:publicB{protected:voidfun4(){}};若obj是类D的对

象,则下列语句中不违反访问控制权限的是

A、obj.funl();

B、obj.fun2();

C>obj.fun3();

D、obj.fun4();

标准答案:A

知识点解析:本题考查派生类对基类成员的访问属性,派生类私有继承基类,那么

基类的公用成员和保护成员在派生类中成为私有成员,所以派生类可以直接使用基

类的公用成员,A选项正确。

30、有如下程序:#includeusingnamespacestd;classTV{public:TV(int

s=41):sizc(s){}voidPrint(){cout«7,«,N,<

A、/N41/S54

B、/N41/C54

C、/C41/S54

D、/C41/C54

标准答案;A

知识点解析:本题考查两造函数相关知识,本题中定义一个对象rooml,执行

room1.Print时执行构造函数给size赋值为41,然后执行

voidPrint(){cout«7,«*N,<

31有如下程序:#includeusingnamespacestd;classAA{public:

AA(){cout«nA";}〜AA(){cout«"-AH;));classBB{public:BB(){cout«"BH;}

~BB(){cout«"-B";});intmain(){AA*pa=newAA;BBb;deletepa;return0;}运行

这个程序的输出是

A、AB~A~B

B、BA~A~B

C>AB~B~A

D、BA〜B〜A

标准答案:A

知识点解析:main。函数中首先动态创建AA类对象,调用AA类构造函数,输出

“A”,创建BB类对象,调用BB类构造函数,输出“B”,使用delete显式销毁AA

类对象,调用AA类析构函数,输出“~A”,程序结束时,销毁BB类对象,编译器

自动调用BB类析构函数,输出“~B”,整个程序输出结果为:“AB~A~B”,答案为

Ao

32、有如下程序:#includeusingnamespacestd;intmain(){int*p;*p=9;cout

«"Thevalueatp:"«*p;return0;)编译运行程序将出现的情况是()。

A、编译时出现语法错误,不能生成可执行文件

B、运行时一定输出:Thevalueatp:9

C、运行时一定输出:Thevalueatp:*9

D、运行时有可能出错

标准答案:D

知识点解析:先定义指针变量,然后给指针变量赋初值有三种情况:①用取地址

运算符”&”将变量地址赋给指针变量,如p=&a:②将一个指针变量中的地址赋给

另一个指针变量,如尸pl;③给指针变量赋空值0,如q=0,表示该指针变量不

指向任何变量。而不能用一个常量给指针变量赋初值,所以本题选D。

33、执行下列语句段后,输出字符“*”的个数是()。for(inti=50;i>l;i-=2)cout

«*;

A、24

B、25

C、26

D、50

标准答案:B

知识点解析:本题考查for循环语句,题目中每执行完循环体后,i都会减2,那么

只有50到2之间的偶数才能输出“*所以总共输出25次。

34、面向对象方法中,继承是指()「

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

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

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

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

标准答案:D

知识点解析:继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为

基础建立新类的定义技术。广义的说,继承是指能够直接获得已有的性质和特征,

而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。

35、下列关于重载运算符错误的是

A、运算符二不能被重载

B、重载类型转换运算符不需要声明返回值

C、-既可以作为一元运算符,又可以作为二元运算符被重载

D、运算符“不能被重载

标准答案:D

知识点。析:本题考查运算符重载,重载不能改变运算符运算对象的个数;不能改

变运算符的优先级别;不能改变运算符的结合性;重载运算符的函数不能有默认

值,否则就改变了运算等参数的个数;不能定义新的运算符,不能重载的运算符只

有5个:.、.*、::、sizeof、?:o所以本题选择D。

36、有如下程序:#includeusingnamespacestd;classA{public:staticinta;void

init(){a=10;)A(inta=5){init();a+=10;}};intA::a=0;Aobj;intmain(){cout«

obj.a;return0;}运行时输山的结果是

A、0

B、5

C、15

D、10

标准答案:D

知识点解析:静态数据成员独立于任何对象而存在,不是类对象的组成部分,普通

成员函数可以引用静态数据成员。程序定义了类A,并在A的定义体外初始化A

的静态数据成员a=0,构造函数A(int)中的形参a与A::a属于不同的变量,在函数

A(int)中,形参a屏蔽了A::a,所以A(int)中引用的变量a是形参,而不是A::a,对

a的任何操作都不影响A:a,而成员函数inil中引用的是A::a,语句a=10是将A::a

赋值为10,所以输出obj.a其实是输出A::a,结果为10;答案为D。

37、在满足实体完整性约束的条件下()。

A、一个关系中应该有一个或多个候选关键字

B、一个关系中只能有一个候选关键字

C、一个关系中必须有多关键字个候选

D、一个关系中可以没有候选关键字

标准答案:A

知识点解析:实体完整性约束要求关系的主键中属性值不能为空值,所以选择A。

38、若目前E盘根目录下不存在data.txt文件,则下列打开文件方式不会自动创建

data.txt文件的是

A、ifstrcamfin;fin.open(,'e:\\data.txt",ios_base::in);

B、fstreamfio;fio.open("e:\\data.txt",ios_base::out);

C、ofstreamfout;fbut.open("e:\\data.txt",ios_base::out);

D、ofstreamfout;fout.opcn("e:\\data.txt",ios_base::app);

标准答案:A

知识点解析:定义文件流对文件进行操作时.需要指定文件模式,选项R、「中,

ios_base::oul是打开文件进行写操作,删除文件所有数据,如果文件不存在则创建

它,不符合题意;选项D中,ios_ba$e::app是打开文件进行写操作,在文件尾部追

加数据,由于文件与ofstream流关联,当文件不存在时创建文件,也不符合题意,

选项A正确,ios_base::in是打开文件做读操作,文件不存在时打开文件失败。答

案为A。

39、运动会中一个运动项目可以有多名运动员参加,一个运动员可以参加多个项

目。则实体项目和运动员之间的联系是

A、多对多

B、一对多

C、多对一

D、一对一

标准答案:A

知识点解析:一般来说,实体集之间必须通过联系来建立联接关系,分为三类:

对一联系(1:1)、一对多联系(l:m)、多对多联系(m:n)。一个运动项目有很

多运动员参加,而一个运动员可以参加多项运动项1=1,故实体项目和运动员之间的

联系是多对多,A选项正确。

二、基本操作题(本题共1题,每题7.0分,共1分。)

40、使用VC6打开考生文件夹下的源程序文件modi1.cpp,该程序运行时有错,

请改正其中的错误,使得程序正常运行,并使程序输出的结果为:sizeof(strl)=5

sizeof(str2)=10sizeof(str3)=l注意:不要改动main函数,不能增行或删行,也不能

更改程序的结构,错误的语句在//********error********的下面。(1)不能删除

assert。语句;(2)只能修改后面的数字。提示:assert。函数如果为假,则会产生一

个中断异常。1#includc2#includc3voidmain()4{5char*strl=,,abcM;6//

********error********7assert(sizeof(strl)==3);8cout«Hsizeof(strl)=5H<

标准答案:(l)assert(Sizeof(strl)==4);(2)assert(Sizeof(str2)==10):

(3)assert(Sizeof(str3)==1);

知识点解析:本题的功能是利用asserlO函数,则会产生一个中断异常。从已定源

程序的main主函数开始入手.依次执行程序中的语句,输出题目中要求的输出

值。本题在调试的时候并不会产生错误,它的错误是逻辑错误。[解题思路]

(l)asserK)函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结

果,那么assert。函数就要为真,才不会产生中断异常。"assert(sizeof(strl)==3);”语

句中“sizeof(strl)=3”为假,这个会使程序产生异常,不能正常执行。凶为strl的值

为abc但是它还有一个尾符,所以它的长度应该是4,而不是3,所以第1个标识

下修改为“assert(sizeof(str1)==4):(2)同⑴,str2[10]说明,str2的空间为10,第

2个标识卜修改为&$©11因2。0的在2)--10);”。⑶同(1),charstr3=23;语句说明23

是字符,占空间为1,所以修改为人$©11(虬©0白江3尸=1);”。

三、简单应用题(本题共1题,每题7.0分,共7分。)

41、请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2。此工

程中包含一个源程序文件main.epp,其中有“房间”类Room及其派生出的“办公

室''类Office的定义,还有主函数main的定义。请在程序中“//****fbund****"

下的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结

果应为:办公室房间号:308办公室长度:5.6办公室宽度:4.8办公室面积:

26.88办公室所属部门:会计科注意:只能在横线处填写适当的代码,不要改动

程序中的其他内容,也不要删除或移动"//****fbund*****。1什include2using

namespacestd:3classRoom{//“房间”类4introomno:/房间号5double

length;//房间长度(m)6doublewidth;//房间宽度(m)7public:8Room(int

the_room_no,doublethe_length,doublethe_widlh):room_no(the_room_no),

length(thejength),width(the_width){)9inttheRoomNo()const{returnroom_10no;)

11//返回房间号12doubletheLength()const{retumlength;)//返回房间长度13

doubletheWidth()const{returnwidth;}//返回房间宽度14//

**********found*****:,;****15doublethcArea()const{)//返回房间面积

(矩形面积)16);17classOffice:publicRoom{//"办公室"类18char*depart;/

/所属部门19public:20Office(intthe_room_no,doublethe_length,double

thc_width,constchar*the_depart)21//**********foun(j**********22:

{23depart=newchar|strlen(the_de-part)+l|;24//

**********found**********25strcpy();26)27一Office(){delete[]depart

j)28constcharothcDcpartmcnt()const{returndepart;)//返回所属部门29},30

intmain(){31//**********found**********32Office;33coutvv”办公

室房间号:”

标准答案:(l)returnlength*width;(2)Room(the_room_no»thejength,thc_vvidth)

(3)depart,the_depart(4)an_office(308,5.6,4.8."会计科”)

知识点解析:(1)主要考查署生对成员函数的掌握,题目要求返回房间面积(矩形面

积),由此可知空格部分要填写的是一个return语句,返回房间面积,也就是

length*width,因此可以得出程序relunilenglh*widlh;。(2)主要考杳考生对派生类

的构造函数的掌握,派生类的构造函数要使用成员列表初始法先对基类进行初始

化。(3)考查strepy函数,南前一条语句depart二newchar[strlcn(the_dcpart)+l];可

知,程序给(teparl分配了长度为Ihjlepan串长加1的空间,因此彝复制字符串

the_depan串到(tepart,直接填写slrepy(depart,the_depart)即可。(4)主要考查考生

对奖的掌握,题目要求输出的结果为:办公室房府号:308办公室长度:5.6办

公室宽度:4.8办公室面积:26.88办公室所属部门:会计科由Office类的构造

函数可知要定义的一个Office类的对象为an_offke(308,5.6,4.8,”会计科

”)。

四、综合应用题(本题共[题,每题7.0分,共7分c)

42、使用VC6打开考生文件夹下的源程序文件modi3.epp。其中定义的类并不完

整,按要求完成下列操作,将类的定义补充完整。(1)定义类的公有数据成员函数

No、Name[32],其中No是int型的数据,Name[32]为字符型。请在注释//

********"*******后添加适当的语句。⑵完成函藏set的定义,分别设置No和

Name的值,请在注释//********2********后添加适当的语句。(3)完成函数

print(),请在注释//********3********后添加适当的语句,打印的输出如下:

No=lUName=Garfield(4)加缺省构造函数,设置No为0,Name为空,请在注释

//********4*******x后添加适当的语句。注意:增加代码,或者修改代码的位

置已经用符号表示出来。请不要修改其他的程序代码。1#include2classTeStClass

3{4public:5//********i********67//********2********89{10

No=no;11for(inti=0:strName[i]!=0;i++)12{13Name[i]=strName[i];14

Name[i+l]=0;15|16j17voidprint()18{19//********3********2021}22

TeStClass()23{24//********4********2526}27);28intmain()29)30

TestClassstu;31Stu.Set(lll,"Garfield");32stu.print();33return0;34)

标准答案:⑴添加语句:iniNo;charName|32|;(2)添加语句:voidSet(intno,

char*strName)(3)添力口语句:cout«"No=II<

知识点解析:本题程序的功能是利用成员函数set设置类成员数据数值,并利用成

员函数prim输出成员数值。在VC环境下打开程序,根据题干给出的几条功能要

求,对程序中给出注释下的内容逐个补全或修改。从已定源程序的main主函数开

始入手,可以看出程序通过调用类TestClass和其构造函数实现各种输出操作。[解

题思路]⑴题目1要求“定义类的公有数据成员函数No、Name[32],其中No是ini

型的数据,Name[32]为字符型”。在已有程序中,类定义的public区域中,定义变

量No,Namc[32],即在第1个标识下添加语句“intNo;charName[32];⑵题

目2要求“完成函数sei的定义,分别设置N。和Name的值”。第2个标识下说明函

数set的语句中,应该包括变量no,strName的定义,然后在函数中将其值赋值给

No,Name,即添加定义语句"'voidSct(int,no,char*strNamc)”。(3)题目3要求“完成

函数print。",根据输出结果,知道输出的是No和Name的值,所以这里补全

4icout«',No=',<

国家二级(C++)机试模拟试卷第2套

一、选择题(本题共38题,每题1.0分,共38分。)

1、下列程序将X、y和Z按从小到大的顺序排列,横线处应添加语句()。template

voidfun(){Ta:if(x>y){a=x;x=y;y=a;}if(y>z){a=y;y=z;z=a;)if(x>

y){a=x;x=y;y=a;}}

A^Tx,Ty,Tz

B、Tx;y;z

C、T&x,T&y,T&z

D、T&x,&y,&z

标准答案:C

知识点解析:函数fun的类型为void没有任何返回值,函数中变量的改变,即参

数的改变应该影响实参。应该是地址传递方式,即把引用型作为函数形参。类T

是类的抽象,可以利用模板建立各种数据类型的类。所以补全函数的定义为

“T&x,T&v,T&z”。

2、下列哪项不是面向对象程序设计的主要特征()。

A、封装

B、继承

C、多态

D、结构

标准答案:D

知识点解析:面向对象程序设计的特点:标识惟一性,分类性,多态性,封装性,

模块独立性好。

3、如果有以下定义及初始化:inta=3,*p=&a;则由此可以推断,*p的值是()。

A、变量a的值,即3

B、变量a的地址值

C、变量P的地址值

D、无意义

标准答案:A

知识点解析:此题考查的是指针变量的定义与赋初值。语句字p二&a是定义指针并且

给指针赋初值,指向a,所以指针的值就是变量a的地址,*p的值就是a的值。

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

A、constintbuffer=256;

B、constdouble*point;

C^intconstbuffer=256;

D^double*const*point;

标准答案:D

知识点解析:const是一个CH关键字,用于限定不允许改变的变量“选项B是指

向常量的指针,定义时可以不初始化;选项D是指针常量,定义时必须初始化。

故答案为Do

5、有如下程序:#includeusingnamespacestd;Classobj(staticinti;public:

obj(){i++;}~Obi(){i--;}staticintgetVal(){returni;)};intobj::i=0;void

f(){objob2;cout<getVal();deleteob3:cout<

A、232

B、231

C、222

D、221

标准答案:D

知识点解析:本题考查阂造函数和析构函数的调用顺序,调用顺序为先构造的后析

构,后构造的先析构。本题中先定义了一个对象。bl,会执行构造函数,那么i就

变为了1;再执行函数f后,由于又定义了一个对象oh2,所以再次执行构造函

数,i就变为了2,输出了2。函数执行完后执行析构函数,i变为了1,然后又定

义了对象指针,i变为了2。释放。b3后,i变为了1,所以答案为D。

6、有以下程序,输出结果()。#includevoidmain(){staticintb|][3]={{1,2,3),

{4},{5,6));b[0][2]=12,b[l][2]=18:cout«**«*\f«**(b-nl)«4<\

t"vv**(b+l)vv“\*(*(b+l)+2)«“\n";cout<

A、1441830

B、114418

C>441811

D、444301

标准答案:A

知识点解析:本题b是一个3x3的二维数组:利用指针表示数组:*(*(数组名

+i)+j),**b表示b⑼⑼元素,值是I,**(b+l)表示是b[0Hl]的元素,值是4。

*(*b+l)+2)表示b[l]⑵的元素,值是18,b⑼⑵+b[l][2]+b⑵⑵之和是30。

7、将前缀运算符“-”重载为非成员函数,下列原型中能正确用于类中说明的是()。

A、Deer&operator-(int);

B、Deeroperator-(Deer&,int);

C、friendDccr&opcrator—(Dccr&);

D、friendDeeroperatoi-(Deer&,int);

标准答案:D

知识点解析:非成员函数重载用友元函数的形式实现,"-”运算符重载分为前置和

后置两种重载方式。用友元函数来实现"-''运算符的重载时,前置运算符的重

载的一般格式为:friendoperatoro-(ciassName&);后置++运算符的重载的一般格

式为:fricndopcrator-(ClassNamc&,int)。所以答案为D。

8、已知枚举类型声明语句为:enumCOLOR{WHITE,YELLOW,GREEN=5,

RED,BLACK:10}:则下列说法中错误的是().

A、枚举常量YELLOW的值为:1

B、枚举常量RED的值为6

C、枚举常量BLACK的值为10

D、枚举常量WHITE的值为I

标准答案:D

知识点解析•:C++语言规定枚举常量的默认值依次等于0,1,…,n—屋也可以

给枚举常量赋初值,方法是:在枚举常量的后面跟上“=整型常量”,在给枚举常量

赋初值时,如果给其中在何一个枚举常量赋初值,则其后的枚举常量将按自然数的

规则依次赋初值.所以本题答案为D.

9、有如下程序:#includeusingnamespacestd;classA{public:A(inti=0):

rl(i){}voidprint。{coutvv'E'v

A、P8-E4

B、P8-C16-

C、P0-E4-

D、P0-C16-

标准答案:D

知识点解析:暂无解析

10、程序调试的任务是()o

A、设计测试用例

B、验证程序的正确性

C、发现程序中的错误

D、诊断和改正程序中的错误

标准答案:D

知识点解析:程序调试的任务是诊断和改正程序中的错误。

II、卜列程序的输出结果是()。#include<iostream.h>intmin(inta,intb){if(a

<b)returna;elsereturnb;returnO;)voidmain(){cout<<min(l,min(2,3))<

<endl;)

A、0

B、1

C、2

D、3

标准答案:B

知识点解析:本题考查的是函数的调用,第一次调用min(2,3),因为2V3,所以

返回值为2,第二次调月min(l,2),因为1V2,所以返回1。

12^设循环队列为Q(l:m),其初始状态为front=r?ar=m。经过一系列入队与退队

运算后,front=30,rear=10。现要在该循环队列中作顺序查找,最坏情况下需要比

较的次数为()。

A、19

B、20

C、m-19

D、m一20

标准答案:D

知识点解析:循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中

的队尾元素,用排头指升front指向排头元素的前一个位置,因此,从排头指针

front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中

的元素,队列初始状态为front二rear=m,当front=30,rear=10时,队列中有m一

30+10+1=m—19个元素,比较次数为m-20次,D选项正确c

13、下面属于黑盒测试方法的是()。

A、错误推测法

B、基本路径测试

C、判定覆盖

D、条件覆盖

标准答案:A

知识点解析:黑盒测试方法也称为功能测试或数据驱动测试。黑盒测试是对软件已

经实现的功能是否满足需求进行测试和验证。黑盒测试方法主要有等价类划分法、

边界值分析法、错误推测法和因果图等。白盒测试方法主要有逻辑覆盖测试(语句

覆盖、路径覆盖、判断覆盖、条件覆盖)、基本路径测试等。故本题答案为A选

项。

14、某二叉树中共有935个结点,其中叶子结点有435个,则该二叉树中度为2的

结点个数为()。

A、64

B、66

C、436

D、434

标准答案:D

知识点解析:在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点

中最大的度称为树的度。对任何一棵二叉树,度为0的结点(即叶子结点)总是比度

为2的结点多一个。叶子结点有435个,则度为2的结点为434,D选项正确。

15、下面重载乘法运算符的函数原型声明中错误的是()。

A、TestClassoperator*(MyClass,double);

B、TestClassoperator*(double,MyClass);

C^TestClassoperator*(double,double);

D^TestClassopcrator*(MyClass»MyClass);

标准答案:c

知识点器析:重载的运算符应该保持其原有的基本语义。重载的运算符应尽量保持

其原有的特性。运算符的重载应当配套,至少要有一个形式参数是类的类型。

16、石,如卜函数模板定义:templateT1FUN(T2n)(returnn*5.0;}若要求以int型

数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为

A、FUN(9)

B、FUN<9>

C、FUN(9)

D、FUN<9>(double)

标准答案:C

知识点解析:本题中要求返1口1值为double行,那么T1就是double型.T2默认为

int,所以只有C选项正确。

17、下列情况中,不会调用拷贝构造函数的是()。

A、用一个对象去初始化同一类的另一个新对象时

B、将类的一个对象赋值给该类的另一个对象时

C、函数的形参是类的对象,调用函数进行形参和实参结合时

D、函数的返回值是类的对象,函数执行返回调用时

标准答案:B

知识点解析:此题考查的是复制构造函数的概念。用一个已知的对象初始化一个正

在创建的同类对象时,就会发生复制构造函数。因此,选项A、C、D均会调用夏

制构造函数,而只有选项B没有创建的动作,不调用复制构造函数。

18、假定一个类的构造函数为A(intaa,intbb){a=aa--;b=a*bb;),则执行Ax(4,

5);语句后,x.a和x.b的值分别为()。

A、3和15

B、5和4

C、4和20

D、20和5

标准答案:C

知识点解析:因为aa后减,所以a=4:b的值与a、bb相关,b=4*5=20,与aa没

有任何关系。

19、对于一个类定义,编译器可能会自动生成的函数不包括

A、豆制构造函数

B、缺省的构造函数

C、析构函数

D、友元函数

标准答案:D

知识点解析:C++中,对于一个类定义,编译器可能会自动生成的函数有:默认

(缺省)构造函数,复制构造函数,复制运算符,析构函数,答案为D。

20、下列关于C++函数的说明中,正确的是()。

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

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

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

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

标准答案:C

知识点解析:一般函数进行调用时,要将程序执行权转到被调用函数中,然后再返

回到调用它的函数中;而内联函数在调用时,是将调用表达式用内联函数体来替

换,而不是在定义在另一个函数体内,所以A选项错误。函数可以没有返回值,

所以就不需要relurn「,如果被调函数在调用函数之前已经定义,那么就不需要声

明.所以「选项错误.正确选项为D.

21、在面向对象方法中,不属于“对象”基本特点的是()o

A、一致性

B、分类性

C、多态性

D、标识唯一性

标准答案:A

知识点解析:对象有如下一些基本特点:标识唯一性、分类性、多态性、封装性、

模块独立性好。所以选择A)。

22、下列字符串中,不可以用做C++标识符的是()。

A、y_2006

B、_TEST_H

C^Return

D、switch

标准答案:D

知识点解析:本题考查C++标识符的命名规则,其规则有如下几点:①所有标识

符必须由字母、数字或卜.画线组成,且必须由字母或下画线开头;②所有标识符

不能使用C++已有的关犍字;③大、小写字母表示不同意义,即代表不同的标识

符。选项C中虽然return是关键字,但因首字母大、小写不同,也可用于标识符,

但不建议使用。故答案为D。

23有如下程序:#includeusingnamespacestd;classA{public:virtualvoidfuncl()

{cout«"Ar';}voidfunc2(){cout«"A2M;}};classB:publicA{public:voidfuncl()

{cout«"Bl";}voidfunc2(){cout«"B2";));intmain()[A*p=newB;p->funcl();

p->func2();deletep;return0;}执行这个程序的输出结果桌()。

A、B1B2

B、A1A2

C、B1A2

D、A1B2

标准答案:C

知识点解析:本题考查虚函数。虚函数指在基类中声明为virlual并在一个或多个

派生类中被重新定义的成员函数。题中定义了一个派生类对象B,并使用类A的

对象指针指向B,由于基类A中的funcl为虚函数,所以会执行派生类的funci,

输出Bl,而基类中的func2不是虚函数,所以prfunc2()会执行基类的func2,输

出A2。故答案为C。

24、下列有关模板的叙述中,正确的是()。

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

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

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

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

标准答案:B

知识点解析:本题考查函数模板和类模板的基础知识,所以本题答案为B。

25、在线性表的顺序存储结构中,其存储空间连续,各个元素所占的字节数

A、相同,元素的存储顺序与逻辑顺序一致

B、相同,但其元素的存储顺序可以与逻辑顺序不一致

C、不同,但元素的存储顺序与逻辑顺序一致

D、不同,且其元素的存储顺序可以与逻辑顺序不一致

标准答案:A

知识点解析:顺序表具有以下两个基本特征:线性表中所有元素所占的存储空间是

连续的;线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。在顺序表

中,每个元素占有相同的存储单元。A选项正确。

26、有如下函数模板:templateTcast(Uu){returnu;}其功能是将U类型数据转

换为T类型数据。已知i为int型变量,下列对模板函数cast的调用中正确的是

()。

A、cast(i);

B、casto(i);

C、cast(i);

D、cast(i);

标准答案:D

知识点解析:本题考查函数模板的基本运用,属于基础知识。函数模板实际上是建

立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型代表,这

个通用函数就是函数模板。函数模板可以设定默认参数,这样在调用模板函数时就

可以省略实参,函数模板的实例就是一个函数的定义。所以本题答案为D。

27、在C++语言系统中,用于输出数据所使用的标识符coin是

A、类名

B、对象名

C、函数名

D、文件名

标准答案:B

知识点解析:cout是C++预定义的标准输出流对象,答案为B。

28、下列关于C++预定义流对象的叙述中,正确的是()。

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

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

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

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

标准答案:A

知识点解析:cin是C++预定义的标准输入流对象.cout是C++预定义的标准输出

流对象。

29、有如下类定义:classCup{public:voidSetPrice(doubleval){price=val;}

〃常成员函数GetPrice的声明private:doubleprice;};下列函数声

明中,能够作为横线处缺失的常成员函数GetPrice的声明的是

A、constdoubleGetPrice();

B、doubleconstGetPrice();

C、doubleGetPrice()const;

D、doubleGetPrice(const);

标准答案:C

知识点解析:本题考查常成员函数,其定义的一般形式如下:返回值类型常成员

函数名(参数列表)const;所以C选项正确。

30、下列有关类的表述中,正确的是

A、含有虚函数的类不能被实例化

B、派生类不能访问基类的保护成员

C、派生类只能隐含调用基类的构造函数

D、纯虚函数没有函数体

标准答案:D

知识点解析:含有纯虚函数的类不能被实例化,选项A错误;基类的保护成员就

是为了派生类的访问而女计的,选项B错误;派生类构造函数的初始化列表通常

都要显式调用基类的构造函数,选项C错误;当基类中不能为虚函数给出一个有

意义的实现时,将其声明为纯虚函数,所以纯虚函数没有定义函数体,选项D正

确;答案为D。

31、有如下程序#inckideusingnamespacestd;classAA{charc;public:

AA():c('X'){}AA(charch):c(ch){}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论