2023年甘肃省天水市全国计算机等级考试C++语言程序设计真题(含答案)_第1页
2023年甘肃省天水市全国计算机等级考试C++语言程序设计真题(含答案)_第2页
2023年甘肃省天水市全国计算机等级考试C++语言程序设计真题(含答案)_第3页
2023年甘肃省天水市全国计算机等级考试C++语言程序设计真题(含答案)_第4页
2023年甘肃省天水市全国计算机等级考试C++语言程序设计真题(含答案)_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

2023年甘肃省天水市全国计算机等级考试

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

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

一、1.选择题(10题)

1.下面是关于派生类声明的开始部分,其中正确的是

A.classvirtualB:publicA

B.virtualclassBipublicA

C.classB:publicAvirtual

D.classB:virtualpublicA

2.下面程序的运行结果为()。#include<iostream>

usingnamespacestd;voidmain(){int

a=l;switch(a){case1:

cout<<"1";case2:cout<<"2";

break;default:cout<<

"0";}}

A.12B.120C.1D.10

3.若有以下程序:#include<iostream>usingnamespacestd;classA

{private:inta;public:A(imi){a=i;}voiddisp()cout<<a<<}};

classB{private:intb;public:B(intj){归;}voiddispO{cout<<b<<

}};classC:publicB,publicA{private:intc;public:C(intk):A(k-

2),B(k+2){c=k;}voiddispO{A::disp();B::disp();cout<<c<<endl;}};

intmain(){Cobj(10);obj.dispQ;return0;}程序执行后的输出结果是0。

A.10,10,10B.10,12,14C.8,10,12D.8,12,10

4.下列各项中不符合函数重载必须满足的条件的是o

A.必须有不同的参数个数B.对应的参数类型必须不相同C.A和B必须

同时满足D.A和B只要满足一个即可

5.面向对象程序设计将数据和0放在一起,作为一个相互依存、不可分

割的整体来处理。

A.对数据的操作B.信息C.数据隐藏D.数据抽象

6.对于模板定义关键字class和typename说法不正确的是()。

A.程序中的class并不能都替换为typename

B.class和typename都可互相替换

C.程序中的typename都能替换为class

D.程序中的部分class可以替换为typename

7.设intx[]=(l,3,5,7,9,11,13),*p=x;则不能正确引用数组元

素的表达式是O

A.*(p—)B.*(-p)C.*(p++)D.*(++p)

下列叙述中正确的是

A)软件测试的主要目的是发现程序中的错误

B)软件测试的主要目的是确定程序中错误的位置

0为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作

8.D)软件测试是证明软件没有错误

9.下列关于运行符重载的描述中,正确的是()。

A.运算符重载可以改变操作数的个数

B.运算符重载可以改变操作数的优先级

C.运算符重载可以改变运算符的结合性

D.运算符重载可以使运算符实现特殊功能

10.在进行任何CH流的操作后,都可以用C++流的有关成员函数检测

流的状态:其中只能用于检测输入流状态的操作函数名称是()。

A.failB.eofC.badD.good

二、单选题(13题)

11.按照“先进先出”组织数据的数据结构是()o

A.队列B.栈C.双向链表D.二叉树

12.下列关于赋值运算符“=”重载的叙述中,正确的是

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

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

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

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

13.数据库管理系统是()。

A.操作系统的一部分B.在操作系统支持下的系统软件C一种编译系

统D.一种操作系统

14.若磁盘上已存在某个文本文件,其全路径文件名为d:\shiti\tes.txt,

下列语句中不能打开该文件的是()o

A.ifstreamfile("d:\shiti\test.txt");

B.ifstreamfile("d:\\shiti\\test.txt");

C.ifstreamfile;file.open("d:\\shiti\\test.txt");

D.ifstream*pFile=newifstream("d:\\shiti\\test.txt");

15.有下列程序:

#include<stdiO.h>

voidmain()

{chara=4;

printf("%d\n",a=a«l);

)

程序的运行结果是()oA.40B.16C.8D.4

16.下列说法正确的是()。

A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地

B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地

C.类的内联函数必须在类体内定义

D.类的内联函数必须在类体外通过加关键字inline定义

17.以下程序的执行结果为()。#include<iostream.h>classSample

