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

下载本文档

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

文档简介

2023年辽宁省丹东市全国计算机等级考试

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

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

一、1.选择题(10题)

1.C++语言本身没有定义I/O操作,但I/O操作包含在C++实现中。C++

标准库iostream提供了基本的I/O类。I/O操作分别由两个类istream和

()提供。

A.fstreamB.iostreamC.ostreamD.cin

2.在单链表中,增加头结点的目的是____o

A.方便运算的实现B.使单链表至少有一个结点C.标识表结点中首结

点的位置D.说明单链表是线性表的链式存储实现

3.下面函数的运行结果是()。#include<iostream>

usingnamespacestd;classA{public:

A(){}intMin(inta,intb){returna<b?a:

b;}intMin(inta,intb,int

c){if(a<b)returna<c?a:c;

elsereturnb<c?b:c;}~

A(){}};voidmain(){Aa;

cout<<a.Min(l,2,3)<<a.Min(2,0);}

A.10B.12C.30D.32

4.已经语句intm=10;则下列表示引用的表示中正确的是()。

A.int&x=m;

B.int&y=10;

C.int&z;

D.float&t-8m;

5.关于类型转换的说法中,错误的是()。

A.如果a为血型变量,b为char型变量,则a+b的值为血型

B.如果a为float型变量,b为int型变量,贝IJa-b的值为float型

C.如果a为double型变量,b为float型变量,贝IJa*b的值为double型

D.如果a为血型变量,b为血型变量,则a/(double)b的值为int型

6.假定其中的x的单位是角度且不考虑兀值的精度,则与数学公式

,|cos(x)|等价的C++语言表达式是

A.sqrt(cos(x))

B.sqrt(abs(cos(x*3.14/180)))

