2022年浙江省宁波市全国计算机等级考试C++语言程序设计预测试题(含答案)_第1页
2022年浙江省宁波市全国计算机等级考试C++语言程序设计预测试题(含答案)_第2页
2022年浙江省宁波市全国计算机等级考试C++语言程序设计预测试题(含答案)_第3页
2022年浙江省宁波市全国计算机等级考试C++语言程序设计预测试题(含答案)_第4页
2022年浙江省宁波市全国计算机等级考试C++语言程序设计预测试题(含答案)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

2022年浙江省宁波市全国计算机等级考试C++语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.C++语言是以哪种语言为基础逐渐发展演变而成的一种程序设计语言

A.ASPB.CC.VBD.Java

2.以下程序的输出结果是#include<iostream.h>longfun(intn){longs;if(n=1||n=2)s=2;elses=n-fun(n-1);returns;}voidmain(){cout<<fun(3);}

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

3.下列叙述中正确的是

A.数据库系统是一个独立的系统,不需要操作系统的支持

B.数据库技术的根本目的是解决数据的共享问题

C.数据库管理系统就是数据库系统

D.以上3种说法都不对

4.private访问属性限制对象的成员,可以在()中访问。

A.本类的成员函数B.main函数C.父类的成员函数D.子类的成员函数

5.下列语句中,错误的是

A.constintbuffer=256;

B.constinttemp;

C.constdouble*point;

D.constdouble*rt=newdouble(5.5);

6.以下程序的输出结果是()。#include<iostream.h>main(){intm=5;if(m++>5)cout<<m;elsecout<<m--;}

A.7B.6C.5D.4

7.下列不是软件工程基本目标的是()。

A.付出较低的维护费用B.达到要求的功能C.不管时间限制,只要最终把用户要求的产品交出来D.产品的性能比较好

8.在软件生产过程中,需求信息的给出是______。A.A.程序员B.项目管理者C.软件分析设计人员D.软件用户

9.在位运算中,操作数每右移一位,其结果相当于()

A.操作数乘以2B.操作数除以2C.操作数乘以4D.操作数除以4

10.有如下函数模板定义:template<classT>Tfunc(Tx,Ty){returnx*x+y*y;}在下列对func的调用中,错误的是

A.func(3,5);

B.func(3.0,5.5);

C.func(3,5.5);

D.fune<int>(3,5.5);

二、单选题(13题)11.下列选项中,不是C++关键字的是()。

A.classB.functionC.friendD.virtual

12.

13.用树形结构来表示实体之间联系的模型称为()。

A.关系模型B.层次模型C.网状模型D.数据模型

14.假定其中的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)))

15.下列程序的输出结果是()。#include<iostream.h>voidmain()(char*str="12123434";intx1=0,x2=0,x3=0,x4=0,i;for(i=0;str[i]!=\0;i++)switch(str[i]){case1:x4++;case2:x3++;case3:x2++;case4:x1++;}cout<<x1<<","<<x2<:<","<<x3<<","<<x4;}A.8,6,4,1B.8,6,3,2C.8,8,4,1D.8,6.4,2

16.按照“后进先出”原则组织数据的数据结构是()。

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

17.下列叙述中正确的是()。

A.一个算法的空间复杂度大,则其时间复杂度也必定大

B.一个算法的空间复杂度大,则其时间复杂度必定小

C.一个算法的时间复杂度大,则其空间复杂度必定小

D.上述三种说法都不对

18.下列程序输出的结果是()。#include<stdio.h>subl(chara,charb){charc;c=a;a=b;b=c;}sub2(char*a,charb){charc;c=*a;*a=b;b=c;}sub3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}voidmain(){chara,b;a='A';b='B';subl(a,b);putchar(a);putchar(b);a='A';b='B';sub2(&a,b);putchar(a);putchar(b);a='A';b='B';sub3(&a,&b);putchar(a);putchar(b);putchar('\n');}

