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

下载本文档

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

文档简介

2021年吉林省松原市全国计算机等级考试C++语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.派生类的构造函数的成员初始化列表中,不能包含()。

A.基类的构造函数B.派生类中子对象的初始化C.基类中子对象的初始化D.派生类中一般数据成员的初始化

2.以下非法的赋值表达式是

A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;

3.执行下面程序中的输出语句后,a的值是main(){inta;cout<<(a=3*5,a*4,a+5);}

A.65B.20C.15D.10

4.可以用P.a的形式访问派生类对象P的基类成员a,其中a是()。

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

5.下列关于运算符重载的叙述中,错误的是()。

A.有的运算符可以作为非成员函数重载

B.所有的运算符都可以通过重载而被赋予新的含义

C.不得为重载的运算符函数的参数设置默认值

D.有的运算符只能作为成员函数重载

6.为使程序的输出结果为:Base::fun那么应在下列程序画线处填入的正确语句是()。#include<iostream>usingnamespacestd;classBase{public:voidfun(){cout<<"Base::fun"<<end1;}};classDerived:publicBase{public:voidfun(){cout<<"Derived::fun"<<end1;}};intmain(){Basea,*pb;Derivedb;_________;pb->fun();//调用基类的成员函数fun()return0;}

A.pb=&aB.pb=bC.pb=&bD.pb=&Base

7.下列关于线性链表的描述中正确的是()

A.存储空间不一定连续,且各元素的存储顺序是任意的

B.存储空间不一定连续,且前件元素一定存储在后件元素的前面

C.存储空间必须连续,且各前件元素一定存储在后件元素的前面

D.存储空间必须连续,且各元素的存储顺序是任意的

8.下面程序的输出结果是()。#include<iostream>usingnamespacestd;voidswap(intx[2]){intt;t=x[0];x[0]=x[1];x[1]=t;}voidmain(){inta[2]={4,8};swap(a);cout<<a[0]<<""<<a[1];}

A.48B.84C.44D.88

9.在结构化方法中,用数据流程图(DFC)作为描述工具的软件开发阶段是()。

A.可行性分析B.需求分析C.详细设计D.程序编码

10.以下程序的正确运行结果是()。#include<iostream.h>intf(int);voidmain(){inta=2,i;for(i=0;i<3;i++)cout<<f(a)<<"";cout<<endl;}intf(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}

A.777B.71013C.7911D.789

二、单选题(13题)11.下列对重载函数的描述中,错误的是()。

A.重载函数中不允许使用默认参数

B.重载函数中编译是根据参数表进行选择的

C.不要使用重载函数来描述毫不相干的函数

D.构造函数重载将会给初始化带来多种方式