C.sqrt(abs(cos(x*(/180)))

D.sqrt(fabs(cos(x*3.14/180)))

7.需求分析中开发人员要从用户那里了解()。

A.软件做什么B.用户使用界面C.输入的信息D.软件的规模

8.设inta=10,b=11,c=12;,表达式(a+B)<c&&b==c的值是

A.2B.0C.-2D.1

9.有如下类的定义,下划线处的语句是()。class

MyClass{intx,y;Public:MyClass(inta=0,int

b=0){x=a;y=b;}staticvoidchange(){y-=10;y-=10;}};

A.staticB.constC.mutableD.不需要填入内容

10.阅读以下程序:#include<iostream.h>classkk{intm;public:

staticintn;kk(){m=0;1voidsetvalue(){m++;n++;}voidoutput()

{cout<<"m="<<m<<",n="<<n<<endl;}};intkk::n;void

main(){kkobj1,obj2;obil.Setvalue();obj1,output();obj2,setValue();

Obj2.output();}该程序的执行结果是()o

A.m=l,n=l

B.m=l,n=lm=l,n=lm=l,n=2

C.m=l,n=l

D.m=l,n=lm=2,n=lm=2,n=2

二、单选题(13题)

11.在下列模式中,能够给出数据库物理存储结构与物理存取方法的是()。

A.外模式B.内模式C.概念模式D.逻辑模式

12.在软件开发中,需求分析阶段产生的主要文档是()o

A.软件集成测试计划B.软件详细设计说明书C.用户手册D.软件需求

规格说明书

13.有如下类定义和变量定义

classA{

public:

A(){data=O;}

~A(){}

intGetData()const{returndata;}

voidSetData(intn){data=n;}

private:

intdata;

);

constAa;

Ab;

下列函数调用中错误的是

A.a.GetData();

B.a.SetData(lO);

C.b.GetData();

D.b.SetData(lO);

14.为了提高函数调用的实际运行速度,可以将较简单的函数定义为0。

A.内联函数B.重载函数C.递归函数D.函数模板

15.

17.若有说明:inta[3][41则对a数组元素的非法引用是().

A.a[0][2*l]B.aCl][3]

C.a[4—2][0]D.a[0][4]

16.运算符重载时不需要保持的性质是_______。

A.操作数个数B.操作数类型C.优先级D.结合性

17.有如下程序:

#inClude<iostream>usingnamespaCestd;ClassMusiC{

public:

voidsetTitle(Char*str){strCpy(title?str);}protected:

Chartype[l0];private:

Chartitle[20];

ClassJazz:publicMusiC{public:

voidset(Char*str){

strCpy(type,"Jazz');〃①strCpy(title,str);〃②

}};

下列叙述中正确的是(晨A.程序编译正确B.程序编译时语句①出错C.程

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

18.必须用一对大括号括起来的程序段是()。

A.switCh语句中的ease标号语句B.if语句的分支C.循环语句的循环体

D.函数的函数体

19.有以下程序#include<iostream.h>intf(intn){if(n==l)retum1:

elsereturnf(n-1)+1;}voidmain(){inti,j=0;for(i=l;i<3;i++):j+=f(i);

cout<<j;}程序运行后的输出结果是()。

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

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

测流的状态,其中只能用于检测刚进行的操作是否失败函数名是()。

A.failB.eofC.badD.good

21.下列关于线性链表的叙述中,正确的是()。

A.各数据结点的存储空间可以不连续,但它们的存储顺序与逻辑顺序必

须一致

B.各数据结点的存储顺序与逻辑顺序可以不一致,但它们的存储空间必

须连续

C.进行插入与删除时,不需要移动表中的元素

D.以上说法均不正确

22.关于函数中的〈返回类型〉。下列表述中错误的是()o

A.〈返回类型〉中有可能包含关键字int

B.〈返回类型〉中有可能包含自定义标识符

C.<返回类型〉中衣可能包含字符*

D.〈返回类型〉中可能包含口

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

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

B.class和typename都可互相替换

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

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

三、2.填空题(12题)

24.在面向对象方法中,类之间共享属性和操作的机制称为【】。

25.在C++语言中每个类都有一个【】指针,该指针指向正在调用成员

函数的对象。

26.在面向对象方法中,描述的是具有相似属性与操作的一组对

象。

27.下面是一个栈类的模板,其中push函数将元素i压入栈顶,pop函

数弹出栈顶元素。栈初始为空,top值为0,栈顶元素在stack[top-l]中,

在下面横线处填上适当语句,完成栈类模板的定义。

template<classT>

classTstack{

enum{size=1000};

Tstack[size];

inttop;

public:

Tstack():top(0){}

voidpush(constT&i){

if(top<size)

stackftop++]=i;

)

Tpop(){

if(top=0)exit⑴;〃栈空时终止运行

return;

)

28.【】使一个函数可以定义成对许多不同数据类型完成同一个任务。

29.类time可以输出12小时或24小时制的时间,现需要设计一个缺省

构造函数,缺省值为。时。分。秒。该缺省构造函数为0

#include<iostream.h>

classTime

(

inth,m,s;

public:

Time(inthour=0,intmin=O,intsec=0){settime(hour,min,sec);}

voidsettime(inthour,intmin,intsec){h=hour;m=min;s=sec;}

voidshow24()

{cout<<(h<10?"0":"")<<h<<<<(m<10?"0":"")<<

m<<<<(s<10?"0":"")<<s<<endl;

)

voidshowl2()

{inttemp=(h==0||h==12)?12:h%12;

cout<<(temp<10?"0":"")<<temp<<<<(m<10?"0":"")

<<m<<<<(s<10?"0":"")<<s<<((temp>0&&h<12)?"

AM":"PM")<<endl;

)

);

voidmain()

(

Timet(15,43,21);

t.showl2();

t.show24();

30.若有定义语句:inta=3,b=2,c=l;,则表达式b<b?a:b的值是____。

31.一个项目具有一个项目主管,一个项目主管可管理多个项目,则实

体“项目主管”与实体“项目”的联系属于【】的联系。

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

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

33.为了表明一个函数不带返回值,应在定义函数时指定该函数类型为

【]o

34.在算法正确的前提下,评价一个算法的两个标准是【】。

35.表达式x.operator+(y.operator++(0))还可以写成□

四、程序改错题(10题)

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

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

100

37

32

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

可。

试题程序:

#include<iostream.h>

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

voidmain

(

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

intm=0142:

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

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

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

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

中。

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

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

试题程序:

#include<iostream.h>

voidmain

(

inti=O;

charstr[120];

cout«"Enterastringendwith?."«endl;

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

cin.getline(str,120);

!1********eno1********

while(str)

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

if(str[i])=a)

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

i++;

cout«str«endl;

return;

)

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

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

9,8,7,6,5

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

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

试题程序:

#include(iostream.h>

classTC

1********enor********/

TC(inti)

m_i=i;

voidprint

cout«—m_i«,;

)

public:

intm_i;

};

intmain

{

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

inti;

TC04(10);

while(i>5)

(

I********enOr********/

i++:

04.print;

)

cout«endl;

returnO;

)

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

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

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

注意:不要改动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;

)

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

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

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