A.BABBABB.ABBBBAC.ABBABAD.ABABBA

19.下列选项中正确的语句是()。

A.A.chars[3];s="BOOK!";

B.B.char*s;s={"BOOK!"};

C.C.chars[10];s="BOOK";

D.D.char*S;s="BOOK!";

20.若AA为一个类,a为该类的非静态数据成员,在该类的一个成员函数定义中访问a时,其书写格式为()。

A.aB.AA.aC.a{}D.AA::a{}

21.下列说法中错误的是

A.公有继承时基类中的public成员在派生类中仍是public成员

B.私有继承时基类中的protected成员在派生类中仍是protected成员

C.私有继承时基类中的public成员在派生类中仍是private成员

D.保护继承时基类中的public成员在派生类中仍是protected成员

22.有以下程序:#include<iostream>usingnamespacestd;#definePl3.14ClassPoint{private:intx,y;public:Point(inta,intB){X=a;y:b;}intgetx()<returnx;}intgety(){returny;}};classCircle:publicPoint{pri

A.314B.157C.78.5D.153.86

23.下面程序的运行结果是()。#include<iostream.h>voidmain{intnum=1:int&ref=num;ref=ref+2:cout<<num:num=num+3:cout<<ref<<endl:}A.13B.16C.36D.33

三、2.填空题(12题)24.如果一个类中含有纯虚函数,则该类称为【】。

25.派生类的成员一般分为两部分,一部分是【】,另一部分是自己定义的新成员。

26.下列for语句的循环次数为【】。

for(inta=0,b=1;b&&a<5;a++);

27.将下面程序补充完整。

#include<iostream>

usingnamespacestd;

classBase{

public:

【】fun(){return0;}//声明虚函数

};

classDerived:publicBase{

public:

x,y;

voidSetVal(inta,intb){}

intfun(){returnx+y;}

};

void【】SetVal(inta,intb){x=a;y=b;}//类Derived成员函数

voidmain(){

Derivedd;

cout<<d.fun()<<endl;

}

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

29.下列程序中需要清理动态分配的数组,划线处应有的语句是_______。

#include<iostream.h>

classperson

{

intage,tall;

public:

person(){age=0;tall=40;cout<<"Ababyisborn."<<endl;}

person(inti){age=i;tall=40;cout<<"Aoldperson."<<endl;}

person(inti,intj){age=i;tall=j;cout<<"aoldpersonwithtall."<<endl;)

~person(){cout<<"persondead."<<endl;}

voidshow()

{

cout<<"age="<<age<<",tall="<<tall<<endl;

}

};

voidmain()

{

person*ptr;

ptr=newperson[3];

ptr[0]=person();

ptr[1]=person(18);

ptr[2]=person(20,120);

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

ptr[i].show();

______

}

30.有以下程序:

#include<iostream.h>

classA

{

intx;

public:

A(inta)

{

x=a;

}

friendclassB;

};

ClassB{

public:

voidprint(Aa){

a.x--;

cout<<a.x<<endl;

}

};

voidmain()

{

Aa(10);

Bb;

b.print(a);

}

程序执行后的输出结果是______

31.带有【】的类称为抽象类,它只能作为【】来使用。

32.冒泡排序算法在最好的情况下的元素交换次数为【】。

33.C++语言程序的注释可以出现在程序中的任何地方,一个注释以【】作为开始和结束的标记。

34.用于输出表达式值的标准输出流对象是【】,用于从键盘上为变量输入值的标准输入流对象是【】。

35.以下程序输出的结果是【】。

#include<iostream.h>

voidmain()

{

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

d=(a>b>C);

cout<<d;

}

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

}37.使用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;}38.使用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;}39.使用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;}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,该程序运行时有错,请改正其中的错误,使程序正常运行,并使程序输出的结果为:

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;

}

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

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

}

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

}

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

}

