2021年云南省保山市全国计算机等级考试C++语言程序设计真题(含答案)_第1页
2021年云南省保山市全国计算机等级考试C++语言程序设计真题(含答案)_第2页
2021年云南省保山市全国计算机等级考试C++语言程序设计真题(含答案)_第3页
2021年云南省保山市全国计算机等级考试C++语言程序设计真题(含答案)_第4页
2021年云南省保山市全国计算机等级考试C++语言程序设计真题(含答案)_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

2021年云南省保山市全国计算机等级考试

C++语言程序设计真题(含答案)

学校:班级:姓名:考号:

一、1.选择题(10题)

1.下列关于类和对象的叙述中,错误的是()o

A.一个类只能有一个对象B.对象是类的具体实例C.类是对某一类对

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

2.下列不是描述类的成员函数的是()

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

3.对于一个类定义,下列叙述中错误的是

A.如果没有定义拷贝构造函数,编译器将生成一个拷贝构造函数。

B.如果没有定义缺省的构造函数,编译器将一定生成一个缺省的构造函

数。

C.如果没有定义构造函数,编译器将生成一个缺省的构造函数和一个拷

贝构造函数。

D.如果已经定义了构造函数和拷贝构造函数,编译器不会生成任何构造

函数。

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

A.在面向对象的程序设计中,各个对象之间具有密切的关系

B.在面向对象的程序设计中,各个对象都是公用的

C.在面向对象的程序设计中,各个对象之间相对独立,相互依赖性小

D.上述三种说法都不对

5.算法的时间复杂度是指o

A.执行算法程序所需要的时间B.算法程序的长度C.算法执行过程中

所需要的基本运算次数D.算法程序中的指令条数

6.下面关于虚函数的描述中正确的是

A.虚函数是一个静态成员函数

B.虚函数是一个非成员函数

C.虚函数既可以在函数说明时定义,也可以在函数实现时定义

D.派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型

7.下列关于虚函数的描述中,正确的是()。

A.虚函数是一个static类型的成员函数

B.虚函数是一个非成员函数

C.基类中采用virtual说明一个虚函数后,派生类中定义相同原型的函数

时可不必加virtual说明

D.派生类中的虚函数与基类中相同原型的虚函数具有不同的参数个数

或类型

8.关于虚函数下面说的正确的是()。

A.若在重定义虚函数时使用了virtual,则该重定义函数还是虚函数

B.虚函数不能声明为友元

C.子类必须重定义父类的虚函数

D.虚函数不能是static的

9.有如下程序:#nclude<iostream>usingnamespacestd;class

Base{public:voidfun1(){cout<<"Base\n";}virtualvoidfun2(){cout

<<"Base\n";}};classDerived:publicBase{public:voidfun1(){cout<

<"Derived\n";}voidfun2(){cout<<"Derived\n";}}voidf(Base&b)

{B.fun1();B.fun2();}intmain(){Derivedobj;f(obj);return0;}

A.BaseBaseB.BaseDerivedC.DerivedBaseD.DerivedDerived

10.有下列二叉树,对此二叉树中序遍历的结果为

A.BDYEACFXZB.DYBEAFCZXC.ABCDEFXYZD.ABDYECFXZ

二、单选题(13题)

11.某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度

为(假设根结点在第1层)()o

A.3B.4C.6D.7

12.C++程序执行总是从【】开始的。

A.main函数B.第一行C.头文件D.函数注释

13.下列排序方法中,最坏情况下比较次数最少的是

A.冒泡排序B.简单选择排序C.直接插入排序D.堆排序

14.

24.有以下程序:

voidfun(inta»a,inti«intj)

{int

fun(a,++i,-----j)»

}

)

mainO