12.程序段“intx=12;doubley=3.141593;printf(”%d%8.6f",X,y);”的输出结果是()。

A.123.141593B.123.141593C.12,3.141593D.123.1415930

13.下列程序的运行结果为()。

#include<iostream.h>

template<classTT>

classFF

{TTa1,a2,a3;

public:

FF(TTb1,TTb2,TTb3){a1=b1;a2=b2;a3=b3;}

TTSum(){returna1+a2+a3;}};

voidmain()

{FF<int>x(int(1.1),2,3),y(int(4.2),5,6);

cout<<x.Sum()<<''<<y.Sum()<<endl;}A.A.6.115.2B.615C.615.2D.6.115

14.下列关于类定义的说法中,正确的是()。

A.类定义中包括数据成员和函数成员的声明

B.类成员的缺省访问权限是保护的

C.数据成员必须被声明为私有的

D.成员函数只能在类体外进行定义

15.下列关于类定义的说法中,正确的是A.类定义中包括数据成员和函数成员的声明

B.类成员的缺省访问权限是保护的

C.数据成员必须被声明为私有的

D.成员函数只能在类体外进行定义

16.下列叙述中错误的是()。

A.软件测试的目的是发现错误并改正错误

B.对被调试的程序进行“错误定位”是程序调试的必要步骤

C.程序调试通常也称为Debug

D.软件测试应严格执行测试计划。排除测试的随意性

17.在C++中,编译系统自动为一个类生成缺省构造函数的条件是()。A.该类没有定义任何有参构造函数

B.该类没有定义任何无参构造函数

C.该类没有定义任何构造函数

D.该类没有定义任何成员函数

18.在深度为7的满二叉树中,叶子结点的个数为A.32B.31C.64D.63

19.已知在一个类体中包含如下函数原型:VOLUMEOPERATOR-(VOLUME)const;,下列关于这个函数的叙述中,错误的是()。

A.这是运算符一的重载运算符函数

B.这个函数所重载的运算符是一个一元运算符

C.这是一个成员函数

D.这个函数不改变类的任何数据成员的值

20.若有以下程序:#include<iostream>usingnamespacestd;classA{private:intx;public:intz;voidsetx(inti){x=i;}intgetx(){returnx;}}:classB:publicA{private:intm;public:intp;voidsetvalue(inta,intb,intc){setx(a);z=b;m=c;}voiddisplay{){cout<<getx()<<","<<z<<","<<m<<end1;}};intmain(){Bobj;obj.setvalue(2,3,4);obj.display();return0;}程序运行以后的输出结果是

A.产生语法错误B.2,3,4C.2,2,2D.4,3,2

21.对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是()。

A.快速排序B.冒泡排序C.直接插入排序D.堆排序

22.有如下类声明:classSAMPLE{intn:public:SAMPLE(inti=0):n(i){}voidsetValue(intnO);};下列关于9etValue成员函数的定义中,正确的是()。A.SAMPLE::setValue(intnO){n=n0;}

B.voidSAMPLE::setValue(int胡){n=n0;

C.voidsetValue(intnO){n=n0;}

D.setValue(intnO){n=n0;}

23.有下列程序:#include<stdi0.h>intb=2;intfun(int*k){b=*k+b;return(b);)voidmain(){inta[10]={1,2,3,4,5,6,7,8},i;for(i=2;i<4;i++){b=fun(&a[i])+b;printf("%d",b);}printf("\n");}程序运行后的输出结果是()。A.1012B.810C.1028D.1016

三、2.填空题(12题)24.将一个函数声明为一个类的友元函数必须使用关键字【】。

25.下面程序的结果为【】。

#include<iostream.h>

voidmain()

{

inta=1,b=2;

boolc=1;

if((a>b)||c)cout<<"true"<<end1;

else

cout<<"false"<<end1;

}

26.下列程序的输出结果是非曲直【】。

#include<iostream,h>

classbase

{

intx,y;

public:

base(inti,intj){x=i;y=j;}

virtualintadd(){returnx+y;}

};

classthree:publicbase

{

intz;

public:

three(inti,intj,intk):base(i,j){z=k;}

intadd(){return(base::add()+z);}

};

voidmain()

{

three*q=newthree(lO,20,30);

cout<<q->add()<<end1;

}

27.软件开发环境是全面支持软件开发全过程的______集合。

28.表达式operator+(x,y)还可以表示为【】。

29.C++语言中的友元函数为在类外访问类中的私有成员和保护成员提供了方便,但破坏了类的______和______。

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

#include<iostream.h>

template<classT>

Tmax(Tx[],intn)

{

inti;

Tmaxv=x[0];

for(i=1;i<n;i++)

if(maxv<x[i])

maxv=x[i];

returnmaxv;

}

voidmain()

{

inta[]={3,2,7,6,8,9};

doubleb[]={1.2,3.4,2.5,7.3,6.8};

cout<<max(a,4)<<","<<max(b,3)<<endl;

}

31.关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、______和自定义完整性。

32.分析以下程序的执行结果【】。

#include<iostream.h>

classSample

{

intx,y;

public:

Sample(){x=y=0;}

Sample(inta,intb){x=a;y=b;}

~Sample()

{

if(x==y)

cout<<"x=y"<<end1;

else

cout<<"x!=y"<<end1;

}

voiddisp()

{

cout<<"x="<<x<<",y="<<y<<end1;

}

};

voidmain()

{

Samples1(2,3);

s1.disp();

}

33.写出执行完下列代码段之后指定变量的值:

boolx=true,y=false,z=false;

x=x&&y||z;

y=x||y&&z;

z=!(x!=y)||(y==z);

则x=false,y=false,z=【】。

34.数据的逻辑结构有线性结构【】两大类。

35.阅读下面程序:

#include<iostream.h>

voidfun1(chara,charb)

{

charc;

c=a;a=b;b=c;

}

voidfun2(char&a,char&b)

{

charc;

c=a;a=b;b=c;

}

voidmain()

{

chara,b;

a='x';b='y';

fun1(a,b);cout<<a<<b;

a='x';b='y';

fun2(a,b);cout<<a<<b;

}

则该程序的输出为______。

四、程序改错题(10题)36.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

{

inti;

public:

TC;

voiddisplay;

~TC;

};

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

TC:TC

{

cout<<"Constructor"<<",";

i=0;

)

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

TC:display

{

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

}

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

TC:TC

{

COUI<<"Destructor"<<endl:

}

voidmain

{

TCa;

a.display;

}

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为Constructor,i=0,Destructor注意:错误的语句在//******error******的下面,修改该语句即可。试题程序:#include(iostream.h)classTC{inti;public:TC;voiddisplay;~TC;};//******error******TC:TC{cout<<"Constructor"<<",";i=0;)//******error******TC:display{tout<<"i="<<i<<","<<endl;}//******error******TC:TC{COUI<<"Destructor"<<endl:}voidmain{TCa;a.display;}

38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:number=1number=10number=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{//********error********TCobjl;objl.Print;TCobj2(3);//********error********objl.number=10;//********error*‰******TC.SetNumber(100);objl.Print;obj2.Print;}

39.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。试题程序:#include<iostream>#include<fstream>//********error********usingstd;voidWriteFile(char*s){ofstreamout1;//********error********out1.open("1.txt",binary|app);for(inti=0;s[i]!=0;i++){//********error********out1.puts(s[i]);}out1.close;}voidClearFile{ofstreamout1;out1.open("1.txt");out1.close;}intmain{chars[1024];ClearFile;cout<<"pleaseinputastrin9:"<<endl;cin.getline(s,1024);WriteFile(s);return0;}

40.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:

sizeof(S1)=5

sizeof(s2)=10

sizeof(s3)=1

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

(1)不能删除assert()语句。

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

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

试题程序:

#include<iostream.h>

#include<assert.h>

voidmain()

{

char*s1="abc":

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

assert(sizeof(s1)==3):

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

chars2[10]="ab":

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

assert(sizeof(s2)==2);

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

chars3=23:

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

assert(sizeof(s3)==4);

cout<<"sizeof(s3)=1"<<endl;

return;

}

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

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

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

//******error******的下面。

试题程序:

#include<iostream>

#include<fstream>

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

usingstd;

voidWriteFile(char*s)

{

ofstreamout1;

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

out1.open("1.txt",binary|app);

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

{

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

out1.puts(s[i]);

}

out1.close;

}

voidClearFile

{

ofstreamout1;

out1.open("1.txt");

out1.close;

}

intmain

{

chars[1024];

ClearFile;

cout<<"pleaseinputastrin9:"<<endl;

cin.getline(s,1024);

WriteFile(s);

return0;

}

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:

number=1

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

{

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

TCobjl;

objl.Print;

TCobj2(3);

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

objl.number=10;

//********error*‰******

TC.SetNumber(100);

objl.Print;

obj2.Print;

}

43.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,但该程序运行有问题,请改正main函数中的错误,使该程序的输出结果正确。程序输出:88注意:错误的语句在/********error********/的下面。修改该语句即可,其他的语句不能修改。试题程序:#include(iostream.h>classCO{public:/********error********/staticintn=0:CO{n++:}~CO{n--:}}:/********error********/intCO::n;voidmain{COobj;COobj2[7];CO*C=NULL:c=&obj:/********error********/eout<<C.n<<endl;cout<<C0::n<<endl;}

44.使用VC++6.0打开考生文件夹下的源程序文件1.cpp。本程序要求输入一个字符串,然后将其中的小写字母改成大写字母,字符可能输入多行,当输入字符“?”时,默认字符输入结束,最后把结果输出到屏幕中。

注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:

#include<iostream.h>

voidmain

{

inti=0;

charstr[120];

cout<<"Enterastringendwith?."<<endl;

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

cin.getline(str,120);

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

while(str)

{

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

if(str[i])=a)

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

i++;

}

cout<<str<<endl;

return;

}

45.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错。请改正程序中的错误,使程序输出的结果为1003732注意:错误的语句在//******error******的下面,修改该语句即可。试题程序:#include<iostream.h>//******error******voidmain{//******error******intm=0142://******error******intn=0X27:intq=32;cout<<m<<endl;cout<<n<<endl;cout<<q<<endl;return;}

五、综合应用题(2题)46.使用VC++6.0打开考生文件夹下的源程序文件3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公有派生。(1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数中请将x赋值给数据成员a。请在注释“//********1********”之后添加适当的语句。(2)定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数值传人。请在注释“//********2********”之后添加适当的语句。(3)定义类A2的构造函数,该构造函数有3个整型的参数x,y和z,在构造函数中请将x赋值给数据成员C,将y和z分别赋值给基类A1构造函数的参数x和y。请在注释“//********3********”之后添加适当的语句。(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员C的值,上述3个值在输出时以空格隔开。请在注释“//********4********”之后添加适当的语句。程序输出结果如下:73738注意:除在指定的位置添加语句之外,请不要改动程序的其他部分。试题程序:#include<iostream.h>classA{inta;public://********1********intgeta{returna;}};classA1:publicA{intb;public://********2********intgetb{returnb;}};classA2:publicA1{intC;public://****,****3********voidshow{//********4********}};voidmain{A2a(8.3.7):cout<<a.geta<<endl:cout<<a.getb<<endl:a.show;}

47.(1)应添加“BA(intm){a=m;}”。

(2)应添加“PAl(intm,intn):BA(n){b=m;}”。

(3)应添力Ⅱ“PA2(intm,intn,intk):PAl(n,k){C=m;)”。

(4)应添加“cout<<geta<<""<<getb<<""<<C<<endl;”。

【解析】根据第1处要求,构造函数的函数名和类名一致,显然BA构造函数的名称为BA,在BA中通过参数m完成对成员变量a的赋值,因此构造函数的名称为BA(intm),在函数内部对成员a赋值,故第1处的语句应添加“BA(intm){a=m;)”。根据第2处的要求,构造函数的形式为“PAl(intm,intn)”,m赋值给PA1类成员b,将n作为基类BA构造函数的参数值传入,故第2处应添加“PA1(intm,intn):BA(n){b=m;}”。根据第3处的要求,函数形式为PA2(intm,intn,intk),在构造函数中将m赋值给数据成员c,将n和k分别赋值给基类PA1构造函数的参数m和n,因此第3处应添加“PA2(intm,intn,intk):PA1(n,k){C=m;}”。根据第4处的要求,PA2类公有派生于PA1,而PA1公有派生于BA,因此在PA2类中可以调用基类的geta和getb来获得基类私有成员a和b,再输出PA2的私有成员C即满足要求,因此第4处应添加“cout<<geta<<""<<getb<<""<<C<<endl;”。

六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test8_3,此工程包含一个源程序文件test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅读已有的代码,按要求完成下列操作,将程序补充完整。

(1)定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。请在注释“//**1**”之后添加适当的语句;

(2)完成类Table的成员函数prin()的定义,该函数以“x*y=z”的格式打印出九九表中的一个乘法算式,请使用格式化输出函数prinff实现,在注释“//**2**”之后添加适当的语句;

(3)完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕,请在注释“//**3**”之后添加适当的语句;

(4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释“//**4**”之后添加适当的语句。

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

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

#include<iostream.h>

#include<stdio.h>

classTable

{

//**1**

intz;

public:

voidprint(intx,inty,intz);

};

voidTable::print(intx,inty,intz)

{

//**2**

}

classTable9:publicTable

{

public:

voidprint();

};

voidTable9::print()

{

//**3**

intx,y,z;

for(i=1;i<1O;i++)

{

for(j=1;j<i+1;j++)

{

x=i;

y=j;

z=i*j;

Table::print(y,x,z);

}

printf("\n");

}

}

main()

{

//+*4**

return0;

}

49.使用VC6打开考生文件夹下的工程test9_3,此工程包含一个源程序文件test9_3.cpp,其中定义了Circle类与Money类,Circle类可对半径为r的圆进行周长与面积的计算,而Money类用于计算一圆形游泳池的造价。游泳池四周有原形过道,过道外围上栅栏,过道宽度为3米,根据键入的游泳池半径,每米栅栏价格及每平方米过道价格,即可计算出游泳池的造价。请按要求完成下列操作,将程序补充完整。

(1)定义符号常量PI(值为3.14159f)与WIDTH(值为3.00f),分别用于表示圆周率与过道的固定宽度。请在注释“//**1**”之后添加适当的语句。

(2)定义Circle类默认构造函数,把私有成员radius初始化为参数r的值。请在注释“//**2**”后添加适当的语句。

(3)完成Money类默认构造函数的定义,把私有成员FencePrice(每米栅栏的价格)、ConcretePrice(每平方米过道的价格)初始化为参数f,c的值。请在注释“//**3**”之后添加适当的语句。

(4)完成Money类成员函数floatMoney::TotalMoney(noatfencelen,floatconarea)的定义,根据参数fencelen(栅栏的长度)和conarea(过道的面积),返回栅栏与过道的总造价。请在注释“//**4**”之后添加适当的语句。

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

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

#include<iostream.h>

//**1**

classCircle

{

private:

floatradius;

public:

//**2**

floatCircumference(){return2*PI*radius;)

floatArea(){returnPI*radius*radius;)

};

classMoney

{

private:

floatFencePrice;

floatConcretePrice;

public:

Money(floatf,floatc);

floatTotalMoney(floatfencelen,floatconarea);

};

Money::Money(floatf,floatc)

{

//**3**

}

floatMoney::TotalMoney(floatfencelen,floatconarea)

{

//**4**

}

voidmain()

{

floatradius,fence,concrete;

cout.setf(10s::fixed);

cout.setf(ios::showpoint);

cout.precision(2);

cout<<"Entertheradiusofthepool:";

cin>>radius;

cout<<"EntertheFencePrice:";

cin>>fence;

cout<<"EntertheConcretePrice:";

cin>>concrete;

CirclePool(radius);

CirclePoolRim(radius+WIDTH);

Moneymon(fence,concrete);

floattotalmoney=mon.TotalMoney(PoolRim.Circumference(),(PoolRim.Area()-P00l.Area()));

cout<<"ThetotalmoneyisRMB"<<totalmoney<<endl;

}

参考答案

1.C解析:构造函数的主要作用是对数据成员初始化。在设计派生类的构造函数中,不仅要考虑派生类所增加数据成员的初始化,还应考虑基类中构造函数的初始化。子对象是对象中的对象,子对象的初始化是在建立派生类时通过调用派生类构造函数来实现。所以派生类构造函数的任务包括3部分,对基类数据成员初始化;对子对象数据成员初始化;对派生类数据成员初始化。即本题选择选项C)。

2.C解析:对于任何一种赋值运算,其赋值号或复合赋值号左边必须是一个左值。左值是指具有对应的可由用户访问的存储单元,并且能够由用户改变其值的量。而在C)选项中赋值号对应的是表达式“i+1”,不是一个左值,因此是非法的赋值表达式。

3.B解析:本题考查逗号表达式的运算特点。逗号表达式是所有表达式中优先级最低的,从左到右结合,其求解过程是:将逗号表达式各表达式按从左到右的顺序依次求值,并将最右边的表达式结果作为整个逗号表达式的结果。这里考生要注意的是,第二个表达式执行完后,n的值并没有发生变化,依然是15,所以在执行a+5的时候,结果是20,而不是65。有的考生可能误选A。正确答案应是B。

4.DD。【解析】只有公有继承的公有成员才能被派生类的对象直接访问,其他的情况都会因为访问权限问题产生错误。

5.B解析:此题考查的是运算符的重载。C++中运算符重载是多态性的一种表现,在C++语言中,“.”、“.*”、“->”、“::”、“?:”这5个运算符不能重载,所以选项B)错误。由于很多符号是一元运算符和二元运算符公用的,为了避免含混,不得为重载的运算符函数设置默认值,调用时也就不得省略实参。其中“=”、“[]”、“->”及所有的类型转换运算符只能作为成员函数重载:如果允许第一操作数不是同类对象,而是其他数据类型,则只能作为非成员函数重载。

6.C解析:本题程序中类Derived是从基类Base公有继承的。主函数中定义了一个基类对象a和一个指向基类对象的指针pb,又定义了一个派生类Derived对象b。当pb指向对象b时,pb->fun()调用基类Base的成员函数fun()。这是由于Derived是Base的子类型,因此可以将派生类Derived的对象b的地址赋值给指向基类Base的指针pb,但这时指针pb只能使用从基类Base继承的成员。

7.A解析:线性表的链式存储结构中的结点空间是动态生成的,它们在内存中的地址可能是连续的,也可能是不连续的。

8.B解析:数组名作为函数参数属于地址传递,形参、实参共用同一内存空间。

9.B解析:数据流程图是描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,在需求分析时使用。

10.D

11.AA。【解析】选项A中,重载函数中是允许使用默认参数的;为了使重载函数有意义,不要使用重载函数来描述毫不相干的函数;重载函数中编译是根据参数表进行选择的,包括参数的个数和类型。

12.AA。【解析】根据输出函数printf中对输出数值格式的要求,第一个数和第二数之间没有空格或分隔号,因而此题答案为选项A。

13.BB。【解析】本题考查模板函数的应用,表达式int(1.1)和int(4.2)用于将1.1和4.2强制转换为整型。

14.A解析:本题考查的知识点是:类的定义。类中缺省的访问权限是私有的(private),所以选项B)不正确:类的数据成员和函数成员的访问控制权限均可被声明为公有(public)、私有(priate)和保护(protected)中的任意一种,所以选项C)不正确;成员函数的实现即可以在类体内定义,也可以在类体外定义,所以选项D)不正确。故本题应该选择A。