五、综合应用题(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.使用VC++6.0打开考生文件夹下的源程序文件3.cpp。请完成以下部分,实现在屏幕上输出为C3C2这个程序需要修改的部分,请按照以下部分实现。(1)类C0不能被实例化,请定义一个纯虚函数print,在注释1后添加适当的语句。(2)类C1私有虚继承类C0,请在注释2后添加适当的语句。(3)类C2公有继承于C0,请在注释3后添加适当的语句。(4)类c3公有继承于C2与C1,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:#include(iostream.h)classCO{//********1********};//********2********classC1:{public:voidprint{cout<"”C1"<<endl;}};//********3********classC2:{public:voidprint{cout<<"C2"<<endl;}};//********4***x****classC3:{public:voidprint{cout<<"C3"<<endl;}};voidmain{C30bj3;C20bj2;obj3.print;obj2.print;return;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程test26_3。此工程包含一个test26_3.cpp,其中定义了类queue,但该类的定义并不完

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

(1)完成类queue的无参数的构造函数的定义,要求把数据成员bl和el都初始化为0,同时输出queueinitialized。请在注释“//**1**”之后添加适当的语句。

(2)完成类queue的成员函数qput(intj)的定义,它的功能是把新的元素加入队列,过程是先依据bl的值判断数组是否已经满了,如果是就输出queueisfull,否则bl自加一,并且把参数j的值存入bl指向的数组元素中,请在注释“//**2**”之后添加适当的语句。

(3)完成类queue的成员函数qget()的定义,它的功能是把队列开头的元素提取出队列,并返回该值,过程是先比较el和bl的值判断队列是否已空,如果是就输出queueisempty,否则el自加一,并且把el指向的数组元素返回,请在注释“//**3**”之后添加适当的语句。

程序输出结果如下:

queueinitialized

queueinitialized

3311

4422

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

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

#include<iostream.h>

classqueue

{

intq[100];

intbl,el;

public:

queue();

voidqput(intj);

intqget();

};

queue::queue()

{

//**1**

}

voidqueue::qput(intj)

{

//**2**

{

cout<<"queueisfull\n";

return;

}

bl++;

q[bl]=j;

}

intqueue::qget()

{

//**3**

{

cout<<"queueisempty\n";

return0;

}

el++;

returnq[el];

}

voidmain()

{

queueaa,bb;

aa.qput(11);

bb.qput(22);

aa.qput(33);

bb.qput(44);

cout<<aa.qget()<<""<<aa.qget()<<"\n";

cout<<bb.qget()<<""<<bb.qget()<<"\n";

}

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

(1)定义类stack的私有数据成员sp和size,它们分别为整型的指针和变量,其中sP指向存放栈的数据元素的数组,size为栈中存放最后一个元素的下标值。请在注释“//**1**”之后添加适当的语句。

(2)完成类stack的构造函数,该函数首先从动态存储空间分配含有100个元素的int型数组,并把该数组的首元素地址赋给指针sp,然后将该数组的所有元素赋值为0,并将size赋值为-1(size等于-1表示栈为空)。请在注释“//**2**”之后添加适当的语句。

(3)完成类stack的成员函数push的定义。该函数将传入的整型参数x压入栈中,即在size小于数组的最大下标情况下,size自加1,再给x赋值。请在注释“//**3**”之后添加适当的语句。

(4)完成类stack的成员函数pop的定义,该函数返回栈顶元素的值,即在size不等于-1的情况下,返回数组中下标为size的元素的值,并将size减1。请在注释“//**4**”之后添加适当的语句。

程序输出结果如下:

thetopelem:1

thepopelem:1

thestackisempty

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

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

#include<iostream.h>

classstack

{

//**1**

public:

stack();

boolempty(){returnsize==-1;}

boolfull(){returnsize==99;}

voidpush(intx);

voidpop();

voidtop();

};

stack::stack()

{

//**2**

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

*(sp+i)=0;

size=-1;

}

voidstack::push(intx)

{

//**3**

cout<<"thestackisfull"<<end1;

else

{

size++;

*(sp+size)=x;

}

}

voidstack::pop()

{

//**4**

cout<<"thestackisempty"<<end1;

else

{

cout<<"thepopelem:"<<*(sp+size)<<end1;

size--;

}

}

voidstack::top()

{

ifiempty())

cout<<"thestackisempty"<<end1;

else

{

cout<<"thetopelem:"<<*(sp+size)<<end1;

}

}