〜TC;

};

TC:TC

cout«"Constructor"«","

i=0;

)

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

TC:display

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

)

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

TC:TC

COUI«"Destructor"«endl:

}

voidmain

TCa;

a.display;

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

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

number=l

number=10

number=100

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

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

试题程序:

#include<iostream.h>

classTC

(

public:

TC(inti)

(

number=i;

)

voidSetNumber(intm)

{

number=m;

)

intGetNumberconst

(

returnnumber;

)

voidPrintconst

(

cout«"number="«number«endl;

)

private:

intnumber;

};

voidmain

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

//********error*%0******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

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

确。

程序输出:

8

8

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

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

试题程序:

#include(iostream.h>

classCO

{

public:

********error********

staticintn=O:

CO

n++:

〜CO

n—:

):

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

intCO::n;

voidmain

COobj;

COobj2[7];

CO*C=NULL:

c=&obj:

I********error********

eout«C.n«endl;

cout«C0::n«endl;

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

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

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

程序异常,输出信息为

error

0

ERROR

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

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

试题程序:

#include<iostream.h)

intmain

throw("error");

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

catch(chars)

cout«s«endl;

throw((int)0);

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

catch

cout«i«endl;

)

try

(

throw(O);

throw("error");

}

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

catch

(

cout«"ERROR"«endl;

)

retumO;

)

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

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

为:

sizeof(Sl)=5

sizeof(s2)=10

sizeof(s3)=l

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

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

⑴不能删除assert()语句。

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

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

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

(

char*sl="abc":

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

assert(sizeof(s1)=3):

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

chars2[10]="ab":

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

assert(sizeof(s2)==2);

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

chars3=23:

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

assert(sizeof(s3)==4);

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

return;

)

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

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

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

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

构,错误的语句在

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

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

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

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

(

II********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);

returnO;

}

五、综合应用题(2题)

46.

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

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

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

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

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

ValArrayvl={1,2,3,4,5}ValArrayv2={1,2,3,4,5}要求:

补充编制的内容写在“〃*********333******匹51c”与

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

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

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

//ValArray.h

#include<iostream>usingnamespacestd;classValArray{

int*v:intsize;public:

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

v=newint[size];

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

47.使用VC++6.。打开考生文件夹下的源程序文件3.cpp。类

People包括姓名和年龄两个字段。函数fun获得年龄比较大的人的姓

名,然后输出这个姓名到屏幕。

其中定义的类并不完整,按要求完成下列操作,将类的定义补充完

整。

⑴完成类的构造函数功能,请在注释1后添加适当的语句。