{intn;public:Sample(inti){n=i;}operator++(){n++;}〃前缀重载运算符

operator++(int){n+=2;}//后缀重载运算符voiddisp(){cout<<"n="<<

n<<endl;}};voidmain(){SampleA(2),B(2);A++;++B;A.disp();

B.disp();}

A.n=4n=3B.n=ln=2C.n=3n=4D.n=5n=6

18.假定MyCIass为一个类,那么下列的函数说明中,()为该类的析构

函数。

A.void〜MyClass();

B.~MyClass(intn);

C.MyClass();

D.~MyClass();

19.派生类对象对其基类中的什么成员是可访问的?()

A.公有继承的私有成员B.私有继承的公有成员C.私有继承的保护成

员D.保护继承的保护成员

20.设有charstr[80];以下不能将输入数据first\nsecond\n<CR>读取到

数组str中的语句是

A.cin.get(str,strlen(str));

B.cin.getline(str,strlen(str));

C.cin>>str;

D.cin.read(str,strlen(str));

21.有如下程序:

#included<iostream>

usingnamespacestd;

classTestClass{

protected:

TestClass(){cout«X;}

TestClass(charc){cout«c;}};

classTestClassl:publicTestClass{

public:

TestClassl(charc){cout«C;}};

intmain(){

TestClassldl(y);

returnO;}

执行这个程序,屏幕上将显示输出()。A.yB.yxC.xyD.yy

22.下列程序的运行结果为

#include<iostream.h>

inti=0;

classA{

public:

A(){i++;)

};

voidmain()

(

Aa,b[3],*c;

c=b;

cout<<i<<endl;

)

A.2B.3C.4D.5

23.面关于类的静态成员,说法正确的是o

A.类的静态成员函数只能访问类的静态数据成员

B.类的静态成员函数可直接访问类的所以数据成员

C.类的每个对象都有一份自己的静态数据成员

D.静态数据成员只能通过“类名::”进行访问

三、2.填空题(12题)

24.在数据库管理系统提供的数据定义语言、数据操纵语言和数据控制

语言中,负责数据的模式定义与数据的物理存取构建。

25.已知类sample是一个抽象类,其成员函数display是无形参、无返

回类型的纯虚函数,请完成其声明:

classsample{

public:

sampleQ{};

【】

);

26.C++语言的基本控制结构为顺序结构、选择结构和【】。

27.对待排序文件的初始状态作要求的排序方法是【】。

28.重载的关系运算符和逻辑运算符的返回类型应当是【】。

29.以下函数模板max()的功能是返回数组a中最大元素的值。请将横

线处缺失部分补充完整。

template<typenameT>Tmax(Ta[],intn)

(

Tm=a[O];

fbr(inti=l;i<n;i++)

if(a[i]>m);

returnm;

)

30.若要把voidffim()定义为类A的友元函数,则应在类A的定义中加

入语句O

31.有如下的程序:

#include<iostream>

usingnamespacestd;

classAT{

fi'iendostream&operator<<(ostream&,AT);

}at;

ostream&operator<<(ostream&os,AT){returnos<<;}

intmain(){

cout<<"MyHome"<<at<<"isH";

}

执行上面的程序将输出o

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

#include<iostream.h>

voidmain()

inta(5),b(6),i(O)lj(O);

switch(a)

case5:switch(b)

(

case5:i++;break;

case6:j++;break;

defaun:i++;j++;

}

case6:i++;

j++/

break;

default:i++;j++;

}

cout<<i<<","<<j<<endl;

}

33.在关系模型中,把数据看成一个二维表,每一个二维表称为一个【】。

34.若要访问指针变量q所指向的数据,应使用表达式o

35.下面程序的功能是将字符数组a中下标值为偶数的元素从小到大排

列,其他元素不变,请填空。

#include<iostream.h>

#include<string.h>

voidmain()

