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

下载本文档

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

文档简介

2023年江苏省盐城市全国计算机等级考试C++语言程序设计真题(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指______。

A.模块间的关系B.系统结构部件转换成软件的过程描述C.软件层次结构D.软件开发过程

2.数据库关系模型中可以有三类完整性约束,下列选项中不属于三类完整性约束的是()。

A.实体完整性规则B.参照完整性规则C.对象完整性规则D.用户自定义完整性规则

3.结构化程序设计的3种基本结构是()。

A.过程、子程序和分程序B.顺序、选择和重复C.递归、堆栈和队列D.调用、返回和转移

4.与语句cout<<end1;不等价的是

A.cout<<,’\n’;

B.cout<<,’\12’;

C.cout<<,’\xA’;

D.cout<<,’\0’;

5.已知枚举类型定义语句为:enumToken{NAME,NUMBER,PLUS=5,MINUS,PRINT=10};则下列说法中,错误的是()。

A.枚举常量NAME的值为1

B.枚举常量NUMBER的值为1

C.枚举常量MINUS的值为6

D.枚举常量PRINT的值为10

6.已知有定义constintD=5;inti=1;doublef=0.32;charc=15;则下列选项错误的是

A.++i;B.D--;C.c++;D.--f

7.面向对象程序设计思想的主要特征中不包括

A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态性

8.若有以下程序:#include<iostream>usingnamespacestd;intf(){staticinti=O;ints=1;s+=i;i++;returns;}intmain(){inti,a=0;for(i=0;i<5;i++)a+=f();cout<<a<<endl;retrun0;}程序运行后,输出的结果是

A.20B.24C.25D.15

9.在深度为5的满二叉树中,叶子节点的个数为A.A.32B.31C.16D.15

10.在下面的类定义中,横线处应填入的内容是()。classFred{public:voidprint(){cout<<data<<end1;voidsetData(doubled)(data=d;staticintcount;private:doubledata;};_______________________count=O;//静态数据成员的定义

A.intB.staticintC.intFred::D.staticintFred::

二、单选题(13题)11.有如下程序:#include<iostream>usingnamespacestd;classXA{inta;public:staticintb;XA(intaa):a(aa){b++;}~XA(){}intget(){returna;}};intXA::b=0intmain(){XAd1(1),d2(3);cout<<dl.get()+d2.get()+XA::b<<endl;return0;}运行时的输出结果是()。A.5B.6C.7D.8

12.阅读以下程序#include(iostream.h>voidmain(){charline[10];cin>>line;cout<<1ine<<endl;}如运行时输入“Thisisanexample.<CR>”,则程序的输出结果是()。A.ThisB.ThisisC.ThisisaD.Thisisanexample

13.将E—R图转换为关系模式时,实体和联系都可以表示为()。

A.属性B.键C.关系D.域

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

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

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

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

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

15.下列语句中错误的是()。

A.Constinta;

B.Constinta=10;

C.Constint*point=0;

D.Constint*point=newint(10);

16.一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本,此虚函数又称为

A.虚析构函数B.虚构造函数C.纯虚函数D.静态成员函数

17.有如下函数模板定义:templateT2plus(T1t1,T3t3){returnt1+t3;}则以下调用正确的是()。

A.plus(3,5L);

B.plus(3,5L);

C.plus(3,5L);

D.plus(3,5L);

18.有如下程序:

#include<iostream>

usingnamespacestd;

classPair{

intm;

intn;

public:

Pair(inti,intJ):m(i),n(J){}

booloperator>(PairP)const;//需在类体外给出定义

};

intmain(){

Pairpl(3,4),p2(4,3),p3(4,5);

COUt<<(pl>p2)<<(p2>p1)<<(p2>p3)<<(p3>p2);

return0;

}

运算符函数operator>功能是比较两个Pair对象的大小,当左边对象大时,返回true,否则返回false。比较规则是首先比较两对象的m成员,m大者为大;当m相等时比较n.n大者为大。程序输出0101,下列对运算符重载函数的正确定义是A.boolPair::operator>(PairP)const{if(m!=P.m)returnm>P.m;returnn>P.n;)

B.boolPair::operator>(PairP){if(m!=P.m)returnm>P.m;returnn>P.n;)

C.boolPair::operator>(PairP)const{if(m>P.m)returntrue;return11>P.n;)

D.boolPair::operator>(PairP){if(m>P.m)returntrue;return11>P.n;}

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

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

20.下列关于this指针的描述中,正确的是()。

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

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

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

D.类的非静态成员函数都有this指针

21.在一个被调用函数中,关于rerun语句的描述,______是错误的。

A.被调用函数中可以不用return语句

B.被调用函数中可以使用多个return语句

C.被调用函数中,如果有返回值,就一定要有return语句

D.被调用函数中,一个return语句可以返回多个值给调用函数

22.有如下程序:#include<iostream>usingnamespacestd;classBase{public:voidfun{__________________cout<<”Base::fun”<<endl;}};classDerived:publicBase{public:voidfun{cout<<”Derived::fun”<<endl:}};intmain{Derivedd;Afun;return0;}已知其执行后的输出结果为:Base::funDerived::fun则程序中下画线处应填入的语句是()。A.Base.fun;B.Base::fun;C.Base—>fun;D.fun;

23.下列关于析构函数的描述中,错误的是()。

A.析构函数可以重载B.析构函数由系统自动调用C.每个对象的析构函数只被调用一次D.每个类都有析构函数

三、2.填空题(12题)24.有如下的程序:

#include<iostream>

usingnamespacestd;

classAT{

friendostream&operator<<(ostream&,AT);

}at;

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

intmain(){

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

}

执行上面的程序将输出______。

25.一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的【】。

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

#include<iostream.h>

classS{

intA[10];

public:

int&operator()(int);

};

int&S::operator()(intx){

returnA[x];

}

voidmain(){

Sa;

inti,j;

for(i=0;i<10;i++)

a(i)=i*2;

for(i=0;i<10;i++)

cout<<a(i)<<"";

cout<<end1;}

27.下面是复数类complex的定义,其中作为友元函数重载的运算符“--”的功能是将参数对象的实部减1,然后返回对该对象的引用。请补充完整。

classcomplex

{

private:

intreal;

intimag;

public:

complex(intr=0,inti=0):real(r),imag(i){}

voidshow()

{

cout<<real<<(imag<0?"-":"+")<<imag<<'i';

}

【】;

};

complex&operator--(complex&C)

{

C.real--;

returnC;

}

28.从实现的角度划分,c++所支持的两种多态性分别是【】时的多态性和运行时的多态性。

29.具有相同函数名不同参数表的函数称为【】。

30.假设inta=1,b=2;,则表达式(++a/b)*b--的值为【】。

31.若有如下程序段:

#include<iostream>

usingnamespacestd;

intmain()

{

char*p="abcdefgh",*r;

long*q;

q=(long*)p;q++;

r=(char*)q;

cout<<r<<end1;

return0;

}

该程序的输出结果是【】。

32.对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行调用______的构造函数。再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。

33.在有n个结点的二叉链表中,值为非空的链域的个数为【】。

34.有如下程序段:

charC[20]="examination";

C[4]=0;

cout<<c<<endl;

这个程序的输出结果是______。

35.假定用户没有给一个名为MyClas的类定义析构函数,则系统为其定义的默认析构函数形式为【】。

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

}

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。程序异常,输出信息为errorOERROR注意:不要改动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;}

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

}

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

}

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

}

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,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

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;

}