{inta[]={l,2,3,4,5,6},i?

fun(a«0«5);

for(i=0;i<6;i+4-)

cout<<a[i]t

执行后输出结果是(

A.654321B.432156

C.456123D.123456

15.下列运算符函数中肯定不属于类FunNumber的成员函数的是()。

A.intoperator—(FunNumber);

B.FunNumberoperator一;

C.FunNumberoperator—(int);

D.intoperator—(FunNumber,FunNumber);

16.必须用一对大括号括起来的程序段是

A.switch语句中的case标号语句。B.if语句的分支。C.循环语句的循

环体。D.函数的函数体。

17.有下列程序:

#include<stdiO.h>

voidf(int*P,int*q);

voidmain()

(intm=1,n=2,*r=&m;

f(r,&n);printf("%d,%d",m,n);

)

voidf(int*P,int*q)

{p=p+l;*q=*q+l;}

程序运行后的输出结果是()oA.l,3B.2,3C.l,4D.1,2

18.有如下程序:

#include<iostream>

usingnamespacestd;

classBook{

public:

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

private:

chartitle[40];

};

classNovel:publicBook{

public:

Novel(charBook(t){}

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

);

intmain(){

Book*pb;

pb=newNovel();

cout«pb->Category();

return0;

)

若程序运行时输出结果是“文学”,则划线处缺失的语句是

A.char*Category();

B.char*Category()const;

C.virtualchar*Category()const;

D.virtualchar*Category()const=0;

19.如果表达式“-x/y”中的”和“/”是作为友元函数重载的运算符,采

用运算符函数调用格式,该表达式还可以表示为()o

A.operator/(X.operator—(),y);

B.operator/(operator—(x),y);

C.X.operator—().operator/(y);

D.y.operator/operator—(x));

20.数据视图的描述称为()。

A.A.外模式B.内模式C.概念模式D.存储模式

21.下面有关this指针的叙述中,正确的是()。

A.类的成员函数都有this指针

B.任何与类相关的函数都有this指针

C.类的非静态成员函数才有this指针

D.类的友元函数都有this指针

22.有如下程序:

#include<iostream>

usingnamespacestd;

classMyClass{

public:

MyClass(intx):val(x){}

voidPrint()const{cout«"const:val="«<val«\t;}

voidPrint(){cout«"val="«val«t;}

private:

intval;

};

intmain(){

constMyClassobj1(10);

MyClassobj2(20);

objl.Print();

obj2.Print();

returnO;

)

程序的输出结果是()0A.val=10const:val=20

B.const:val=10const:val=20

C.const:val=10val=20

D.val=lOva1=20

23.下列关于虚函数的说明中,正确的是()。

A.从虚基类继承的函数都是虚函数

B.虚函数不得是静态成员函数

C.只能通过指针或引用调用虚函数

D.抽象类中的成员函数都是虚函数

三、2.填空题(12题)

24.程序的输出结果是【】。

#include<iostream>

usingnamespacestd;

classA{

intx;

public:

A(intx=l):x(x){cout<<x;)

};

voidmain(){

Aa,b(2),c(3);

)

25.数据库管理系统常见的数据模型有层次模型、网状模型和3

种。

26.【】是在进行了成功的测试之后才开始的。它与软件测试不同,测

试的目的是发现错误,进一步诊断和改正错误,则是调试的任务。

27.C++语言中的多态性是在编译时通过____和模板体现的,在运行

时是通过_____体现的。

28.类是一个支持集成的抽象数据类型,而对象是类的【】。

29.C++语言的参数传递机制包括传值和传地址两种,如果调用函数时,

需要改变实参或者返回多个值,应该采取【】方式。

30.下列程序的输出结果是【】。

#include<iostream.h>

#include<string.h>

voidmain(){

charb[30];

strcpy(&b[0],"XY");

strcpy(&b[l],"YZW");

strcpy(&b[2],"ZXY");

cout<<b<<endl;

)

31.软件是程序、数据和的集合。

32.一个类中有个析构函数。

33.软件生存周期包括软件定义、【】、软件使用和维护三个阶段。

34.一棵二叉树第六层(根结点为第一层)的结点数最多为【】个。

35.内联函数是通过【】来实现的,因此内联函数是真正的函数。

四、程序改错题(10题)

36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

注意:错误的语句在//******error******的下面,修改该语句即可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

-TC;

);

II******enor******

TC:TC

(

cout«"Constructor"«",";

i=0;

)

!1******enol******

TC:display

tout«"i="«i<<","«endl;

TC:TC

COUI«"Destructor"«endl:

voidmain

(

TCa;

a.display;

)

37.使用VC++6.0打开考生文件夹下的源程序文件1.叩p,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

0

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h)