{chara[]="clanguage",t;

inti,j,k;

k=strlen(a);

fbr(i=O;i<=k-2;i+=2)

for(j=i+2;j<=k;[]=

if([1)

{t=a[i];a[i]=a[j];a[j]=t;}

cout<<a;

cout<<endl;=

四、程序改错题(10题)

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

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

number=l

number=10

number=100

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

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

试题程序:

#include<iostream.h>

classTC

public:

TC(inti)

number=i;

)

voidSetNumber(intm)

(

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout«"number="«number«endl;

)

private:

intnumber;

};

voidmain

(

I!********enor********

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

!1********ej*j*or*******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

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

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

9,8,7,6,5

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

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

试题程序:

#include(iostream.h>

classTC

!********ej*ror********/

TC(inti)

m_i=i;

voidprint

{

cout«~m_i«,;

s

public:

intmi;

intmain

!********ej*i*oi*********!

inti;

TC04(10);

while(i>5)

(

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

i++:

04.print;

}

cout«endl;

returnO;

}

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

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

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

程序异常,输出信息为

error

O

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

{

try

throw("error");

)

/*1**1**4**4**1**1**1**1**1**4**4**!>

//不不不不不不不不prrcr不不不不不不不不

catch(chars)

(

cout«s«endl;

)

try

(

throw((int)0);

)

/*4**1**1**1**1**1**1**1**1*、],

//不不不不个不不不prrcr不不不不不不不不

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

/*1**1**1**1**1**!•*1**1**1**1**1**1**1**1*、1*

//不个不不不不不不prrcr不不不不不不不不

catch

(

cout«"ERROR"«endl;

returnO;

39.使用VC++6.。打开考生文件夹下的源程序文件1.cpp0本程序

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

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

到屏幕中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=0;

charstr[]20];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

I!********enor********

while(str)

(

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

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

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

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

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

TC:TC

cout«"Constructor"«","

i=0;

)

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

TC:display

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

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

(

TCa;

a.display;

}

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

(

try

throw("error");

)

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

catch(chars)

{

cout«s«endl;

)

try

(

throw((int)0);

)

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

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

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

catch

(

cout«"ERROR"«endl;

)

returnO;

)

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

!1********ej*j*0j*********

while(str)

1I********ej*j*0j*********

if(str[i])=a)

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

i++;

)

cout«str«endl;

return;

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

public:

I********epj*or********I

staticintn=O:

CO

n++:

-CO

):

I********ej*j*or********I

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

I********ei*j*0r********/

eout«C.n«endl;

cout«C0::n«endl;

)

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

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

为:

sizeoRSl)=5

sizeof(s2)=10

sizeo心3)=1

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

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

⑴不能删除assert()语句。

(2)只能修改后面的数字。

提示:assert函数如果为假,则会产生一个中断异常。

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

char*sl="abc”:

!1********ej*j*or********

assert(sizeof(s1)=3):

cout«"sizeof(s1)=5"«endl;

chars2[10]="ab":

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

assert(sizeof(s2)=2);

cout«"sizeof(s2)=10"«endl;

chars3=23:

I!********error********

assert(sizeof(s3)=4);

cout«"sizeof(s3)=l"«endl;

return;

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

Ii******e*or******

voidmain

{

Ii******errc)r******

intm=0142:

I!******error******

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

五、综合应用题(2题)

46.

请使用【答题】菜单命令或直接用VC6打开考生文件夹下的工程

prog3,其中声明了ValArray类,该类在内部维护一个动态分配的整型

数组。ValArray类的复制构造函数应实现对象的深层复制。请编写

ValArray类的复制构造函数。在main函数中给出了一组测试数据,此

种情况下程序的输出应该是:

VaiArrayvl={1,2,3,4,5}VaiArrayv2={1,2,3,4,5}要求:

补充编制的内容写在“〃*********333**********与

“〃*********666*********”之间,不得修改程序的其他部分。

注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile

已经编译为boj文件,并且在本程序中调用。

//VaiArray.h

#include<iostream>usingnamespacestd;classValArray{

int*v:intsize;public:

ValArray(constint*P,intn):size(n){

v=newint[size];

for(inti=0;i<size;i++)v[i]=P[i];

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

proj3,其中包含了类IntegerSet和主函数main的定义。一个IntegerSet

对象就是一个整数的集合,其中包含。个或多个无重复的整数;为了

便于进行集合操作,这些整数按升序存放在成员数组elem的前若干单

元中。成员函数add的作用是将一个元素添加到集合中(如果集合中不

存在该元素),成员函数remove从集合中删除指定的元素(如果集合中

存在该元素)。请编写成员函数remove。在main函数中给出了一组测

试数据,此时程序的正确输出结果应为:

23452728316675

234562728315675

23456192728316675

3456192728316675

3456192728316675

要求:

补充编制的内容写在“〃***********333***********''与

“”***********666***********”之间,不得修改程序的其他部分。

注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile

已经编译为obj文件,并且在本程序中调用。

//IntegorSet.h

#ifndefINTEGERSET

#defineINTEGERSET

#include<iostream>

usingnamespacestd;

constintMAXELEMENTS=100;

〃集合最多可拥有的元素个数

classIntegerSet{

intelem[MAXELEMENTS];

//用于存放集合元素的数组

intcounter;//用于记录集合中元素个数的计数器

public:

IntegerSet:counter(0){}

〃创建一个空集合

IntegerSet(intdata[],intsize);

//利用数组提供的数据创建一个整数集合

voidadd(intelement);

〃添加一个元素到集合中

voidremeve(intelement);

〃删除集合中指定的元素

intgetCountconst{returncounter;}

〃返回集合中元素的个数

intgetElement(inti)const{returnelem[i];}〃返回集合中指定的元素

voidshowconst;

};

voidWriteToFile(char*);

#endif

//main,cpp

#include,,IntegerSet.h"

#include<inmanip>

IntegerSet::IntegerSet(intdata[],intsize):counter(O){

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

add(data[i]);

)

)

voidIntegerSet::add(intelement){

intj;

〃从后往前寻找第一个小于等于element的元素

for(j=counter;j>0;j-)

if(element>=elem[j一l])break;

//如果找到的是等于element的元素,说明要添加的元素已经存在,直

接返回

if(j>0)

if(element==elem[j-1])return;

〃如果找到的是小于element的元素,j就是要添加的位置

//该元素及其后面的元素依次后移,腾出插入位置

for(intk=counter;k>j;k一)

elem[k]=elem[k一1];

elemfjl=element;〃将element插入到该位置

counter++;〃计数器加1

)

voidIntegerSet::remove(intelement){

voidIntegerSet::showconst{

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

cout«setw(4)«getElement(i);

cout«endl:

)

intmain{

intd[]={5,28,2,4,5,3,2,75,27,66,31};

IntegerSetS(d,]1);S.show;

S.add(6);s.show;

S.add(19);S.show;

S.remove(2);s.show;

S.add(4);S.show;

,,,,

writeToFile();

return0;

)

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

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

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

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

(1)添加类complex的无参数的构造函数的定义,将私有成员real和imag

都初始化为0。请在注释“〃**1**”之后添加适当的语句。

⑵添加类complex的带两个参数的重载构造函数,两个参数r和i都是

double类型,要求将r赋值给私有成员real,i赋值给私有成员imag,

同时允许调用时参数i可是省略,请在注释“〃**2**”之后添加适当的语

句。

⑶完成类complex重载加法函数的定义,该函数直接返回一个类

complex的对象,同时把参数对象c的实部real和虚部imag分别与当前

对象对应部分分别相加,请在注释“〃**3**”之后添加适当的语句。

(4)完成类complex的友元函数print的定义,使其以格式“real+imagi”输

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

源程序文件test38_3.cpp清单如下;

#include<iostream.h>

classcomplex

i

public:

//**]**

〃**2**

(

real=r;imag=i;

I

s

complexoperator+(complex&c);

friendvoidprint(complex&c);

private:

doublereal,imag;

};

complexcomplex::operator+(complex&c)

{

H**3**

}

H**4**

cout<<c.real<<"+"<<c.imag<<"i"<<endl;

}

voidmain()

i

complexcl(2.0,3.0),c2(4.0,-2.0),c3;

c3=cl+c2;

print(c3);

c3=c3+complex(3.5);

print(c3);

}

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

序文件MyMain8.cpp,该程序实现栈的入栈和出栈的操作。其中有两个

类:一个是节点类node,它包含节点值和指向上一个节点的指针prey;

另一个类是栈类stack,它包含栈的头指针toPo但类的定义并不完整。

请按要求完成下列操作,将类Sample的定义补充完成:

①定义私有节点值data,它是血型的数据,以及定义一个指向上一个节

点的指针prev。请在注释“//**1**”之后添加适当的语句。

②完成构造函数node(intd,node*n)的定义,使得私有成员data和prev分

别初始化为d和no请在注释“//**2**”之后添加适当的语句。