15.A解析:本题考查的知识点是:类的定义。类中缺省的访问权限是私有的(private),所以选项B)不正确:类的数据成员和函数成员的访问控制权限均可被声明为公有(public)、私有(priate)和保护(protected)中的任意一种,所以选项C)不正确;成员函数的实现即可以在类体内定义,也可以在类体外定义,所以选项D)不正确。故本题应该选择A。

16.AA。【解析】软件测试是为了发现错误而执行程序的过程。软件测试要严格执行测试计划,排除测试中的随意性。程序凋试通常也称Debug,对被调试的程序进行“错误”定位是程序调试的必要步骤。

17.C解析:在类定义时没有定义任何构造函数时,则编译器自动生成一个不带参数的缺省构造函数,其格式如下:

<类名>::<缺省构造函数名>()

按构造函数的规定,缺省构造函数名同类名。缺省构造函数的这种格式也可由程序员定义在类体中。在程序中定义一个对象而没有指明初始化时,则编译器便按缺省构造函数来初始化该对象。用缺省构造函数对对象初始化时,则将对象的所有数据成员都初始化为零或空。

18.C在满二叉树中每层的结点数都达到最大值,而且叶子结点全部出现在最底层。第l层(根结点所在的层)有20个结点,第2层有21个结点,……第n层有2n-1个结点。在深度为7的满二叉树中,第7层有27-l=64个结点(全部是叶子结点)、在深度为7的满二叉树中,共有27—1=127个结点、因此本题的正确答案是C