intmain

throw("error");

II********enor********

catch(chars)

cout«s«endl;

)

try

(

throw((int)0);

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

catch

(

cout«"ERROR"«endl;

)

retumO;

38.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******errc)r******的下面。

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

}

II********error*********

catch(chars)

(

cout«s«endl;

)

try

{

throw((int)0);

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

II***************

catch

(

cout«"ERROR"«endl;

)

retumO;

)

39.使用VC++6.。打开考生文件夹下的源程序文件I.cpp,该程序运

行有问题,请改正main函数中的错误,使程序的输出结果为:

number=1

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******errc)r******的下面。

试题程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

retumnumber;

)

voidPrintconst

{

cout<<"number="«number«endl;

)

private:

intnumber;

);

voidmain

(

II********error********

TCobjl;

objl.Print;

TCobj2(3);

II********error********

objl.number=10;

Ii********error*%o******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

40.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要

求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输

入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕

中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

//********error********

cin.getline(str,120);

1I********error********

while(str)

(

II********error********

if(str[i])=a)

str[i]=str[i]-a+A;

i++;

)

cout«str«endl;

return;

)

41.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错。请改正程序中的错误,使程序输出的结果为

100

37

32

注意:错误的语句在//******errc)r******的下面,修改该语句即

可。

试题程序:

#include<iostream.h>

/*1**1*4,*4**.1*

//小不不不小不prrcr不不不不不不

voidmain

/*!**1**1**1**1**1**.1**1*«£«

//小个个个不不prmr不不不不不不

intm=0142:

/*!«**!•、,,、,,*1*、,,*1*

//个不不不不不prmr个不不不不不

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序

要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可

能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出

到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在//******errc)r******的下面。

试题程序:

#include<iostream.h>

voidmain

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

II********enor********

cin.getline(str,120);

II********enor********

while(str)

II********error********

if(str[i])=a)

str[i]=str[i]-a+A;

i++;

cout«str«endl;

return;

)

43.使用VC++6.0打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现

的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

I!******error******-jx'p^~|

试题程序:

#include<iostream>

#include<fstream>

!1********error********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

II********error********

outl.open("l.txt",binarylapp);

for(inti=0;s[i]!=0;i++)

!1********enor********

outl.puts(s[i]);

)

outl.close;

)

voidClearFile

(

ofstreamoutl;

outl.open("l.txt");

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

retumO;

}

44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错误,请改正程序中的错误,使得程序输出:

9,8,7,6,5

注意:错误的语句在/********error********/的下面,修改该语句即

可。其他的语句不能修改。

试题程序:

#include(iostream.h>

classTC

(

I********error********/

TC(inti)

(

m_i=i;

)

voidprint

cout«—m_i«,

public:

intm_i;

);

intmain

I********error********/

inti;

TC04(10);

while(i>5)

(

I**************

i++:

04.print;

)

cout«endl;

returnO;

45.使用VC++6.0打开考生文件夹下的源程序文件

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实

现的功能为从键盘输入一个字符串,并将结果保存到文件Ltxt中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结

构,错误的语句在

I!******ei*ror******白勺~|>*]什j°

试题程序:

#include<iostream>

#include<fstream>

II********error********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

outl.open("l.txt",binary|app);

for(inti=0;s[i]!=0;i++)

(

II********error********

outl.puts(s[i]);

}

outl.close;

)

voidClearFile

(

ofstreamoutl;

outl.open("l.txt");

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

returnO;

)

五、综合应用题(2题)

46.使用VC++6.。打开考生文件夹下的源程序文件3.cpp,其中定

义了类BA、PA1和PA2,其中PA1类由BA类公有派生,PA2类由

PA1类公有派生。上述3个类的定义并不完整,请按要求完成下列操

作,将程序补充完整。

程序输出结果如下:

10

5

1057

(1)定义类BA的构造函数,该构造函数有一个整型的参数m,在构造

函数中将m赋值给数据成员a。请在注释1之后添加适当的语句。

(2)定义类PA1的构造函数,该构造函数有两个整型的参数m和n,在

构造函数中将m赋值给数据成员b,将n作为基类BA构造函数的参

