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

下载本文档

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

文档简介

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

一、1.选择题(10题)1.下列关于队列的叙述中正确的是______。A.在队列中只能插入数据B.在队列中只能删除数据C.队列是先进先出的线性表D.队列是先进后出的线性表

2.若语句cout<<setfill('>')<<setw(5)<<3141512<<setw(5)<<”OK!”;是程序中第一个输出语句,则输出结果是______。

A.3141512>>OK!B.31415120K!>>C.314150K!>>D.31415>>OK!

3.下列while循环的次数是()。while(inti=0)i--;

A.0B.1C.5D.无限

4.有以下程序:#include<iostream>usingnamespacestd;classBASE{private:charc;public:BASE(charn):c(n);{}virtual~BASE(){cout<<c;}};classDERIVED:publicBASE{charc;p

A.XYB.YXC.XD.Y

5.结构化程序设计的主要特点是

A.每个控制结构要模块化B.每个控制结构具有封装性C.每个控制结构具有独立性D.每个控制结构只有一个入口和一个出口

6.对于循环队列,下列叙述中正确的是()。

A.队头指针是固定不变的

B.队头指针一定大于队尾指针

C.队头指针一定小于队尾指针

D.队头指针可以大于队尾指针,也可以小于队尾指针

7.下列有关数据库的描述,正确的是______。

A.数据库是一个DBF文件B.数据库是一个关系C.数据库是一个结构化的数据集合D.数据库是一组文件

8.()复审应该把重点放在系统的总体结构、模块划分、内外接口等方面。

A.详细设计B.系统设计C.正式D.非正式

9.有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)()。

inta[10]={0,1,2,3,4,5,6,7,8,9},*P=a;

A.a[P-a]B.*(&a[i])C.P[i]D.*(*(a+i))

10.以下叙述中正确的是

A.构成C程序的基本单位是函数

B.可以在一个函数中定义另一个函数

C.main()函数必须放在其他函数之前

D.所有被调用的函数一定要在调用之前进行定义

二、单选题(13题)11.有如下类定义:classMyClass{intvalue;public:MyClass(intn):value(n){}intgetValueconst{retumvalue;}};则类MyClass的构造函数的个数是()。A.1个B.2个C.3个D.4个

12.有以下程序()。#include<iostream.h>intf(intn){if(n==1)returnl;elsereturnf(n-1)+1;}voidmain(){inti,j=-;for(i=1;i<3;i++)j+=f(i);cout<j<<endl;}程序运行后输出结果是()。

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

13.若函数中有定义语句“intk;”.则()。

A.系统将自动给k赋初值0B.这时k中的值无定义C.系统将自动给k赋初值-1D.这时k中无任何值

14.

15.关于关键字class和typename,下列表述正确的是A.程序中所有的typename都可以替换为class

B.程序中所有的class都可以替换为typename

C.A)和B)都正确

D.A)和B)都不正确

16.有如下程序:

#include+

usingnamespacestd;

#include

usingnamespacestd;

classBase