43.使用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;}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,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个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;

}五、综合应用题(2题)46.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。每卖出一个水果,则计算水果的重量,还要计算所有卖出水果的总重量以及总个数,同时允许退货,请按照以下的操作,把类补充完整。(1)定义类TCFruit的私有静态数据成员float型变量AllWeight和int型变量AllN0,请在注释1后添加适当的语句。(2)完成类TCFruit的带一个float型变量w的构造函数,并把这个w加到AllWeight中,并且AllNo自加。请在注释2后添加适当的语句。(3)在析构函数中,在AllWeight中减去weight,然后AllNo自减,请在注释3后添加适当的语句。(4)完成静态成员变量的初始化为0,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include(iostream.h>classTCFruit{private:floatWeight;//********1********staticintAllNo;public:TCFruit(floatw){//********2********AllWeight+=w:AllNo++:}~TCFruit{//********3********AllWeight-=Weight:}voiddisplay{cout<<"SellaFruitwith"<<Weight<<"k9"<<endl;cout<<”Allsellnumber:"<<AllNo<<endl;cout<<"Allsellweight:"<<AllWeight<<"k9"<<endl<<endl;}};//********4********floatTCFruit::AllWeight=0.0;intmain{TCFruitFruitl(1.2);Fruitl.display;TCFruitFruit2(2.3);Fruit2.display;return0;}47.请使用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;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test3_3,此工程包含一个源程序文件test3_3.cpp,其中建立了普通的基类base用于存储边的信息,建立派生类triangle和square,用于存储三角形和正方形的信息。按要求完成下列操作,将类定义补充完整。

(1)定义基类base的保护数据成员x和y用于记录边的长度,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。

(2)完成基类base默认构造函数的定义,把数据成员x和y分别初始化为参数a和b的值,要求使用作用域符“::”。请在注释“//**2**”之后添加适当的语句。

(3)完成派生类triangle函数disp的定义,使其以“三角形面积:”的格式将三角形的面积输出到屏幕上。请在注释“//**3**”之后添加适当的语句。

(4)添写派生类square的默认构造函数的定义,使其调用基类的构造函数,记录下正方形的边长信息a,其缺省值为0。请在注释“//**4**”之后添加适当的语句。

输出结果如下:

三角形面积:200

正方形面积:400

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

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

#include<iostream.h>

classbase

{

protected:

//**1**

public:

base(inta,intb)

{

//**2**

}

virtualvoiddisp(){cout<<"调用base基类"<<endl;)

};

classtriangle:publicbase

{

public:

triangle(inta,intb):base(a,b){};

voiddisp()

{

//**3**

}

};

classsquare:publicbase

{

public:

//**4**

voiddisp(){cout<<"正方形面积:"<<x*y<<endl;}

};

voidmain()

{

base*p;

trianglet(20,20);

squares(20);

p=&t;

p—>disp();

p=&S;

p->disp();

}

49.使用VC6打开考生文件夹下的工程test12_3,此工程包含一个test12_3.cpp,其中定义了类Base和类A,类A公有继承Base,但这两个类的定义都并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义枚举类型变量en,它包含两个枚举符front和back,请在注释“//**1**”之后添加适当的语句。

(2)在类Base中添加常成员虚函数voidE()的定义,该函数输出“InBaseE!”,请在注释“//**2**”之后添加适当的语句。

(3)在类A中添加常成员虚函数voidE()的定义,该函数先调用基类中的虚函数E()再输出“InAE!”,请在注释“//**3**”之后添加适当的语句。

(4)完成类A构造函数的定义,请使用参数列表的形式初始化类A的成员,并输出“Aconstructor.”,请在注释“//**4**”之后添加适当的语句。

输出结果如下:

Baseconstructor.

Aconstructor.

InBaseE!

InAE!

InBaseP!

InA!

1

Adestructor.

Basedestructor.

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

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

#include<iostream.h>

//**1**

classBase

{

protected:

intb1;

intb2;

public:

Base();

~Base();

intGetb1()const{returnb1;}

voidSetb1(intx){b1=x;}

intGetb2()const{returnb2;}

voidSetb2(inty){b2=y;}

voidPrint()const{cout<<"InBaseP!"<<end1;}

//**2**

};

Base::Base():b1(1),b2(5)

{

cout<<"Baseconstructor."<<endl;

}

Base::~Base()

{

cout<<"Basedestructor."<<endl;

}

classA:publicBase

{

protected:

enenA;

public:

A();

~A();

enGetColor()const{returnenA;}

voidSetColor(encolor){enA=color;}

voidInA(){cout<<"InA!"<<endl;}

//**3**

{

Base::E();

cout<<"InAE!"<<endl;

}

};

//**4**

{

cout<<"Aconstructor."<<endl;

}

A::~A()

{

cout<<"Adestructor."<<endl;

}

voidmain()

{

Aa1;

a1.E();

cout<<endl;

a1.Print();

a1.InA();

cout<<a1.Getbl()<<endl;

}

参考答案

1.B软件设计包括软件的结构设计、数据接口设计和过程设计。其中软件结构设计主要包括系统由哪些子系统构成,以及这些子系统之间的关系是怎样的,并将这些内容编写成文档;数据接口设计的任务是为每个子系统设计其与其他子系统间的接口,并编写成文档,这个接口要是一个无二义的接口,不需要子系统的操作知识就可以使用;过程设计是指系统结构部件转换成软件的过程描述。

2.C数据库关系模型中可以有三类完整性约束,实体完整性,参照完整性和用户自定义完整性。

3.BB。【解析】程序的三种基本控制结构包括:顺序、选择和重复(循环),这三种结构就足以表达出各种其他形式的结构。

4.D解析:题干表示的是回车换行,选项A),选项B)和选项C)都表示回车换行。而选项D)是字符串的结尾标志。