数值传人。请在注释2之后添加适当的语句。

(3)定义类PA2的构造函数,该构造函数有3个整型的参数m、n和

k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类

PA1构造函数的参数m和n。请在注释3之后添加适当的语句。

(4)完成类PA2的成员函数show的定义,该函数调用基类成员函数,

输出基类私有成员a、b及类PA2自身的数据成员C的值,上述3个

值在输出时用空格隔开。请在注释4之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

试题程序:

#include(iostream.h>

classBA

(

inta;

public:

intgeta{returna;}

};

classPAl:publicBA

{

intb;

public:

///小*1*军*1*不*1*不*1*木*1木*不*1*不*!*2木*1**木1•*1不**1*/*木1**!木•*1*木*1*

intgetb{retumb;}

};

classPA2:publicPAl

(

intC;

public:

voidshow

(

//********4********

)

};

voidmain

{

PA2a(7,5,10);

cout«a.geta«endl;

cout«a.getb«endl;

a.show;

)

47.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件

proj3,此工程中包含一个源程序文件proj3.cpp,补充编制c++程序

proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存

放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并

输出到文件out.dat中。文件in.dat的长度不大于1000字节。

要求:

补充编制的内容写在“〃***********与''//**********''两行之间。实现

将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得

修改程序的其他部分。

注意:程序最后已将结果输出到文件Out.dat中,输出函数

writeToFile已经给出并且调用。

//proj3.cpp

#include<iostream>

#include<fstream>

#include<catting>

usingnamespacestd;

classdoc

(

private:

char*sir;//文本字符串首地址

intlength;〃文本字符个数

public:

//构造函数,读取文件内容,用于初始化新对象,filename是文件名字

符串首地址

doc(char*filename);

voidreverse;//将字符序列反转

一doc;

voidwriteToFile(char*filename);

);

doc::doc(char}filename)

(

ifstreammyFile(filename);

intlen=1001,tmp;

atr=newcharflen];

length=O;

while((trap=myFile.get)!=EOF)

strflength++]=trap;

str[length]=t\O,;

myFile.close;

)

voiddoc::reverse{

//将数组atr中的length个字符中的第一个字符与最后一个字符交换,

第二个字符与倒数第二个

〃字符交换

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

)

doc::〜doe

(

delete[]str;

)

voiddoc::writeToFile(char*filename)

(

OfstreamoutFile(filename);

outFile«str;

outFile.close;

)

voidmain

docmyDoc(,,in.dat'>

myDoc.reveme;

myDoc.writeToFile("out.dat");

}

六、3.综合应用题(2题)

48.使用VC6打开考生文件夹下的工程test34_3o此工程包含一个

test34_3.cpp,其中定义了表示栈的类stack。源程序中stack类的定义并

不完整,请按要求完成下列操作,将程序补充完整。

⑴定义类stack的私有数据成员sp和size,它们分别为整型的指针和变

量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元

素的下标值。请在注释“〃**1**”之后添加适当的语句。

⑵完成类stack的构造函数,该函数首先从动态存储空间分配含有100

个元素的加型数组,并把该数组的首元素地址赋给指针sp,然后将该

数组的所有元素赋值为0,并将size赋值为-l(size等于-1表示栈为空)。

请在注释“〃**2**”之后添加适当的语句。

(3)完成类stack的成员函数push的定义。该函数将传入的整型参数x压

入栈中,即在size小于数组的最大下标情况下,size自力口1,再给x赋

值。请在注释“〃**3**”之后添加适当的语句。

⑷完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即

在size不等于-1的情况下,返回数组中下标为size的元素的值,并将

size减1。请在注释“〃**4**”之后添加适当的语句。

程序输出结果如下:

thetopelem:1

thepopelem:1

thestackisempty

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test34_3.cpp清单如下:

#include<iostream.h>

classstack

(

〃**]**

public:

stack();

boolempty(){returnsize=="l;}

boolfull(){returnsize==99;}

voidpush(intx);

voidpop();

voidtop();

);

stack::stack()

(

〃**2**

for(inti=0;i<100;i++)

*(sp+i)=0;

size=-1;

)

voidstack::push(intx)