{

public:

voidfun(){cout<<"Base::fun"<

};

classDerived:publicBase

{

public:

voidfun()

{

cout<<"Derived::fun"<

}

};

intmain()

{

Derivedd;

d.fun();

return0;

}

已知其执行后的输出结果为:

Base::fun

Derived::fun

则程序中下划线处应填入的语句是A.Base.fun();B.Base::fun()C.Base->fun()D.fun();

17.某二叉树有5个度为2的结点,则该二叉树中的叶子结点数是A.10B.8C.6D.4

18.执行下列程序后,w的值为()。intw=A,x=14,y=15;w=((x‖y)&&(w<a));A.-1B.NULLC.1D.0

19.下列说法正确的是

A.一个关系可以有多个候选键(码)

B.一个关系只有一个候选键(码)

C.一个关系所有属性是候选键(码)

D.一个关系所有属性都不是候选键(码)

20.下列有关继承和派生的叙述中,正确的是()。

A.派生类不彘访问基类的保护成员

B.作为虚基类的类不能被实例化

C.派生类应当向基类的构造函数传递参数

D.虚函数必须在派生类中重新实现

21.有三个关系R、S和T如下:

由关系R和S通过运算得到关系T,则所使用的运算为()。

A.笛卡尔积B.交C.并D.自然连接

22.下面程序的输出结果是()。#include<iostreanl.h>classexample{inta;public:example(intB.{a=b++;}voidprint{a=a+1;eout<<a<<””;}voidprintconst{cout<<a<<””;}};voidmain{examplex(3);constexampleY(2);Aprint;Bprint;}A.22B.43C.42D.32

23.若有以下程序:

执行后的输出结果是()。A.8,6B.8,3C.6,4D.7,4

三、2.填空题(12题)24.以下程序的执行结果是【】。

#include<iostream.h>

template<classT>

classSample

{

Tn;

public:

Sample(Ti){n=i;)

voidoperator();

voiddisp(){cout<<"n="<<n<<endl;)

};

template<classT>

voidSample<T>::operator()

{

n=1;//不能用n;因为double型不能用

}

voidmain()

{

Sample<char>S('a');

S;

s.disp();

}

25.如果类B继承了类A,则称类A为类B的基类,类B称为类A的【】。

26.若要在C盘根目录下作为二进制文件打开文件test.dat,则应该用的语句是【】。

27.有以下程序:

#include<iostream>

usingnamespacestd;

voidt(intx,inty,intcp,intdp)

{

cp=x*x+y+y;

dp=x*x-y*y;

}

intmain()

{

inta=4,b=3,c=5,d=6;

t(a,b,c,D);

cout<<c<<","<<d<<end1;

return0;

28.在深度为5的完全二叉树中,叶子结点的个数最多为【】。

29.实体之间的联系可以归结为一对一的联系,一对多的联系与多对多的联系。如果一个学校有许多学生,而一个学生只归属于一个学校,则实体集学校与实体集学生之间的联系属于【】的联系。

30.有以下程序:

#include<iostream>

usingnamespacestd;

constxntN=5;

intfun(char*s,chara,intn)

{

intj;

*s=a;j=n;

while(a<s[j])

j--;

returnj;

}

intmain()

{

chars[N+1];

intk;

31.在下面程序的横线处填上适当的内容,使程序执行后的输出结果为ABCD。

#include<iostream.h>

usingnamespacestd;

classA

{

public:A(){cout<<'A';

};

classB:______

{

public:B(){cout<<'B';}

};

classC:______

{

public:C(}cout<<'C';}

};

classD:publicB,publicC

{

public:D(){cout<<'D';}

};

voidmain(){Dobj;}

32.人员基本信息一般包括身份证号、姓名、性别、年龄等。其中可以作为主关键字的是______。

33.当执行以下程序后,i的值是5,j的值是4,k的值是【】。

inta,b,c,d,i,j,k;

a=10;b=c=d=5;i=j=k=0;

for(;a>b;++b)i++;

while(a>++c)j++;

do{

k++;

}while(a>d++);

34.多态性分为两类:编译时的多态性和【】。

35.数据库设计分为以下6个设计阶段:需求分析阶段、【】、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。

四、程序改错题(10题)36.使用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;}

37.使用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;

}

38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

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

试题程序:

#include<iostream.h)

intmain

{

try

{

throw("error");

}

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

catch(chars)

{

cout<<s<<endl;

}

try

{

throw((int)0);

}

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

catch

{

cout<<i<<endl;

}

try

{

throw(O);

throw("error");

}

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

catch

{

cout<<"ERROR"<<endl;

}

return0;

}

39.使用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;}

40.使用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;

}

41.使用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;

}

42.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正程序中的错误,使得程序输出:

9,8,7,6,5

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

试题程序:

#include(iostream.h>

classTC

{

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

TC(inti)

{

m_i=i;

}

voidprint

{

cout<<--m_i<<,;

}

public:

intm_i;

};

intmain

{

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

inti;

TC04(10);

while(i>5)

{

/********errOr********/

i++:

04.print;

}

cout<<endl;

return0;

}

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函数中的错误,使程序的输出结果为:

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;

}

45.使用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;

}