19.BB。【解析】本题考核运算符的重载。题中语句为运算符一这是一个二元运算符,且是作为常成员函数来重载的,所以它不能更新对象的数据成员,也不能调用该类中没有用const修饰的成员函数。

20.B解析:本题考核继承与派生。当类的继承方式为公有继承时,基类的公有成员和保护成员分别作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们。其他外部使用者只能通过派生类的对象访问继承来的公有成员。在本题中,数据成员z和函数setx都是基类A的公有成员,它们经过公有继承以后,在派生类B中还是公有成员,而派生类B中的函数setvalue和display都是公有成员,可以通过对象对它们进行访问。所以程序中对各成员的访问是正确的。本程序的功能是输出已设置的各成员的值。

21.D各种排序方法中最坏情况下需要比较的次数分别为:冒泡排序n(n-1)/2、快速排序n(n-1)/2、简单插入排序n(n-1)/2、希尔排序0(n1.5)、简单选择排序n(n-1)/2、堆排序O(nlog2n)

22.B本题考查在类外定义类的成员函数,需要使用作用域限定符“::”,属于基础知识,本题答案为8。

23.CC。【解析】在程序中子函数fun(int*k)的作用是给静态全局变量加上形参*k的值。在主函数中进行第一次for循环执行时,fun(&a[2])的返回值为5,所以5+5=10,\r\n因而输出结果为10,第二次for循环执行时,fun(&a[3])的返回值为14,所以14+14=28。