{

〃**3**

cout<<"thestackisfull"<<endl;

else

{

size++;

*(sp+size)=x;

)

voidstack::pop()

{

〃**4**

cout<<"thestackisempty"<<endl;

else

(

cout<<"thepopelem:"<<*(sp+size)<<endl;

size—;

)

)

voidstack::top()

(

ifiemptyO)

cout<<"thestackisempty"<<endl;

else

(

cout<<"thetopelem:"<<*(sp+size)<<endl;

)

)

voidmain()

(

stacks;

s.push(l);

s.top();

s.popO;

s.top();

)

49.使用VC6打开考生文件夹下的工程testl3_3o此工程包含一个

testl3_.cpp,其中定义了类Vector,但类的定义并不完整。请按要求完成

下列操作,将程序补充完整。

⑴完成构造函数的定义,把数据成员size初始化为参数s的值,数据成

员buffer指向动态申请的int型size大小的空间。请在注释“〃**1***之

后添加适当的语句。

⑵完成拷贝构造函数的定义,注意解决多次删除的问题。请在注释

“〃**2**,,之后添加适当的语句。

⑶完成成员函数elem的定义,该函数返回buffer的第ndx个元素的值,

注意如果ndx超界,请输出“errorinindex”。请在注释“〃**3**”之后添加

适当的语句。

(4)完成析构函数的定义,要求先将字符d打印在屏幕上,再释放buffer

指向的空间。请在注释“〃**4**”之后添加适当的语句。

输出结果如下:

123456789101234567891Odd

注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。

源程序文件testl3_3清单如下:

#include<iostream.h>

#include<stdlib.h>

classVector

(

public:

Vector(ints=100);

Vector(Vector&v);

int&elem(intndx);

voiddisplayO;

voidset();

~Vector();

protected:

intsize;

int*buffer;

);

Vector::Vector(ints)

<

、****

u

Vector::Vector(Vector&v)

(

〃**2**

i+

*(buffer+i)=*(v.buffer+i);

int&Vector::elem(intndx)

(

**3**

f

1<

cout<<errorinindex<<end!;

exit(1);

)

returnbuffer[ndx];

)

voidVector::displayO

(

for(intj=0;j<size;j++)

cout<<elem(i)<<endl;

)

voidVector::set()

for(intj=0;i<size;j++)

elem(j)=j+l;

)

Vector::~Vector()

{

〃**4**

)

voidmain()

(

Vectora(10);

Vectorb(a);

a.set();

b.set();

a.displayO;

b.displayO;

)

参考答案

LA解析:此题考查的是类和对象的相关概念。类是将不同的数据和与

这些数据相关的操作封装起来装在一起的集合体。对象是类的具体实例,

也即类是对某一类对象的抽象,类和对象之间可以说是数据类型与变量

的关系。一个类可以有无数个对象。

2.C

3.B

解析:本题考查的知识点是:构造函数。如果一个类中没有定义任何

构造函数,编译器将生成一个不带参数的公有缺省构造函数。但只要

定义了一个任意的构造函数,就不会生成缺省构造函数了。故本题应

该选择Bo

4.CCO【解析】面向对象的程序设计是用对象模拟问题领域中的实体,

各对象之间相对独立,相互依赖性小,通过消息来实现对象之间的相互

联系。

5.C解析:算法的时间复杂度实际上就是执行算法程序所需要的计算工

作量。为了客观地反映算法性能,在度量算法的时间复杂度时,应该与

编写算法程序所使用的程序设计语言、执行算法程序时所使用的计算的

工具以及程序员的水平无关。选项A错误,因为同一算法程序在运行速

度不同的计算机上运行时,其计算时间是不同的。选项B错误,因为算

法所编写的程序长度往往与程序设计语言以及程序员的水平有关,同一

个算法,用不同的程序设计语言或者不同的程序员所编写出的程序其长

度可能会大不相同。选项D错误,因为根据一个算法所编制出的程序之

中,其指令条数往往与程序设计语言以及程序员的水平有关,不能用算

法程序中的指令条数来度量算法的时间复杂度。所以,本题正确答案为

Co

6.D解析:本题考核虚函数的定义。虚函数是非静态的成员函数。它不