五、综合应用题(2题)46.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中包含了类IntegerSet和主函数main的定义。一个IntegerSet对象就是一个整数的集合,其中包含0个或多个无重复的整数;为了便于进行集合操作,这些整数按升序存放在成员数组elem的前若干单元中。成员函数add的作用是将一个元素添加到集合中(如果集合中不存在该元素),成员函数remove从集合中删除指定的元素(如果集合中存在该元素)。请编写成员函数remove。在main函数中给出了一组测试数据,此时程序的正确输出结果应为:234527283166752345627283156752345619272831667534561927283166753456192728316675要求:补充编制的内容写在“//***********333***********”与“//***********666***********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//IntegorSet.h#ifndefINTEGERSET#defineINTEGERSET#include<iostream>usingnamespacestd;constintMAXELEMENTS=100;//集合最多可拥有的元素个数classIntegerSet{intelem[MAXELEMENTS];//用于存放集合元素的数组intcounter;//用于记录集合中元素个数的计数器puhlic:IntegerSet:counter(0){}//创建一个空集合IntegerSet(intdata[],intsize);//利用数组提供的数据创建一个整数集合voidadd(intelement);//添加一个元素到集合中voidremeve(intelement);//删除集合中指定的元素intgetCountconst{returncounter;}//返回集合中元素的个数intgetElement(inti)const{retumelem[i];}//返回集合中指定的元素voidshowconst;};voidWriteToFile(char*);#endif//main.cpp#include”IntegerSet.h”#include<inmanip>IntegerSet::IntegerSet(intdata[],intsize):counter(0){for(inti=0;i<size;i++)add(data[i]);}}voidIntegerSet::add(intelement){intj;//从后往前寻找第一个小于等于element的元素for(j=counter;j>0;j-)if(element>=elem[j一1])break;//如果找到的是等于element的元素,说明要添加的元素已经存在,直接返回if(j>0)if(element==elem[j-1])return;//如果找到的是小于element的元素,j就是要添加的位置//该元素及其后面的元素依次后移,腾出插入位置for(intk=counter;k>j;k一)elem[k]=elem[k一1];elem[j]=element;//将element插入到该位置counter++;//计数器加l}voidIntegerSet::remove(intelement){//***************333***************//***************666***************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,11);S.show;S.add(6);s.show;S.add(19);S.show;S.remove(2);s.show;S.add(4);S.show;writeToFile(””);return0;}

47.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的DataList类,是一个用于表示数据表的类。DataList的重载运算符函数0perator+,其功能是求当前数据表与另一个相同长度的数据表之和;即它返回一个数据表,其每个元素等于相应两个数据表对应元素之和。请编写这个operator+函数。程序的正确输出应该是:两个数据表:1,2,3,4,5,63,4,5,6,7,8两个数据表之和:4,6,8,10,12,14要求:补充编制的内容写在“//********333********”与“//********666********”之间,不得修改程序的其他部分。注意:程序最后将结果输出到文件。ut.dat中。输出函数writeToFile已经编译为。bj文件,并且在本程序中调用。//DataList.h#inClude<iostream>usingnamespaCestd;ClaSSDataList{//数据表类intfen;double*d;publiC:DataList(intlen,doubledata[]=NULL);DataList(DataList&data);intlengthConst{retumlen;}doublegetElement(inti)Consttreturnd[i];}DataListoperator+(ConstDataList&list)Const;//两个数据表求和voidshowConst;//显示数据表};voidwriteToFile(Char$,ConstDataList&);//main.Cpp#inClude”DataList.h”DataList::DataList(intlen,doubledata[]):len(ien){d=newdouble[1en];for(inti=0;i<len;i++)d㈨i=(data==NULL?0.0:data[i]);}DataList::DataList(DataList&data):len(data.1en){d=newdouble[1en];for(inti=0;i<len;i++)d[i]=data.d[i];DataListDataList::0perator+(Con8tDataList&list,)Const{//两个数据表求和double*dd=newdouble[1ist.1ensth];//********333********//********666********returnDataList(1ist.1ength,dd);}voidDataList::showConst{//显示数据表fr(int。i=0;i<len-1;i++)eout<<d[i]<<”,”;Cout<<d[1en-1]<<endl;intmain{doublesl[]={1,2,3,4,5,6};doubles2[]={3,4,5,6,7,8};DataListlist1(6,sl),list2(6,s2);//定义两个数据表对象eout<<”两个数据表:”<<endl:listl.show:list2.show;eout<<endl<<”两个数据表之和:”<<endl:(1istl+list2).show;writeToFile(””,listl+list2);return0:

六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test18_3,此工程包含一个源程序文件test18_3.cpp,其中定义了用于表示雇员的类Employee,但类Employee的定义并不完整。请按要求完成下列操作,将类Employee的定义补充完整。

(1)补充类Employee的构造函数,请使用字符串函数将数据成员name,address,city,province和zipcode分别初始化为参数*nm,*addr,*city,*prov和*zip的值。请在注释“//**1**”之后添加适当的语句;

(2)完成类Employee的成员函数ChangeName(char*newName)的定义,将newName指向的内容赋值给数据成员name,请在注释“//**2**”之后添加适当的语句;

(3)完成类Employee的成员函数Display()的定义,先使用指针buffer动态申请一个char型的200单位大小的空间,然后使用字符串函数将数据成员name和address依次复制其中,最后返回该指针buffer,将请在注释“//**3**”之后添加适当的语句。输出结果如下:

王东建国路大街105号

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

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

#include<iostream.h>

#include<string.h>

classEmployee{

protected:

charname[20];

charaddress[100];

charcity[20];

charprovince[20];

charzipcode[10];

public:

Employee(char*nm,char*addr,char*city,char*prov,char*zip);

voidChangeName(char*newName);

char*Display();

};

Employee::Employee(char*nm,char*adr,char*cit,char*prov,char*zip)

{

//**1**

strcpy(city,cit);

strcpy(province,prov);

strcpy(zipcode,zip);

}

voidEmployee::ChangeName(char*newName)

{

//**2**

}

char*Employee::Display()

{

//**3**

strcat(buffer,address);

returnbuffer;

}

voidmain()

{

Employeeemp("李华","建国路大街105号","石家庄","河北","103400");

emp.ChangeName("王东");

cout<<emp.Display()<<end1;

}

49.使用VC6打开考生文件夹下的工程test27_3。此工程包含一个test27_3.cpp,其中定义了类ARRAY,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)完成类ARRAY的带一个参数的构造函数,参数i为int型,如果i不是正数则输出错误信息并退出,否则申请int型的大小为i的空间,然后把i赋值给类的数据成员num。请在注释“//**1**”之后添加适当的语句。

(2)完成类ARRAY的拷贝初始化构造函数,注意解决重复删除的问题,请在注释“//**2**”之后添加适当的语句。

(3)完成类ARRAY的重载的运算符函数[],参数i为int型,如果i超界则输出错误信息并退出,否则把下标为i的元素返回,请在注释“//**3**”之后添加适当的语句。

(4)完成类ARRAY的重载的运算符函数二,同样需要注意解决重复删除的问题,不能只是简单的赋值,请在注释“//**4**”之后添加适当的语句。

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

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

#include<iostream.h>

#include<stdlib.h>

classARRAY

{

private:

int*p,num;

public:

ARRAY(){p=newint[10],num=10;}

ARRAY(inti)

{

//**1**

{

cout<<“错误!数组长度应为正。\n”;

exit(0);

}

p=newint[i];

num=i;

}

ARRAY(constARRAY&a);

int&operator[](inti);

~ARRAY(){deletep;}

ARRAY&operator=(constARRAY&a);

friendARRAYoperator+(ARRAY&a,ARRAY&b);

friendostream&operator<<(ostream&os,ARRAY&a);

};

ARRAY::ARRAY(constARRAY&a)

{

//**2**

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

p[i]=a.p[i];

}

int&ARRAY::operator[](inti)

{

//**3**

{

cout<<“越界访问!”;

exit(0);

}

returnp[i];

}

ARRAY&ARRAY::operator=(constARRAY&a)

{

num=a.num;

p=newint[num];

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

p[i]=a.p[i];

//**4**

}

ARRAYoperator+(ARRAY&a,ARRAY&b)

{

if(a.num!=b.hum)

{

cout<<“数组长度不相同!”<<end1;

exit(0);

}

ARRAYt(a.num);

for(inti=0;i<a.num;i++)

t.p[i]=a.p[i]+b.p[i];

returnt;

}