24.A或者friendA或者friend解析:友元的定义。

25.真真解析:本题考查的是对于逻辑运算符号的理解,“||”运算符的任何一边取值为真,则整个运算结果为真。

26.6060解析:本题考察继承中子类对父类的继承方式,注意子类的add成员函数,它直接使用了父类的成员函数进行运算。

27.软件工具软件工具解析:软件开发环境或称软件工程环境是全而支持软件开发全过程的软件工具集合。这些软件工具按照一定的方法或模式组合起来,支持软件生命周期内的各个阶段和各项任务的完成。

28.x+yx+y解析:本题考查的是运算符函数的调用,可以像一般函数那样用函数名进行调用,也可通过运算符构成表达式的形式进行调用。

29.隐藏性、封装性隐藏性、封装性

30.73.47,3.4解析:函数的功能是求出数组中指定范围的元素中的最大值。所以在a数组中前四个数据中最大值为7,数组b中前3个元素中最大值为3.4。

31.参照完整性参照完整性

32.x=2y=3x!=y

33.真真解析:本题考核C++运算符运算优先级和结合性。执行语句“x&&y||z;”后,x的值变为false。执行“x||y&&z”后,y的值变为false,执行“!(x!=y)||y==z);”后,z的值变为true

34.非线性结构非线性结构