③完成类stack的成员函数push(inti)的类体内的定义。函数push。实现

入栈这个操作,即把形参i压入栈中,那么此时应该创建一个新的节点,

并让这个节点的prev指针指向栈顶。请在注释“//**3**”之后添加适当

的语句。

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

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

//MyMain8.cpp

#include<iostream>

usingnamespacestd;

classstack;

classnode

(

private:

〃**]**

public:

node(intd,node*n)

(

〃**2**

}

friendclassstack;

classstack

node*top;//栈头

public:

stack()

top=0;

voidpush(inti)

〃**3**

intpop()

(

node*t=top;

if(top)

(

top=top->prev;

intc=t->data;

deletet;

returnc;

}

return0;

)

);

intmain()

{

stacks;

s.push(6);

s.push(3);

s.push(l);

return0;

参考答案

LD解析:本题考核虚基类的声明。C++中,虚基类说明格式如下:class

〈类名〉:virtual(继承方式><基类名>。其中,virtual是虚基类的

关键词。虚基类的说明是用在定义派生类时,写在派生类名的后面。

2.A解析:switch语句检测到符合条件case执行后面语句不再判断。

3.D

4.A

5.A解析:面向对象语言包含3个要素,即对象、类和继承。这3个要

素反映了面向对象的传统观念。面向对象程序设计的本质是把数据和对

数据的操作当成一个整体即对象。

6.BB。【解析】在C++程序中的typename是都可以替换为class的,但

class不能都替换为typename。

7.B

8.A解析:就软件测试而言,它的目的是发现软件中的错误。但是,发

现错误并不是最终目的,最终目的是通过测试发现错误之后还必须诊断

并改正错误,这才是测试的目的。由于测试的目标是暴露程序中的错误,

所以从心理学角度看,由程序的编写者自己进行测试是不恰当的。因此,

在软件测试阶段通常由其他人员组成测试小组来完成测试工作。经过上

述分析可知,选项A的说法是正确的,而选项B、C、D的说法是错误

的。

9.D解析:本题考核运算符重载的概念。C++把重载的运算符视为特殊

的函数,称为运算符函数,函数名就是在运算符前加上保留字operator。

运算符重载就是赋予已有的运算符多重含义。C++中通过重新定义运算

符,使它能够用于特定类的对象执行特定的功能。但是用户重新定义运

算符,不改变原运算符的操作符个数、优先级和结合性.同时运算符重

载后,也不改变运算符的语法结构,即单目运算符只能重载为单目运算

符,双目运算符只能重载为双目运算符。所以A,B,C选项的描述都

是错误的。

10.B解析:C++中可以用文件流对象的下列成员函数来判别文件流的当

前状态。

①函数is_open():判定流对象是否与一个打开的文件相联系,若是,返

回true,否则返回falseo

②函数good。:刚进行的操作成功时返回true,否则返回false。

③函数fail。:与good。相反,刚进行的操作失败时返回true,否则返回

falseo

④函数bad():如果进行了非法操作返回true,否则返回false。

⑤函数eof()进行输入操作时,若到达文件尾返回true,否则返回false。

其中,eof函数只能用于输入流操作。

11.A

队列是一种特殊的线性表,只允许在表的一端插八元素,在表的另一端

删除元素,插入元素的一端叫“队尾”,删除元素的一端叫“队头”。先插

入的元素先被删除,是按“先进先出”的原则组织数据的。

【知识拓展】“队列”和“栈”都是一种特殊的线性表。之所以称之为“队列”,

其形式如“排队要讲究“先来后到”,先进先出,后进后出。

12.A

解析:=、口、()、->以及所有的类型;转换运算符只能作为成员函数

重载,A项正确。默认的赋值运算符只实现了浅层复制,B项错误。

赋值运算符只能作为成员函数重载,形参表中只有一个参数,对应于

第二操作数,C项错误。一个类中如果需要重载运算符“=”,通常也

就需要定义自己特有的复制构造函数,反之亦然,故D项错误。

13.B

数据库管理系统是数据库的机构,它是一种系统软件,负责数据库中的数据组织、数据操

纵、数据维护、控制及保护和数据服务等,是一种在操作系统支持下的系统软件,因此本

题答案为B)o

14.A

15.C

Co【解析】本题考查位操作,将4转化成二进制为0100,左移一位

后为1000,转成十进制为8,所以输出8。

16.B解析:本题考查的是内联函数的定义,引入内联函数是为了解决

程序中函数调用的效率问题,是以目标代码的增加为代价换取时间的节

省,•一般函数在运行时被调用,而调用的内联函数在编译时就被替代了,

如果不加inline关键字,则编译器会将在类说明部分定义的任何函数都

被认定为内联函数。

17.A解析:此题考查的是“++”运算符的重载。为了区分前缀和后缀运算

符,规定:重载后缀运算符时必须多一个虚拟参数:into本题中,A(2)

首先给n赋值2,语句A++,调用的是后缀运算符重载语句,使得n加

2变为4。B(2)首先给n赋值2,然后语句++B,调用前缀运算符重载函

数,使得n加1。因此最终的输出结果是n=4n=3。

18.D解析:C抖语言中析构函数为符号“~”加类名,且析构函数没有

返回值和参数,故前不加void关键字。所以正确的形式应该是-MyClass。。

19.D

20.B解析:本题考察C++中输入输出流对象的一些常用成员函数的用

法。其中get和getline的区别在于getline读取中以作为输入结束符。

故本题中getline只能接收第一个换行符之前的字符,即first。后面的字

符被丢弃。因此正确答案应为B。

21.A

Co【解析】本题中类TestClass为基类,TestClassl为TestClass的派

生类。由main主函数入手,定义TestClassl类型的对象dl,参数值为

yoTestClassl类继承TestClass,所以主函数中“TestClassldl(y);”语句

首先调用“TestClassl(charc){colll«C;}“然后调用基类中的

uTestClass{COUt«X;)”输出X,然后执行

uTestClass(charc){cout«c;}“输出y,即答案为"xy”。

22.C解析:外部变量i实际上记录的是调用构造函数的次数。

23.A

24.数据定义语言数据定义语言

25.virtualvoiddisplay()=0;

virtual\u3000void\u3000display()=0;解析:本题考查的知识点是:纯

虚函数。纯虚函数定义格式是在虚函数的后面加上“=0”。与虚函数不

同的是,纯虚函数允许没有函数体。故本题应该填入的内容是;

virtual\u3000void\u3000display()=0;。

26.循环结构循环结构解析:C++语言3种基本结构就是顺序结构,选

择结构,循环结构。

27.归并排序归并排序解析:只有归并排序要求待排序文件,,部分排

序”(把待排序的文件分成若干个子文件,每个子文件内的记录是己排序

的)。

28.bool

29.m=a[i]m=a[i]解析:此题考查的是函数模板、if语句、for循环等知

识点。函数模板max()的功能是返回数组a中最大元素的值,所以当a[i]

是最大值时,应将a[i]的值赋给m。

30.friendvoidffun()

31.Myhome@isH

32.12

33.关系关系解析:在关系模型中,把数据看成一个二维表,每一个二

维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个

数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于

记录值。

34.*q

35.j+=2]a[i]>=a[j]或a[i]>a[jlj+=2\r\n]a[i]>=a[j]或a[i]>a[j]解析:

strlen函数是测试字符串长度的函数,函数的值为字符串中的实际长度,

不包括NO'在内。

36.⑴应改为“TCobjl(l);

(2)应改为“Objl.SetNumber(lO);

(3)应改为“0bj2.SelNumber(lOO);

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

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

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

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

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

5,

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

例。第3处“TC.SetNumber(lOO);”语句中的TC为类,并不是对象,

这里应该使用定义的对象,即。bj2,所以将语句修改为

“obj2.SetNumber(lOO);

37.(1)应添加“public:

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

\n(3)“i++;”应改为“i-;

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

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

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

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

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

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

循环永远不会退出。

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

⑵应改为“cateh(inti)”。

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

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

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

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

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

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

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

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

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

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

改为“catch(…)”。

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

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

⑶应改为“if(str[i]>=a&&str[i]<=2)”。

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

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

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

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

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

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

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

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

€<if(str[i]>=a&&str[i]>=z),,o

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

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

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

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

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

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

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

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

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

3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函

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

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

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

⑵应改为“cateh(inti)”。

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

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

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

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

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

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

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

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

的语句修改为“catch

温馨提示

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

评论

0/150

提交评论