ostream&operator<<(ostream&os,ARRAY&a)

{

inti=0;

for(;i<a.num;i++)

{

cout<<a.p[i]<<'';

if(!((i+1)%10))cout<<end1;

}

returnos;

}

voidmain()

{

ARRAYa(3);

a[0]=a[1]=a[2]=3;

cout<<'a'<<a<<end1;

ARRAYb(a);

cout<<'b'<<b<<end1;

ARRAYc(2);

c=a+b+b;

cout<<'c'<<c<<end1;

c=((b=(a+b))+c);

cout<<'a'<<a<<'b'<<b<<'c'<<c<<end1;

参考答案

1.C队列是指允许在一端进行插入、而在另一端进行删除的线性表,选项A和选项B错误。允许插入的一端称为队尾,允许删除的一端称为队头。在队列中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。所以,队列又称为“先进先出”或“后进后出”的线性表,它体现了“先来先服务”的原则,选项C正确,选项D错误。

2.A解析:输入/输出流的操作。

3.A

4.A解析:在C++中,由于析构函数不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数的顺序正好相反。在此题的程序中,在主函数结束时,派生类DERIVED对象obj将被删除,所以就会调用对象的析构函数。先调用派生类的析构函数,输出X,然后调用基类的析构函数,输出Y。

5.D解析:结构化程序设计要求把程序的结构限制为顺序、选择和循环三种基本结构,以便提高程序的可读性。这种结构化程序具有以下两个特点:首先,以控制结构为单位,只有一个入口和一个出口,使各单位之间的接口比较简单,每个单位也容易被人们所理解;其次,缩小了程序的静态结构与动态执行之间的差异,使人们能方便、正确地理解程序的功能。本题的正确答案是D。

6.D循环队列的队头指针与队尾指针都不是固定的,随着入队与出队操作要进行变化。因为是循环利用的队列结构,所以队头指针有时可能大于队尾指针,有时也可能小于队尾指针。

7.C解析:数据库(Database,简称DB)是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。数据库中的数据具有“集成”、“共事”之特点。

8.B

9.D解析:本题考查数组指针的应用。选项D)第一层括号中为数组a中第i项元素的值,外面再加指针运算符没有意义。

10.A解析:本题综合考查C语言的概念部分,关于C语言,我们应该了解以下必须要掌握的基础知识:

①C程序是由函数构成的。

②一个函数由两部分组成:函数的首部和函数体。

③一个C程序总是从main函数开始执行的,而不论main函数的整个程序中的位置如何(main函数可以放在程序最开始,也可以放在程序最后,或写在一些函数之前,在另一些函数之后)。

④C程序在书写上,表现形式比较自由,一行内可以写几个语句,一个语句可以分写在几行上。每个语句和数据定义的最后必须有一个分号。

⑤C程序本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成。

⑥可以用/*……*/对C语言的程序的任何部分作注释。

11.B本题考查类的默认构造函数和自定义的构造函数、本题中MyClass(intn):value(n){}为自定义的构造函数,加上默认构造函数,一共有2个构造函数。

12.B

13.BB。【解析】根据题目,若以这种方式定义变量k时,编译程序仅为k开辟存储单元,并未在存储单元中存放任何初始值,所以变量中的值无意义,称变量值“无定义”。所以正确答案为选项B。

14.C(29)C)【解析】由主函数majn入手,定义TestClassl\r\n\r\n类的指针对象p指向派生类TestClass2。因为基类和派生类中都有fun\r\n\r\n函数,题目要求输出为2,就是基类对象访问派生类中fun函数。通\r\n\r\n过虚函数与指向基类对象的指针变量的配合使用,就能方便调用同\r\n\r\n名函数。所以这里将基类中的fun函数声明为virtual。并且当一个成\r\n\r\n\r\n\r\n员函数被声明为虚函数后,其派生类中的同名函数自动成为虚函数。

15.A解析:本题考核模板的概念。C++中,模板形参具有三种形式:(1)typename<参数名>,(2)class<参数名>,(3)<类型修饰符><参数名>,前两种形式是等价的,在声明模板参数时,关键字typename和class可以互换。但是在定义类的程序中,关键字class代表的含义是类,此时不能用typename代替。