5.A解析:枚举类型定义了一些整型符号常量的集合,使用枚举类型时应该注意以下几点:

①枚举类型的第一个常量默认值是0。

②枚举类型常量的值允许彼此相同。

③虽然枚举类型常量是整数类型,但是不允许使用整数直接赋值给枚举类型变量,也不允许与整数进行运算,只可以与整数进行比较。

由此可知,枚举常量NAME的值应为0。所以选项A是错误的。

6.B解析:“++”,“--”运算符不能用于常量。

7.B解析:C++是一种面向对象的程序设计语言.,它充分支持面向对象思想中的3个主要特征:封装性、继承性、多态性。B选项所描述是结构化程序设计的思想。

8.D解析:本题考核静态局部变量在函数中的使用。静态局部变量就是将局部变量说明为静态的。静态局部变量既有在局部域作用的特性(即变量只能在变量的作用范围内被访问),又可以永久存在(变量的值得以保留,并可继续使用)。静态局部变量只在第一次执行时初始化一次。在函数f中定义了一个静态局部变量i,它的初始值为0,还定义了一个局部变量s(它的初始值为1),用来返回计算所得值。函数f中所进行的数据加工是s+=i和i++。即每调用一次函数f,返回(i+1)的值后,i的值增1。再看主函数,在主函数main中,通过一个for语句连续调用f函数5次,并把每次调用f函数的返回值相加并存入a。最后输出a的值。在了解各函数功能以及调用关系后就可计算出a的值为15。