能是友元函数,但可以在另一个类中被声明为友元函数。虚函数声明只

能出现在类定义的函数原型声明中,而不能在成员函数的函数体实现的

地方。派生类的虚函数与基类中对应的虚函数必须满足下列条件,否则

派生类中的虚函数将丢失其虚函数特性,在调用时进行静态联编:①派

生类中的虚函数与基类中的虚函数具有相同的名称。②派生类中的虚函

数与基类中的虚函数具有相同的参数个数和相同的对应参数类型。③派

生类中的虚函数与基类中的虚函数的返回值,或者相同,或者都返回指

针或引用。并且派生类中虚函数所返回的指针或引用的基类型,是基类

型中的虚函数所返回的指针或引用的基类型的子类型。

7.C解析:本题考核对虚函数的了解。在成员函数声明的前面加上virtual

关键字修饰,即把该函数声明为虚函数。虚函数可以是另一个类的友元

函数,但不是静态成员函数。所以A、B选项的描述都是错误。在派生

类中可以重新定义从基类继承下来的虚函数,在派生类中重定义虚函数

时,函数名、形参表和返回值类型必须保持不变,所以D选项是错误的。

8.D解析:虚函数一定不能定义为静态的。虚函数可以声明为友元,子

类也不是必须重定义父类的虚函数,若在重定义虚函数时使用了virtual,

则该重定义函数不一定还是虚函数。

9.B

10.B对二叉树的中序遍历是指:首先遍历左子树,然后访问根结点,最

后遍历右子树。在遍历左、右子树时,注意依旧按照“左子树一根结点一

右子树”的顺序。本题的遍历顺序是这样的:①首先访问左予树:BDEY;

②在左子树BDEY中,也按中序遍历,先访问左子树DY;在左子树DY

中,也按中序遍历,先访问左子树,左子树没有,则访问根结点D,然

后访问右子树Y;③接着访问根B,再访问右子树E;④访问左子树

BDEY后,接着访问根结点A,接着访问右子树CFXZ;⑤右子树CFXZ

的访问顺序同理可得:FCZXO

11.DD【解析】根据二叉树的基本性质3:在任意一棵二叉树中,多为0

的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1-

1=0个,所以可以知道本题目中的二又树的每一个结点都有一个分支,

所以共7个结点共7层,即度为7。

12.A

13.D冒泡排序、简单插入排序与简单选择排序法在最坏情况下均需要比

较n(n-l)/2次,而堆排序在最坏情况下需要比较的次数是nlog2n。故答

案为D选项。

14.A

15.D

本题考查运算符重载的一些规则:①一般情况下,单目运算符最好重

载为类的成员函数,双目运算符则最好重载为类的友元函数;②双目

运算符=、、小-〉不能重载为类的友元函数;③类型转换函数只能定

义为一个类的成员函数,而不能定义为类的友元函数;④若一个运算

符的操作需要修改对象的状态,选择重载为成员函数较好;⑤若运算

符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选

用友元函数;⑥当运算符函数是一个成员函数时,最左边的操作数(或

者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对

象的引用);如果左边的操作数必须是一个不同类的对象,或者是一个

内部类型的对象,该运算符函数必须作为一个友元函数来实现。所以

答案为D。

16.D

解析:本题考查的知识点是;语句块和函数。if语句的分支和循环语

句的循环体可以是一条语句也可以是一个语句块,所以不是必须用一

对大括号括起来;switch语句中的case标号语句可以是一系列语句,

也可以包含语句块,也不是必须用一对大括号括起来:函数的函数体

必须使用一对大括号括起来。故本题应该选择D。

17.A

Ao【解析】本题中子函数f(int*p,*q)的功能是对指针p的值加1,

*q的值加1。主函数中调用子函数f(r,&n)时,子函数的执行结果是r

值加1,n的值加1。而m的值并没有发生变化,最后程序输出的结果

为1,3。所以正确答案为选项A。

18.D

本题考查虚函数的定义。

19.B

Bo【解析】本题考查运算符的重载。假定已经作为某个类的成员函数

重载了二元运算符+,且cl、c2都是该类的对象,则“cl.operator+

(c2)”,与“cl+c2”含义相同。如果+作为该类的非成员函数重载,则

