您当前位置: 唯学网 » 计算机等级考试培训 » 备考试题专题 »

计算机二级考试C++考前测试题及答案(4)

计算机二级考试C++考前测试题及答案(4)

唯学网 • 教育培训

2016-7-4 13:44

计算机等级

唯学网 • 中国教育电子商务平台

加入收藏

31有如下程序:

#inClude using namespaCe std: Class CD{

publiC:

~CD(){Cout<<’C’:} private:

Char name[80]; };

int main(){

CD a,*b,d[2]; return 0;

执行这个程序的输出结果是( )。

A.CCCCB.CCCC.CCD.C

参考答案:B

参考解析:本题考查类的析构函数.题目中定义了类的一个对象a,对象指针*b,对象数组d[2],当程序执行完后,析构函数执行了3次,输出“CCC”,对象指针不会执行析构函数。所以本题答案为8。

32类的析构函数是在( )调用的。

A.类创建时B.创建对象时C.删除对象时D.不自动调用

参考答案:C

参考解析:析构函数可以被函数调用,也可以被系统调用:函数体内的对象在函数结束时调用析构函数和使用delete释放对象所占用的资源。

33下列关于多态性的描述,错误的是( )。

A.c++语言中的多态性分为编译时的多态性和运行时的多态性

B.编译时的多态性可通过函数重载实现

C.运行时的多态性可通过模板和虚函数实现

D.实现运行时多态性的机制称为动态绑定

参考答案:C

参考解析:编译时的多态性是通过函数重载和模板体实现的,运行时的多态性是通过虚函数体实现的。

34下列有关类成员的叙述中,正确的是( )。

A.友元函数是类的成员函数

B.类成员的默认访问权限是私有的

C.类成员函数必须声明为公有的

D.类的静态数据成员不能是常成员

参考答案:B

参考解析:友元函数是指某些虽然不是类成员却能访问类的所有成员的函数,故友元函数不足类的成员函数。类成员的默认访问权限是私有的,类的成员函数¨r以是3种权限中的一种,静态数据成员可以为常成员。故本题答案为8。

35有如下程序:

#inClude

using namespaCe std; ClaSS A{

publiC:

A(int i){x=i;}

void dispa(  ){Cout<

int x; };

Class B:publiC A{ publiC:

B(int i):A(i+10){x=i;}

vold dispb(  ){dispa(  );Cout<

int x; };

int main(  )} B b(2); b.dispb(  );

return 0; }

执行这个程序的输出结果是(  )。

A.10,2B.12,10C.12,2D.2,2

参考答案:C

参考解析:本题考查派生类的构造函数和基类的构造函数。本题中类B继承类A,定义了·个类B的对象并初始化b(2),此时会执行类B的构造函数,执行的结果是继承类A中的私有成员赋值了12,给类B自身的数据成员x赋值了2,执行b.dispb()后,输出类A的私有成员x,输出类B自身的数据成员,所以答案为C。

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

for(int i=50;i>1;i一=2) tout<<’*’:

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

参考答案:B

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

37有如下类定义:

Class AA{ int a: PubliC: AA(int n=O):a(n){}

};

Class BB:publiC AA{ publiC:

BB(int n)

};

其中横线处的缺失部分是(  )。

A.:a(n){}B.:AA(n){}C.{a(n);}D.{a=n;}

参考答案:B

参考解析:本题考查公用继承对基类成员的访问属性。公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有,本题中若要给派生类继承下来基类的私有成员赋值,那么只能调用基类的成员函数来对它赋值,成员变量默认的访问权限为私有,即a为私有变量。所以本题答案为B。

38判断char型变量c是否为小写字母的正确表达式是( )。

A.’a’<=c<=’z’B.(c>=A.&&(c<=z)C.(’a’>=C.||(’z’<=C.D.(c>=’a’)&&(c<=,z,)

参考答案:D

参考解析:字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母A~z是从65~90,小写字母a~z是从97~122。所以只要变量c大于等于a并月小于等于z就能保证其为小写字母。

39决定c++语言中函数的返回值类型的是( )。

A.return语句中的表达式类型

B.调用该函数时系统随机产生的类型

C.调用该函数时的主调用函数类型

D.在定义该函数时所指定的数据类型

参考答案:D

参考解析:c++语言中,在定义该函数时所指定的数据类璎决定函数的返回值类型。

40设int a=1,b=2;,则(a++)+b和a+++b这两个表达式的值分别为( )。

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

参考答案:A

参考解析:单目的++运算优先级高于双目的+运算,不过++的结合性是自右向左的,而+是自左向右的,所以上面的两个表达式都是先计算a+b的值之后,a再自加1。

41请使用VC6或使用【答题】菜单打开考生文件夹projl下的工程projl。程序中位于每个“//ERROR****found料****之后的一行语句有错误,请加以改正。改正后程序的输出结果应为:

Name:Smith Age:21 ID:99999 CourseNum:12

Record:970

注意:只修改每个“//ERROR****found****”下的那一行,不要改动程序中的其他内容。

#include

using namespace std;

class Studentlnfo

{

protected:

//ERROR********************found****************

char Name;

int Age;

int ID:

int CourseNum;

float Record;

public:

Studentlnfo(char*name,int Age,int ID,int coumeNum,float record);

//ERROR ********************found********************

void~Studentlnfo(){}

float AverageRecord(){

return Record/CourseNum;

}

void show()const{

cout<<”Name:”<

<<”CourseNum:”<

}

};

//ERROR ******************found**************

StudentInfo StudentInfo(char*Name,int Age,int ID,int CourseNum,float Record)

{

Name=name;

Age=age;

this一>ID=ID:

CourseNum=courseNum:

Record=record;

}

int main()

{

Studentlnfo st(’’Smith”,21,99999,12,970);

st.show();

return 0;

}

参考解析:

(1)char*Name;

(2)~Studentlnfo(){}

(3)Studentlnf0::Studentlnfo(char*name,int age,,int ID,int eourseNum,float record)

三、简单应用题(24分)

42请使用VC6或使用【答题】菜单打开考生文件夹proj2下的工程proj2,其中定义了vehiele类,并派生出motorcar类和bicycle类。然后以motorcar和bicycle作为基类,再派生出motorcycle类。要求将Vehicle作为虚基类,避免二义性问题。请在程序中的横线处填写适当的代码并删除横线,以实现上述类定义。此程序的正确输出结果应为:

80

150

100

1

注意:只能在横线处填写适当的代码,不要改动程序中的其他内容,也不要删除或移动“//****found****”。

#include

class vehicle

{

private:

int MaxSpeed;

int Weight;

public:

//*************found************

vehicle(int maxspeed,int weight):——

~vehicle(){};

int getMaxSpeed(){return MaxSpeed;}

int getWeight(){retum Weight;}

};

//****************found************

class bicycle:——public vehicle

{

private:

int Height;

public:

bicycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),Height(height){}

int getHeight(){retum Height;};

};

//*******************found**************

class motorcar:——public vehicle

{

private:

int SeatNum;

public:

motorcar(int maxspeed。int weight,int seatnum):vehicle(maxspeed,weight),SeatNum(seatnum){}

int getSeatNum(){return SeatNum;};

};

//*****************found***************

class motorcycle:——

{

public:

motorcycle(int maxspeed,int weight,int height):vehicle(maxspeed,weight),bicycle(maxspeed,weight,

height),motorcar(maxspeed,weight,1){}

};

void main()

{

motorcycle a(80,150,100);

cout<

cout<

cout<

cout<

}

参考解析:

(1)MaxSpeed(maxspeed),Weight(weight){f;

(2)virtual

(3)virtua1

(4)public bicycle,public motorcar

四、综合应用题(18分)

43请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程文件proj3。本题创建一个小型字符串类,字符串长度不超过l00。程序文件包括pmj3.h、proj3.cpp、writeToFile.obj。补充完成重载赋值运算符函数,完成深复制功能。

屏幕上输出的正确结果应该是:

Hello!

Happy new year!

补充编制的内容写在“//**********333**********”与“//**********666**********”两行之间。

不得修改程序的其他部分。

注意:

程序最后调用writeToFil。函数,使用另一组不同的测试数据,将不同的运行结果输出到文件0ut•dat中。

输出函数writeToFile已经编译为obj文件。

//proj3.h

#include

#include

using namespace std;

class MiniString

{

pubhc:

friend。8tream&operator<<(oatream&output,const MiniString&s)//重载流插入运算符

{ output<

friend istream&operator>>(istream&input,MiniString&8)//重载流提取运算符

{ char temp[100];//用于输入的临时数组

temp[0]=’\0’://初始为空字符串

input>>setw(100)>>temp;

int inLen=strlen(temp);//输入字符串长度

if(inLen!=0)

}

s.1ength=inLen;//赋长度

if(s.sPtr!=0)delete[]s.sPtr;//避免内存泄漏

s.sPtr=Hew char[s.1ength+1];

strcpy(s.sPtr,temp);//如果8不是空指针,则复制内容

}

else s.sPtr[0]=’\0’;//如果s是空指针,则为空字符串

retum input;

}

void modString(const char}string2)//更改字符串内容

{

if(strin92 1=0)//如果strin92不是空指针,则复制内容

{

if(strlen(strin92)!=length)

{

length=strlen(strin92);

delete[]sPtr;

sPtr=new char[1ength+1];//分配内存

}

strcpy(sPtr,strin92);

}

else sPtr[0]=’\0’;//如果string2是空指针,则为空字符串

}

MiniString&operator=f const MiniString&otherString);

MiniString(corot char*s=""):lengtll((s!=0)?strlen(s):0)//构造函数

{

sPtT=0:

if(1ength[=0)

setString(S);

}

~MiniString()//析构函数

{delete[]sPtr;}

private:

int length;//字符串长度

char*sPtr;//指向字符串起始位置

void setString(const char*string2)//辅助函数

{

sPtr=Dew char[str|en(string2)+1];//分配内存

if(stnIl92!=0)strcpy(sPtr,string2);//如果string2不是空指针,则复制内容

else slur[0]='\0';//如果string2是空指针,则为空字符串

}

};

//pwj3.cpp

#'include

#include

using namespace std;

#include”proj3.h”

MiniString&MiniStrin9::0perator=(const MiniString&otherString)

{//重载赋值运算符函数。提示:可以调用辅助函数setString

//*************333**********

//*************666**********

}

int main()

{

MiniSu'ing strl(”Heuo!”),str2;

void writeToFile(const char*);

sir2=strl;//使用重载的赋值运算符

str2.modString("Happy new year!");

cout<

cout<

writeToFile("");

return 0;

}

参考解析:

length=otherString.1ength; //把对象字符串0therString的长度赋值给变量length setString(otherString.sPtr); //调用函数setstring,实现给类变量sptr分配空间,以及逐个把对象0therstring字符串的值复制到sptr中 return}this: //返回被赋值的对象

以上内容是关于2016年计算机二级考试C++考前测试题及答案的介绍,由唯学网计算机等级考试栏目小编提供,因此考生如若获知更多关于考试资讯、复习指导等内容,请随时关注唯学网,小编会在第一时间为考生发布相关的报道。

0% (0)
0% (10)
已有条评论