voidmain()

{

stacks;

s.push(1);

s.top();

s.pop();

s.top();

}

参考答案

1.B解析:C++语言是对C语言进行了扩充,继承了它的语法,开增加了面向对象的设计方法。

2.A解析:题中fun函数进行了递归调用,第1次调用:fun(3)n=3s=3-fun(2),第二次调用时:fun(2)n=2s=2,返回第一次调用后,s=3-2=1。

3.B解析:数据库技术的根本目的是要解决数据的共享问题;数据库需要操作系统的支持;数据库管理系统(DatabaseManagementSystem,DBMS),对数据库进行统一地管理和控制,以保证数据库的安全性和完整性。它是数据库系统的核心软件。

4.A解析:私有成员只能被本类的成员函数或者友元函数访问。

5.B解析:本题考查了符号常量的特点。符号常量必须在声明的同时为其赋初值。因此选项B是错误的。选项C定义的是一个指向常量的指针变量,即通过该指针不能改变它所指向的内容,而它自己的内容是可以改变的。定义指针符号常量的格式应该是:double*const\u3000point=<某地址值>;。所以选项C是合法的,它可以不用在声明时赋初值。故应该选择B。

6.B

7.C解析:软件工程的基本目标是:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移值,需要较低的维护费用;能按时完成开发,及时交付使用。

8.D本题主要考查软件开发过程中,各角色的任务。在软件开发过程中,需要参与过程的角色主要有用户、软件分析人员、软件设计人员、项目管理人员和程序员等。其中为系统提供需求信息的是用户的事情。

9.B右移运算符">>"是双目运算符。其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。例如:设a=15,a>>2表示把000001111右移为00000011(十进制3)。

10.C解析:在模板函数调用中,当没有类型参数时,要求函数调用的实参必须类型相同,如果实参类型不相同,则必须有类型参数加以强制转换,否则编译会报错。

11.B

12.C

13.B解析:在数据库系统中,由于采用的数据模型不同,相应的数据库管理系统(DBMS)也不同。目前常用的数据模型有3种:层次模型、网状模型和关系模型。在层次模型中,实体之间的联系是用树结构来表示的,其中实体集(记录型)是树中的结点,而树中各结点之间的连线表示它们之间的关系。所以,本题的正确答案是B。

14.D解析:本题考查数学表达式的掌握,首先应转换为弧度,然后作为COS函数的参数,求绝对值,最后是开方函数。考生需要掌握的是常用的数学函数。

15.DD。【解析】本题考查循环的嵌套、for和switch语句的应用、C++中各种条件判断,循环语句的用法。只要注意在C++语言中,系统在字符指针的最后位置会增加一个字符串结束符\0,执行8次for循环,再根据switch语句中的条件易知答案。

16.B解析:“后进先出”表示最后被插入的元素最先能被删除。选项A中,队列是指允许在—端进行插入、而在另一端进行删除的线性表,在队列这种数据结构中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除,队列又称为“先进先出”的线性表,它体现了“先来先服务”的原则:选项B中,栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素,栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。队列和栈都届于线性表,它们具有顺序存储的特点,所以才有“先进先出”和“后进先出”的数据组织方式。双向链表使用链式存储方式,二叉树也通常采用链式存储方式,它们的存储数据的空间可以是不连续的,各个数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。所以选项C和选项D错误。本题的正确答案为选项B。