“operator+(cl,c2)"与“cl+c2”含义相同。同理,运算符"/”作为友元

函数重载,则"(-x)/y”与表达式“operator/((-X),y)”相同。前缀运算

符“-"作为友元函数重载,则”--X与operator--(x)”相同,所以组合起来

是"Operator/(operator--(x),y);”,即B选项。

20.A解析:外模式也称子模式,它是数据库用户能够看见和使用的局

部数据的逻辑结构和特征的描述,它是由概念模式推导而出来的,是数

据库用户的数据视图,是与某一应用有关的数据的逻辑表示。

21.C

22.D

Do【解析•】在建立类对象时,构造函数的执行顺序如下:执行基类的

构造函数,调用顺序按照各个基类被继承的声明顺序;执行成员对象

的构造函数,调用顺序按照各个成员在类中的声明顺序;执行自身的

构造函数。根据以上总结以及题意可知答案选择D选项。

23.B

在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员

函数一虚函数必须是基类的非静态成员函数,其访问权限可以是

protected或public。如果一个类包含了纯虚函数,称此类为抽象类。所

以本题答案为B。

24.123123解析:a对象使用和默认的构造函数,b对象使用2来初始化

对象c对象使用3来初始化对象,输出相应的值后,结果变为123。

25.关系模型关系模型

26.程序调试程序调试解析:本题考查软件测试和软件调试的区别。软

件测试贯穿整个软件生命期,它是尽可能的发现软件中的错误。软件调

试主要在开发阶段,它是在测试成功后开始,诊断和改正程序中潜在的

错误。

27.函数重载;虚函数函数重载;虚函数解析:C++中的多态性是在编

译时通过函数重载和模板体现的,在运行时是通过虚函数体现的。

28.实例实例解析:将属性、操作相似的对象归为类,也就是说,类是

具有共同属性、共同方法的对象的集合。所以,类是对象的抽象,对象

则是其对应类的一个实例。

29.传地址传地址解析:本题考查的是传值调用和传址调用的区别——

传值调用只是进行值的简单复制,返回之后不会改变原来的值;而传址

调用是把参数的地址传入,会改变原来的值。

30.XYZXY

31.相关文档相关文档

32.1

33.软件开发软件开发

34.3232解析:二叉树第n层的结点数为2的n-1次方。

35.编译器编译器解析:内联函数是通过编译器,只是在调用的时候,

像宏一样展开。注意:内联函数比普通函数的效率更高。

36.⑴应改为“TC::TC”。

\n⑵应改为"voidTC::display”。

\n(3)应改为“TC::〜TC”。

\n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名

和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使

用格式为“(类名)::<成员函数>((参数函数)),因此第1处应改为“TC::

TC”,默认构造函数没有参数。由第2处“TC=display”后的语句看,这

是在类外实现TC函数,因此也有作用域运算符使用错误问题,display

函数返回值为void,因此第2处的语句应改为“voidTC::display"。由第

3处的语句叮(2::丁€:”可知,显然这里是在类外实现析构函数,析构函

数是一个特殊的函数,它的名称和类名相同,并在前面加“字符,用

采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

37.(1)应改为"catch(char*s)”。

⑵应改为“cateh(inti)”。

(3)应改为"catch(…)”。

【解析】本题中第1个标识前的异常抛出语句为“throw("error");",其

中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类

型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语

句修改为“catch(char*S)”°第2个标识前的异常抛出语句为

44throw((int)0);",其中的类型为int。对应的异常捕捉语句catch中应

该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配

的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处

的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类

型,那么就用删节号"…''表示它可以捕捉任何类型的异常信息,即修

改为“catch(…)”。

38.(1)应改为"catch(char*s)"°

⑵应改为“cateh(inti)”。

(3)应改为"catch(…)”。

【解析】本题中第1个标识前的异常抛出语句为“throw("error");",其

中的类型为字符串。所以对应的异常捕捉语句catch中应该符合这个类

型,而程序中给出的语句“catch(chars)”是字符型的,所以第1处的语

句修改为“catch(char*S)”°第2个标识前的异常抛出语句为

44throw((int)0);",其中的类型为int。对应的异常捕捉语句catch中应

该符合这个类型,所以补充catch子句中的类型,否则如果找不到匹配

的catch块,系统就会调用一个系统函数,使程序终止运行。即第2处

的语句修改为“catch(inti)”。如果在catch子句中没有指定异常信息的类

型,那么就用删节号"…''表示它可以捕捉任何类型的异常信息,即修

改为“catch(...)"。

39。)应改为“TCobjl(l);