35.xyyxxyyx解析:由程序main主函数入手,首先调用fun1函数,输出结果。然后调用fun2函数,输出结果。在函数fun1声明中出现的参数为形参,调用结束后,形参单元被释放,实参单元仍维持原值。也就是fun1函数中的“c=a;a=b;b=c;”交换结果并不能改变主函数中a,b实参的值,“a='x';b='y';”输出为xy。函数voidfun2(char&a,char&b)声明中的为实参的地址.所以在函数中调用交换语句后,实参值改变,即输出为yx。

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

\n(2)应改为“voidTC::display”。

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

\n【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使用格式为“(类名)::<成员函数>((参数函数)),因此第1处应改为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错误问题,display函数返回值为void,因此第2处的语句应改为“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,并在前面加“~”字符,用采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

37.(1)应改为“TC::TC”。(2)应改为“voidTC::display”。(3)应改为“TC::~TC”。【解析】在类的外部定义成员函数时,必须在成员函数前面加上类名和作用域运算符“::”,作用域运算符用采表示某个成员属于哪个类,使用格式为“(类名)::<成员函数>((参数函数)),因此第1处应改为“TC::TC”,默认构造函数没有参数。由第2处“TC::display”后的语句看,这是在类外实现TC函数,因此也有作用域运算符使用错误问题,display函数返回值为void,因此第2处的语句应改为“voidTC::display”。由第3处的语句“TC::TC”可知,显然这里是在类外实现析构函数,析构函数是一个特殊的函数,它的名称和类名相同,并在前面加“~”字符,用采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