17.D解析:时间复杂度是指一个算法执行时间的相对度量;空间复杂度是指算法在运行过程中临时占用所需存储空间大小的度量。人们都希望选择一个既省存储空间、又省执行时间的算法。然而,有时为了加快算法的运行速度,不得不增加空间开销;有时为了能有效地存储算法和数据,又不得不牺牲运行时间。时间和空间的效率往往是一对矛盾,很难做到两全。但是,这不适用于所有的情况,也就是说时间复杂度和空间复杂度之间虽然经常矛盾,但是二者不存在必然的联系。因此,选项A、B、C的说法都是错误的。故本题的正确答案是D。

18.B

19.DD。【解析】在选项D中.字符指针s指向字符串常量BOOK!。故选项D正确。

20.AA。【解析】a是类AA的非静态数据成员,在类AA的成员函数中可以直接访问。B是访问静态数据成员的方式,C和D都是访问函数的方式。

21.B解析:本题考核派生类中的访问权限问题。继承方式包括:public(公有派生),protected(保护派生)和private(私有派生)。不同的继承方式会导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这里的访问主要来自两个方面:一是派生类中的新增成员对从基类继承来的成员的访问;二是派生类外部通过派生类对象对从基类继承来的成员的访问。私有继承时基类中的protected成员在派生类中变成了private成员,所以B选项的描述是错误的。

22.A解析:本程序设计了一个点类Point,包含了横,纵两个坐标数据x和y,由它派生出了圃类Circle,并加入了新的数据成员,即一个半径r和一个求圆面积的函数成员area。在主函数main中,首先定义了一个圃Circle类的对象c1,并通过它的构造函数初始化其数据成员。由此可知,其半径r的值为10,所以其面积为PI*10*10=314,即对象c1的函数成员area的返回值为314。

23.C本题考查的是考生对引用的掌握,ref实际上就是变量num的别名,所以ref=ref+2时,num已经变成了3。

24.抽象类抽象类解析:类中一旦有纯虚函数的定义,那么这个类就再也不能创建此类的对象了,我们把这种类叫做抽象类。

25.从基类继承的成员从基类继承的成员解析:派生类的成员由继承的成员和自己定义的成员组成。

26.55解析:因为b的值为1,所以b&&a<5相当于a<5,当a=5时退出循环,一共进行5次循环。

27.virtualintDerived::virtualintDerived::解析:virtualint用于声明虚函数;Derived::用于指定类Derived成员函数。

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

29.delete[]ptr;delete[]ptr;解析:本题考察对象数组的销毁方法,注意删除对象数组时,[]内不要指定大小。

30.99解析:本题考核友元类的应用。在程序中,类B是类A的友元类,因此,在类B的所有成员函数中均可访问类A的任何成员。在main()中,先定义类A的一个对象a(10)和类B的一个对象b。然后通过对象b调用其成员函数print输出对象a的私有成员x的值减1即9。

31.纯虚函数基类纯虚函数基类

32.00解析:冒泡排序算法在最好的情况下(已经有序的)元素交换次数为0。

33./**//**/解析:C++语言程序的注释可以出现在程序中的任何地方,一个注释以“/*”开始,以“*/”为结束。

34.coutcincout\r\ncin解析:根据输入输出流对象的定义而得。

35.00解析:水题的关键在于对变量c的赋值运算:

d=(a>b>c)

d=(5>4>3)

先算5>4,为真,得1,即:d=(1>3),此时1>3,为假,得0。36.(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(…)”。37.(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);”。38.(1)“voidmain”。(2)“intm=0144;”。(3)“intn=OX25;”或“intn===0x25;”。【解析】本题主要考查了主函数定义及幂同进制之间的转换,包括十进制到八进制,十进制到十六进制。主函数定义的定义形式为“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发现变量的初值不正确,十进制的100对应八进制的144,卡进制的37对应十六进制的25,因此2和3应分别改成“intm=0144;”,“intn=0×25;”或“intn=0×25;”。39.(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”。40.(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]);”。

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

42.(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子句中没有指定异常信息的类型,那么就用删节

温馨提示

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

评论

0/150

提交评论