9.C解析:满二叉树是指除最后一层外,每一层上的所有节点都有两个叶子节点。在满二叉树中,层上的节点数都达到最大值,即在满二叉树的第A层上有2k-1个节点,且深度为m的满二叉树有2m-1个节点。

10.C

11.CC。【解析】每调用一次get函数时,对新的类A对象进行一次实例化,调用一次构造函数,类A的静态成员变量b便加1。

12.AA。【解析】本题考查C++中cin输入流对象的使用规则,其特点是以空格、回车和tab为分隔符。因此this和is之间的空格告诉cin对象停止接收后面的数据。故正确答案为A。

13.C解析:数据库逻辑设计的主要工作是将E—R图转换成指定RDBMS中的关系模式。从E—R图到关系模式的转换是比较直接的。实体与联系都可以表示成关系,E—R图中属性也可以转换成关系的属性。实体集也可以转换成关系。

14.C解析:本题考核对虚函数的了解。在成员函数声明的前面加上virtual关键字修饰,即把该函数声明为虚函数。虚函数可以是另一个类的友元函数,但不是静态成员函数。所以A、B选项的描述都是错误。在派生类中可以重新定义从基类继承下来的虚函数,在派生类中重定义虚函数时,函数名、形参表和返回值类型必须保持不变,所以D选项是错误的。