\n(2)应改为“Objl.SetNumber(lO);”。

\n(3)应改为“0bj2.SelNumber(lOO);"。

\n【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输

出结果两1,所以补全参数1,即第1处的“TCobjl⑴;第2处处的

“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中

成员函数的使用形式应该是:对象名.成员函数,所以修改为

“objl.SetNumber(lO);"。类是对象的抽象,而对象是类的具体实例。

第3处“式:.56四110版「(100);”语句中的丁(:为类,并不是对象,这里

应该使用定义的对象,即obj2,所以将语句修改为

“obj2.SetNumber(lOO);

40.(1)应改为“ein.getline(str,120,?);

\n⑵应改为"while(str[i])”。

,,

\n⑶应改为"if(str[i]>=a&&str[i]<=2)o

\n【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员

函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符个

数,终止标志字符)”,所以第1处改为“cin.getline(str,120,?);"。第

2处的“while(str)”语句应该是判断字符串str中的每一个字符是否为结

束符,若不是结束符,在循环中判断每一个字符是否为小写,若为小写,

则转换。所以应该修改为“while(str[i])”°第3处的“if(st明>=a)”语句是

判断字符str用是否为小写字符,而现有的语句只是判断字符是否大于a,

,,

但是小写字符应该是a到2,所以修改为“if(str[i]>=a&&str[i]>=z)o

tt,,

41.(l)voidmaino

(2)“intm=0144;

(3)“intn=OX25;”或“intn===0x25;

【解析】本题主要考查了主函数定义及嘉同进制之间的转换,包括十

进制到八进制,十进制到十六进制。主函数定义的定义形式为

“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。

cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发

现变量的初值不正确,十进制的100对应八进制的144,卡进制的37

对应十六进制的25,因此2和3应分另IJ改成“intm=0144;”,

“intn=0x25;”或"intn=0x25;

42.(1)应改为“ein.getline(str,120,?);

(2)应改为"while(str[i])"°

,,

⑶应改为“if(st巾]>=a&&str[i]<=2)o

【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员

函数getline函数读入一行字符,格式为“cin.getline(字符数组,字符

个数,终止标志字符)”,所以第1处改为“cin.getline(str,

120,?);"。第2处的“while(str)”语句应该是判断字符串str中的每一

个字符是否为结束符,若不是结束符,在循环中判断每一个字符是否

为小写,若为小写,则转换。所以应该修改为“while(str[i])”°第3处的

“if(st巾]>=a)”语句是判断字符str国是否为小写字符,而现有的语句只

是判断字符是否大于a,但是小写字符应该是a到2,所以修改为

“if(str[i]>=a&&str[i]>=z)”。

43.(1)应改为"usingnamespacestd;

\n(2)应改为"outl.open('l.txt',ios::binary|ios::app);

\n(3)应改为“outl.put(s[i]);”。

\n【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,

对于C++中引入标准命名空间的格式,缺少namespace,所以第1处

的语句修改为“usingnamespacestd第2处,调用成员函数open中,

输入、输出方式是在ios类中定义的,所以“outl.open是.txt',binary|

app);”语句缺少类ios,即第2处的语句修改为“outl.open(1l.txt',ios::

binary|ios::app);第3个标识应该用流成员函数put输出字符,所

以第3处的语句修改为“outl.put(s[i]);

44.(1)应添加“public:

\n(2)“inti”应改为"inti(10);

\n(3)“i++厂'应改为“i—;”。

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、

保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类

的对象被访问。故应在构造函数前添加“public:“,否则该类无法被实例

化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造

参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i

每次减1,在i>5时循环,故i初始化应为10o若循环中i每次增1,则

循环永远不会退出。

45.(I)应改为"usingnamespacestd;"。

(2)应改为"outl.op

温馨提示

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

评论

0/150

提交评论