(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。

(3)定义类的友元函数fun,请在注释3后添加适当的语句。

(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其

他的程序代码。

试题程序:

#include<iostream.h>

classPeople

{

public:

(

inti;

for(i=0;sUserName[i]!=O;i++)

{m_UserName[i]=sUserName[i];

)

I[*|*

m_01d=n01d;

}

private:

charm_UserName[32];

intm_01d;

//********3********

};

voidfun(char*s,People&personl,People&person2

(

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

if

(

for(inti=0;personl.m_UserName[i]!=O;i+

+)

(

s[i]=personl.m_UserName[i];

s[i+l]=0;

)

)

else

{

for(inti=0;person2.m_UserName[i]!=O;i+

+)

{s[i]=person2.m_UserName[i];

s[i+l]=O;

)

)

)

voidmain

(

chars[32];

Peoplepl("abc",20);

Peoplep2("def,30):

fun(S,pl,p2);

cout«s«endl:

return;

)

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

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

testll_3.cpp,其中定义了类CPosition,但该类的定义都并不完整。请按

要求完成下列操作,将类CPosition的定义补充完整。

⑴在类定义外完成重载的两个构造函数CPosition。和CPosition(double

dx,doubledy),其中前者为不带参数的构造函数,使CPosition对象的

默认值为x=0,y=0,后者为带参数的构造函数,把数据成员x和y分

别初始化为参数dx和dy的值。请在注释“〃**1**”之后添加适当的语句。

(2)在类体中添加函数move(doubleax,doubleay)的定义,使得点的坐标

X和y分别移动ax和ay个单位,请在注释“〃**2**”之后添加适当的语

句。

(3)完成函数doubledistance(doublebx,doubleby)的定义,该函数返回

*this和点(bx,by)的距离,请在注释“〃**3**”之后添加适当的语句。

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

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

#include<iostream.h>

#include<math.h>

classCPosition

(

public:

CPosition();

CPosition(doubledx,doubledy);

doublegetx();

doublegety();

H**2**

doubledistance(doublebx,doubleby);

private:

doublex;

doubley;

};

H**]**

x=0;y=0;

CPosition::CPosition(doubledx,doubledy)

x=dx;y=dy;

doubleCPosition::getx()

returnx;

doubleCPosition::gety()

returny;

doubleCPosition::distance(doublebx,doubleby)

(

〃**3**

voidmain()

{

doublea,b;

cout<<"Inputx,ypositionofapoint:";

cin>>a>>b;

CPositionpsA(a,b);

cout<<"Inputx,ypositionofanotherpoint:";

cin>>a>>b;

cout<<"Thedistanceis"<<psA.distance(a,b)<<endl;

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

test3l_3.cpp,其中定义了可以动态分配的字符串类,但该类的定义并不

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

⑴定义类tstring的私有数据成员length和p,它们分别是血型的数据和

字符型的指针,其中length表示一个字符串的长度。请在注释“〃**1**”

之后添加适当的语句。

(2)完成类tstring的构造函数,使length等于字符串m的长度,并申请

由指针P指向的length长的字符型空间,将m所指的字符串复制到该

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

(3)完成类tstring的成员函数strcopy(tstringn)的定义该函数将对象n的

值(包括字符串长度和字符串本身)复制给调用该函数的对象(对象n的

字符串长度任意)。请在注释“〃**3**”之后添加适当的语句。

(4)完成类tstring的友元函数strlink(tstringm,tstringn)的定义,该函数将

可动态分配的字符串类对象m和n的字符串成员连接在一起(对象m和

n的字符串长度任意),并返回该串。请在注释“〃**4**”之后添加适当的

语句。

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

程序输出结果如下:

hellotheworld!

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

#include<iostream.h>

#include<conio.h>

#include<string.h>

clasststring

public:

〃**]**

tstring(char*m)

(

〃**2**

strcpy(p,m);

)

voidstrcopy(tstringn);

friendchar*strlink(tstringm,(stringn);

);

voidtstring::strcopy(tstringn)

(

〃**3**

char*q;

q=newcharflength];

strcpy(q,tstring::p);

q=strcat(tstring::p,n.p);

tstring::p=q;

tstring::length=strlen(tstring::p);

),

char*strlink(tstringm,tstringn)

{,'

intlength=strlen(m.p)+strlen(n.p);

char*p;

〃**4**

strcpy(p,m.p);

p=strcat(p,n.p);

returnp;

)

voidmain()

(

tstringa("hello");

tstringb("theworld");

tstringc("!");

a.strcopy(b);

cout<<strlink(a,c)<<endl;

参考答案

1.C解析:本题考查的是C++标准库iostream提供的基本I/O类。istream

提供了向流中插入数据的有关操作:ostream提供了从流中提取数据的

操作。

2.A\nA。【解析】头结点不仅标识了表中首结点的位置,而且根据单链表

(包含头结点)的结构,只要掌握了表头,就能够访问整个链表,因此增

加头结点的目的是为了便于运算的实现。

\n

3.A解析:函数的重载调用。首先调用3个参数返回最小值1,再调用

2个参数返回最小值0。

4.A解析:引用比较特殊,即必须指向一个已有的同类型变量。引用是

已有变量的别名,故选项C是错误的,选项D中变量类型不同,而选

项B中是常数。

5.D解析:C++中数据类型转换有两类,即隐式类型转换和显式类型转

换。

①隐式类型转换是由编译器自动完成的类型转换。当编译器遇到不同类

型的数据参与同一运算时,会自动将它们转换为相同类型后再进行运算。

赋值时,会把所赋值的类型转换为与被赋值变量类型一样。隐式类型转

换按从低到高的顺序进行。

②显式类型转换是由程序员显式指出的类型转换,使用显式类型转换的

好处是,编译器不必自动进行两次转换,而由程序员负责类型转换的正

确性。

由此可知选项D中a/(double)b的值应为double型。

6.D解析:本题考查数学表达式的掌握,首先应转换为弧度,然后作为

cos函数的参数,求绝对值,最后是开方函数。考生需要掌握的是常用

的数学函数。

7.A解析:需求分析是软件定义时期的最后一个阶段,它的基本任务就

是准确问答“系统必须做什么”。这个问题即软件系统功能,需求分析的

任务还不是确定系统怎样完成它的工作,而仅仅是确定系统必须完成哪

些工作,也就是对目标系统提出完整、准确、清晰、具体的要求。

8.B解析:本题考查的是运算符的优先级,应该先计算a+b的值为21,

然后与c比较大小的值为0,根据“&&”的运算规则,整个表达式的值

为0。

9.A

10.B

H.B数据库有三层模式结构,逻辑模式是数据的全局逻辑结构的描述,

外模式也称为子模式,是局部数据的逻辑结构描述,而内模式也称为存

储模式,是数据库物理存储结构和存取方法的描述。

12.D需求分析阶段的工作可以概括为:需求获取、需求分析、编写需求

规格说明书、需求评审四个方面。所以选择D。

13.B

本题主要考查了常对象和常成员函数。使用const关键字修饰的对象称

为常对象,使用const关键字说明的成员函数称为常成员函数。由于常

对象不能被更新,因此,在将一个对象说明为常对象后,通过这个常

对象只能调用它的常成员函数,而不能调用其他成员函数。一般对象

既可以调用常成员函数,也可以调用一般成员函数。选项B中对象a

为常对象,而成员函数SetData。不是常成员函数,所以这样调用会发

生编译错误。

14.A\n一般函数进行调用时,要将程序执行权转到被调用函数中.然后

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

联函数体来替换,一般只将{将规模很小而使用频繁的函数声明为内联

函数,可以避免函数调用时间开销,从而提高运行速度。

\n

15.D

16.B\n重载运算符的规则如下:①C++不允许用户自己定义新的运算符,

只能对已有的C++运算符进行重裁②C++不能重载的运算符只有5个;

③重载不能改变运算符运算对象的个数,•④重载不能改变运算符的优先

级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符

必须和用户定义的自定义类型的对象一起使用,至少应有一个是类对象,

即不允许参数全部是C++的标准类型。所以答案为B。

\n

17.C

本题考查公用继承和保护继承对基类成员的访问属性。公用继承中,

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

员仍为基类私确、保护成员不能被类外访问,但是可以被派生类的成

员函数访问。Type成为派生类的保护成员,可以被派生类访问,title

仍为基类私有,派生类不能直接访问。所以答案为c。

18.D

本题考查C++基本控制结构.A、B、C三个选项中的大括号不是必须

的,而D选项中的函数体必须使用大括号。

19.B

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

前状态。

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

回true,否则返回falseo

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

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

falseo

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

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

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

21.CC【解析】一般来说,在线性表的链式存储结构中,各数据结点的

存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系

也不一致。线性链表中数据的插入和删除都不需要移动表中的元素,只

需改变结点的指针域即可。

22.B

Bo【解析】〈返回类型〉又称函数类型,表示一个\r\n函数所计算(或

运行)的结果值类型,这里的类型可以是预定义类型(如int)、复合类型

(如double*)、用户定义类型(如枚举类),若返回值只做更新(或设置)等

操作,则该函数返回类型为void类型,函数类型和内置数组不能作为

返回类型,但类类型和容器类型可以被直接返回。

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

但class不能都替换为typenameo

24.继承继承解析:类是面向对象语言中必备的程序语言结构,用来实

现抽象数据类型。类与类之间的继承关系实现了类之间的共享属性和操

作,一个类可以在另一个已定义的类的基础上定义,这样使该类型继承

了其超类的属性和方法,当然,也可以定义自己的属性和方法。

25.this

26.类类

27.stackf-top]或stack[top-=l]或stack[top=top-1]stackf-top]或

stack[top-=l]或stack[top=top-ll解析:此题考查的是堆栈数据结构。

分析题目,首先利用函数voidpush(constT&i)将i压入栈,然后Tpop()

将元素弹出,但由于在压入栈的时候,top值已经增加1;要弹出元素,

须使top先减1,才能把栈顶元素弹出。

28.函数模板函数模板解析:本题考核函数模板与重载函数的区别。重

载函数通常是基于不同的数据类型完成类似的操作;而函数模板则是对

不同的数据类型完成相同的操作,它比重载函数的要求更严格。

29.Time(){h=0;m=0;s=0;}Time(){h=0;m=0;s=0;}解析:注意缺省构造函

数为无参构造函数,且必须为私有数据成员赋初值。

30.2

31.一对多(或1:N)一对多(或1:N)解析:两个文体集间的联系实际上

是实体集间的函数关系,这种函数关系可以有3种,即一对一(1;1)的

联系、一对多(1:N)或多对一(N:1)的联系和多对多(M:N)的联系。

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

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

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

33.voidvoid解析:void表明该函数不带返回值,如果没有void,则系统

会返回一个默认类型的随机值,这对程序可能造成不必要的问题。

34.时间复杂度和空间复杂度时间复杂度和空间复杂度

35.x+y++或x+(y++)x+y++或x+(y++)

36.(l)uvoidmain,,o

(2)“intm=0144;

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

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

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

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

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

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

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

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

37.⑴应改为“ein.getline(str,120,?);

\n⑵应改为"while(st巾])”。

,,

\n(3)应改为“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(str[i]>=a)”语句是

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

,,

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

38.(1)应添加“public:

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

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

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

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

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

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

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

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

循环永远不会退出。

39.(l)^S^^94€usingnamespacestd;

(2)应改为"outl.open("1.txt",ios::binaryIios::app);"。

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

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

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

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

中,输入、输出方式是在ios类中定义的,所以“outl.open("l.txt",

binaryIapp);”语句缺少类ios,即第2处的语句修改为

“outl.open("l.txt",ios::binaryIios::app);第3个标识应

该用流成员函数put输出字符,所以第3处的语句修改为

“outl.put(s[i]);

40.(1)应改为“TC::TC”。

(2)应改为"voidTC::display”。

⑶应改为“TC::〜TC”。

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

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

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

为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后

的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错

误问题,display函数返回值为void,因此第2处的语句应改为

“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是

在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名

相同,并在前面加“〜”字符,用采与构造函数加以区别,因此第3处

的语句应改为“TC::〜TC”。

41.(1)应改为"TCobjl(l);

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

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

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

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

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

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

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

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

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

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

“obj2.SetNumber(lOO);

42.(1)“staticintn=O"应改为"staticintn;"。

(2)“intCO::n;”应改为"intCO::n=0;

(3)“cout«c.n«endl;"应改为"cout«c->n<<endl;

【解析】本题要在屏幕上输出两个字符,首先要静态变量初始化,第1

处应改为“staticintn;",第2处要给n赋值,第3处输出时引用c的对

象,应改为"cout«c->n«endl;

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

⑵应改为“cateh(inti)”。

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

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

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

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

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

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

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

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

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

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

改为“catch(…)”。

44.(1)应改为"assert(sizeof(sD==4);

\n(2)应改为"assert(sizeof(s2)=lO);

\n(3)应改为"assert(sizeof(s3)=l);

\n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正

常执行输出结果,那么assert函数只有为真,才不会产生中断异常。

“assert(sizeof(sl)=3);"语句中"sizeof(sD==3”为假,这会使程序产生异

常,不能正常执行。

温馨提示

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

评论

0/150

提交评论