15.Aconst是一个c++语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。限定符声明变量照能被读,必须初始化。A选项没有初始化,B、C、D选项都正确。

16.C解析:本题考核纯虚函数的定义。纯虚函数是一种特殊的虚函数,纯虚函数是在虚函数的后面加上“=0”,表示该虚函数无函数体,并非赋值运算。纯虚函数的一般格式如下:

virtual<类型><函数名>(<参数表>)=0;

在很多情况下,在基类中不能对虚函数给出有意义的实现,而把它说明为纯虚函数,它的实现留给该基类的派生类去做。

题目中描述的是纯虚函数的特点。

17.DD。【解析】C++中对函数模板的调用有时候只使用了函数实参,而没有使用模板实参,模板实参都被省略了,但模板实参的省略并不是必然的,而是有条件的:从模板函数实参表获得的信息有矛盾;需要莸得特定类型的返回值,而不管参数的类型如何;虚拟类型参数不出现在模板函数的形参中;函数模板含有常规形参。题中定义的函数模板中虚拟类型参数T2没有出现在模板数的形参列表中,所以在调用时不能省略,D选项的调用省略了T3,这是允许的。

18.A解析:题目要求先比较m的大小。其次比较n的大小,首先看函数定义booloperator>(Pairp)corlst,从中可以看出B)和D)选项和函数定义不一致,缺少const,故排除;选项c只有一层比较不符合题意,故排除C)选项。因此,本题答案为A)。

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

20.D\nthis作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员时,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。另外,全局函数和静态函数都不能使用this指针。所以答案为D。

\n

21.D解析:被调用函数中,一个return语句只能返回一个值给调用函数。

22.B本题考查公用继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有的访问属性,其私有成员仍为基类私有。本题中想要输出Base::fun,则必须调用基类的公用成员函数fun,所以使用Base::fun;来调用基类的成员函数fun。

23.AA。【解析】析构函数不能被重载,因为它的函数中不带有任何参数,也没任何返回值,函数只有一个版本即“~类名{}”。

24.Myhome@isH

25.可重用性可重用性解析:本题考查了继承的优点:相似的对象可以共享程序代码和数据结构,从而大大减少了程序中的冗余,提高软件的叫重用性。

26.024681012141618

27.friendcomplex&operator--(complex&)friendcomplex&operator--(complex&)解析:本题考核运算符重载的定义。程序要填入的是运算符函数operator--在类complex中的声明。根据题目给出的条件,易得到答案。

28.编译编译解析:多态性的定义。

29.重载函数重载函数解析:重载函数的定义。

30.22解析:运算符++的优先级高于双目运算符/,所以括号中的运算为2/2,最后的结果为2/2*2。

31.efghefgh解析:本题定义了一个字符型指针变量p,并通过赋初值让它指向了一个字符串,还定义了另一个字符型指针变量r和一个长整型指针变量q。首先通过语句“a=(long*)p;”,把p的地址值强制转换为长整型地址值并赋值给小然后执行“q++;”,地址值增加了4,执行语句“r=(char*)q;”,把长整型指针变量q的值再强制转换成字符型地址值并赋给r,r的值应为字符串中字符“e”的地址。最后输出r指向的字符串。

32.基类基类

33.n-1

34.examexam解析:对于c[4]=0,在c[4]里面保存的是对于ASCII码为O的字符,即空格,使用cout遇到空格自动结束,所以打印exam。

35.~MyClas()~MyClas()解析:析构函数名是在类名前加符号“~”,它既没有返回值,也没有参数。

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

37.(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(…)”。

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

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

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

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

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

43.(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;”应该是调用成员函数SetNumbe

温馨提示

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

评论

0/150

提交评论