38.(1)应改为“TCobjl(1);”。(2)应改为“0bj1.SetNumber(10);”。(3)应改为“0bj2.SelNumber(100);”。【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。

39.(1)应改为“usingnamespacestd;”。(2)应改为“outl.open("1.txt",ios::binary|ios::app);”。(3)应改为“out1.put(s[i]);”。【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open("1.txt",binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open("1.txt",ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。

40.(1)应改为“assert(sizeof(s1)==4);”。

\n(2)应改为“assert(sizeof(s2)==1O);”。

\n(3)应改为“assert(sizeof(s3)==1);”。

\n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert函数只有为真,才不会产生中断异常。“assert(sizeof(s1)==3);”语句中“sizeof(s1)==3”为假,这会使程序产生异常,不能正常执行。因为str1的值为abc,但是它还有一个尾符,它的长度应该是4,而不是3,所以在第1处修改为“assert(sizeof(s1)==4);”。str2[10]说明,str2的空间为10,在第2处修改为“assert(sizeof(s2)==10);”。charstr3=23;语句说明23是字符,所占存储空间为1,所以修改为“assert(sizeof(s3)==1);”。

41.(1)应改为“usingnamespacestd;”。

\n(2)应改为“outl.open('1.txt',ios::binary|ios::app);”。

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

\n【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,对于C++中引入标准命名空间的格式,缺少namespace,所以第1处的语句修改为“usingnamespacestd;”。第2处,调用成员函数open中,输入、输出方式是在ios类中定义的,所以“out1.open('1.txt',binary|app);”语句缺少类ios,即第2处的语句修改为“out1.open('1.txt',ios::binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所以第3处的语句修改为“out1.put(s[i]);”。

42.(1)应改为“TCobjl(1);”。

\n(2)应改为“0bj1.SetNumber(10);”。

\n(3)应改为“0bj2.SelNumber(100);”。

\n【解析】本题第1处的“TCobjl;”语句是声明TC类的对象0bj1,根据TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输出结果两1,所以补全参数1,即第1处的“TCobjl(1);”。第2处处的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中成员函数的使用形式应该是:对象名.成员函数,所以修改为“obj1.SetNumber(10);”。类是对象的抽象,而对象是类的具体实例。第3处“TC.SetNumber(100);”语句中的TC为类,并不是对象,这里应该使用定义的对象,即obj2,所以将语句修改为“obj2.SetNumber(100);”。

43.(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;”。

44.(1)应改为“ein.getline(str,120,?);”。

\n(2)应改为“while(str[i])”。

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

\n【解析】本题中要求以输入字符“?”为结束符,用于字符输入的流成员函数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

温馨提示

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

评论

0/150

提交评论