16.B

17.C根据二叉树的性质,在任意二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。

18.CC。【解析】把x和y化为二进制,X=14表示为1110,y=15表示为1111,所以x‖y=1,A的ASCIl是65,a的ASCIl是97,所以A<a=1,因此W=1。

19.A解析:一个关系可以有多个候选键(码),但不能所有属性都是或都不是候选键(码)。

20.C派生类可以访问基类的保护成员,而不能访问基类的私有成员。作为虚基类的类可以被实例化。虚函数如果没有派生类中重新实现,那么仍然使用基类的成员函数。

21.D解析:笛卡尔积:设关系R和S的元数分别是r和s,定义R和S的笛卡尔积是一个(r+s)元元组的集合,每一个元组的前r个分量来自R的一个元组,后s个分量来自S的一个元组。若R有k1个元组,s有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。交:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由属于R又属于S的所有元组组成。并:设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的元组组成。自然连接:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须有相同的属性组,并且要将结果中重复的属性去掉。

22.C“++”是右结合的,所以先赋值为3,最后输出3+1;常成员函数只有常对象才能调用,所以输出2。

23.C首先进行括号内的运算,注意赋值表达式是从右向左进行的。因此,只要考生细心运算就可以得到正确答案为C。

24.n=b

25.派生类派生类解析:如果类A为类B的基类,那么类B称为类A的派生类。

26.ifstream且fin(“C:\test.dat”ios_binary);或ifstreamfin;fin.open(c:\test.dat"ios_binary);ifstream且fin(“C:\\test.dat”,ios_binary);或ifstreamfin,;fin.open(c:\\test.dat',ios_binary);解析:C++中打开文件有两种方式①ifstreamfin(“test.dat”);②ifstreamfin;fin.open(“test.dat”);,ios_binary的意义是以二进制文件打开。

27.565,6解析:在主函数中定义了a、b、c、d等4个整型变量,并给他们赋初值4、3、5、6。然后调用函数t(),把a、b、c和d的值依次传递给相应的形参x、y、cp、卸,形参和实参之间不再存在联系。进入函数t()后,执行其中的语句序列。函数t()调用返回后,输出的c和d的值依旧是5和6。

28.1616解析:在深度为5的完全二叉树中,就属深度为5的满二叉树中的叶子结点的个数最多,这些叶子结点均在最后一层(即第5层)上。又根据二叉树的性质1:在二叉树的第k层上,最多有2k-1(k≥1)个结点。因此,在第5层上最多的结点数为25-1=16。

29.一对多一对多解析:实体之间的联系可以归结为一对一、一对多与多对多。如果一个学校有许多学生,而一个教师只归属于一个学生,则实体集学校与实体集学生之间的联系属于一对多的联系。

30.33解析:函数fun()的功能是在字符数组s中找到大于或等于字符a第1个元素,并返回其下标值。在主函数中,通过for循环给字符数组s分别赋值B、C…J。然后通过调用函数fun(),找到字符'E'的位置。

31.virtualpublicA;visualpublicAvirtualpublicA;visualpublicA解析:本题考核虚基类的应用。通过虚基类所派生的类,在所产生的对象中,只包含了一个和其他类共享的基础对象,也就是说,从同一个基类中以虚拟方式派生的所有类,在它们所产生的对象里,不会有一份基础对象,而只是在内存里保留一份基础对象,而派生类中只保留指向此基础对象的指针,这样就千会同时有两份基类对象的情形发生。题中程序最后字符A只输出了一次,所以类A必须为类B和类C的虚基类。

32.身份证号身份证号解析:主关键字是表中区别不同记录的标识,在该表中只有身份证号能起到这个作用,所以用其作为主关键字。

33.6

34.运行时的多态性运行时的多态性

35.数据库概念设计阶段数据库概念设计阶段解析:数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。

36.(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]);”。

37.(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&&str[i]>=z)”。

38.(1)应改为“catch(char*s)”。(2)应改为“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(…)”。

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

40.(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]);”。

41.(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”可知,显然这里是在类外实现析构函数,析构函数是一个特

温馨提示

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

评论

0/150

提交评论