2021年山东省聊城市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第1页
2021年山东省聊城市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第2页
2021年山东省聊城市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第3页
2021年山东省聊城市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第4页
2021年山东省聊城市全国计算机等级考试C++语言程序设计模拟考试(含答案)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2021年山东省聊城市全国计算机等级考试C++语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.下列关于break语句的描述中,不正确的是()。

A.break语句可用于循环体内,它将使执行流程跳出本层循环

B.break语句可用于switch语句中,它将使执行流程跳出当前switch语句

C.break语句可用于if体内,它将使执行流程跳出当前if语句

D.break语句在一层循环体中可以出现多次

2.下列运算符中,()运算符在C++中不能重载。

A.&&B.[]C.::D.new

3.假定MyClass为一个类,则执行MyClassa,b(2),*p;语句时,自动调用该类构造函数()次。

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

4.应在下面程序下划线中填写的正确的语句是()。#include<iostream>usingnamespacestd;classA{public:voidtest(){cout<<"thisisA!";}};classB:publicA{voidtest(){______//显示调用基类函数test()cout<<"thisisB!";}};voidmain(){}

A.A::test()B.test()C.B::test()D.this->test()

5.数据库设计包括两个方面的设计内容,它们是()。

A.概念设计和逻辑设计B.模式设计和内模式设计C.内模式设计和物理设计D.结构特性设计和行为特性设计

6.已知n是一个int型变量,下列语句中错误的是()。

A.long*p=newlong[n];

B.longp[n];

C.long*p=newlong[n];

D.longp[10];

7.通常拷贝构造函数的参数是()

A.某个对象名B.某个对象的成员名C.某个对象的引用名D.某个对象的指针名

8.有如下程序:#include<iostream>usingnamespacestd;classBase{protected:Base(){cout<<'Base';}Base(charc){cout<<c;}};classDerived:publicBase{public:Derived(charc){cout<<c;}};intmain(){Derivedd('Derived');return0;}执行这个程序屏幕上将显示输出()。

A.DerivedB.DerivedBaseC.BaseDerivedD.DerivedDerived

9.在C++语言中,函数形参的默认存储类型是()。

A.autoB.registerC.staticD.extem

10.数据库系统的核心是()

A.数据库B.数据库管理系统C.数据模型D.软件工具

二、单选题(13题)11.有如下模板声明:templateclassA;下列声明中,与上述声明不等价的是()。

A.templateclassA;

B.templateclassA;

C.templateclassA;

D.templateclassA;

12.下面程序的输出结果是()。#include<iostream>Usingnamespacestd;ClassBase{public:Base(intx=O){count<<x;}};ClassDerived:publicBase{public:Derved(intx=0{count<<x;}private;Baseval;};intmina(){Derivedd(1);retrun0;}A.0B.1C.01D.001

13.有以下程序#include<iostream.h>floatfun(intx,inty){return(x+y);}voidmain(){inta=2,b=5,c=8;tout<<fun((int)fun(a+c,b),a-C);}程序运行后的输出结果是

A.编译出错B.9C.21D.9

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

A.线性链表的各元素在存储空间中的位置必须是连续的

B.线性链表的头元素一定存储在其他元素的前面

C.线性链表中的各元素在存储空间中的位置不一定是连续的,但表头元素一定存储在其他元素的前面

D.线性链表中的各元素在存储空间中的位置不一定是连续的,且各元素的存储顺序也是任意的

15.下列程序的运行结果为()。#include<iostream.h>inti=0;classA{public:A{i++;}};voidmain{Aa,b[3],*C;C=b;cout<<i<<endl:}A.2B.3C.4D.5

16.下面的语句中错误的是()。

A.inta=5;intx[a];

B.eonstinta=5;intx[a];

C.intn=5;int*P=newint[a];

D.constintn=5;int*p=newint[a];

17.有三个关系R、S和T如下:则由关系R和S得到关系T的操作是()。A.自然连接B.交C.除D.并

18.在数据管理技术发展的3个阶段中,数据共享最好的是()。

A.人工管理阶段B.文件系统阶段C.数据库系统阶段D.3个阶段相同

19.设有表示学生选课的3张表,学生S(学号、姓名、性别、年龄、身份证号)、课程C(课号、课名)、选课SC(学号、课号、成绩),则表SC的关键字(键或码)为()。

A.课号、成绩B.学号、成绩C.学号、课号D.学号、姓名、成绩

20.有如下程序段

inti=0,j=1;

int&r=i;//①

r=j;//②

int*p=&i;//③

*p=&r;//④

基中会产生编译错误的语句是A.④B.③C.②D.①

21.负责数据库中查询操作的数据库语言是()。

A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言

22.下列关于栈叙述正确的是()。

A.栈顶元素最先能被删除B.栈顶元素最后才能被删除C.栈底元素永远不能被删除D.栈底元素最先被删除

23.下面类的定义,有()处错误。classMyClass{public:voidMyClass();~MyClass(intvahle);private:inti=0;};A.1B.2C.3D.4

三、2.填空题(12题)24.下列程序的输出结果为【】。

#include<iostream,h>

voidFunc(charch)

{

switch(ch).

{

case'A':case'a'

cout<<"优秀"<<end1;

case'B':case'b':

cout<<"良好"<<end1;

break;

case'C':case'c':

cout<<"及格"<<end1

break;

default

cout<<"不及格"<<end1;

}

}

voidmain()

{

charch1='b'

Fune(chl);

Func('A');

}

25.请将下列类定义补充完整。

classBase{public:voidfun(){cout<<“Base::fun”<<endl;}};

classDerived:publicBase

{public:

voidfun(){

______//显式调用基类的fun函数

cout<<“Derived::fun”<<endl;}};

26.若有以下程序:

#include<iostream>

usingnamespacestd;

classSample

{

private:

constintn;

public:

Sample(inti):n(i){)

voidprint()

{

cout<<"n="<<n<<end1;

}

};

intmain()

{

samplea(10);

a.print();

return0;

}

上述程序运行后的输出结果是【】。

27.执行这个程序的输出结果是();

#include<iostream>

usingnamespacestd;

classTestClass1

{

public:

voidfun1(){cout<<"TestClass1\n";}

virtualvoidfun2(){cout<<"TestClass1\n";}

};

classTestClass2:publicTestClass1

{

public:

voidfun1(){cout<<"TestClass2\n";}

voidfun2(){cout<<"TestClass2\n";}

};

voidf(TestClass1&b){b.fun1();b.fun2();}

intmain()

{

TestClass2obj;

f(obj);

return0;

}

28.数据模型按不同应用层次分成3种类型,它们是概念数据模型、【】和物理数据模型。

29.栈和队列通常采用的存储结构是【】。

30.main函数中发生编译错误的语句是______。

#include<iostream.h>

classA

{

public:

inta;

constintb;

A():a(10),b(20){}

voidfun()const

{

cout<<"a="<<a<<"\tb="<<b<<endl;

}

};

voidmain()

{

Aobj1;

constA*ptr=newA;

ptr=&obj1;

ptr->a=100;

ptr->fun();

}

31.常量和变量的区别是:常量在程序运行中值不变,因此它的值在定义时便进行初始化;而尘量的值是可以改变的,【】类型的变量存储的是变量的地址。

32.问题处理方案的正确而完整的描述称为______。

33.函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的语句后,a[0]和a[1]的值分别为【】。

a[0]=1;a[1]=2;swap(a,2);

34.如果在类模板的定义中有一个静态数据成员,则在程序运行中会产生______静态变量。

35.在C++类的规定中:静态函数只能给引用类的静态成员和【】。

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

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

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

}

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

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=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;}

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.使用VC++6.0打开源程序文件3.cpp。其中类TC用于把文件输出到屏幕,然后进行文件的分割。分割的方法如下:第一个文件的大小是文件的前一半,另外一个文件的大小是剩余部分。此程序将in.txt文件中的内容输出到屏幕,并且将文件按照以上方式分割,存于文件out1.txt和out2.txt中。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)从输入文件中获得一个字符,并判断是否到文件结尾,如果到文件结尾,则退出循环。请在注释1后添加适当的语句。(2)把获得的输入文件的内容存储到bur中,并且用len记录下文件的长度。请在注释2后添加适当的语句。(3)将输入文件的后一半内容存储在第二个文件中,请在注释3后添加适当的语句。(4)使用文件流对象打开输入文件in.txt,请在注释4后添加适当的语句。注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。试题程序:#include<iostream.h>#include<fstream.h>#include<stdlib.h)classTC{public:TC(char*fileName){len=0;fstreaminfile;infile.open(fileName,ios::in);charch;//********1********while{cout<<ch;//********2********}infile.close;}voidsplit{fstreamoutfilel;fstreamoutfile2;outfile1.open("out1.txt",ios::out);outfile2.open("out2.txt",ios::out);inti=0:for(i=0;i<len/2;i++){outfilel<<buf[i];}do{//********3********}while(i!=len);outfilel.close;outfile2.close;}prwate:intlen;charbuf[1024];};voidmain{//********4********TCobj;obj.split;return;}47.请使用VC6或使用【答题】菜单打开考生文件夹proj3下的工程proj3,其中声明的CDeepCopy是一个用于表示矩阵的类。请编写这个类的赋值运算符成员函数0perator=,以实现深层复制。要求:补充编制的内容写在“//************333************”与“//****************666*************”之间。不得修改程序的其他部分。注意:程序最后将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。//CDeepCopy.h#include<iostream>#include<string>usingnamespacestd;classCDeepCopy{public:intn;//动态数组的元素个数int*p;//动态数组首地址CDeepCopy(int);~CDeepCopy;CDeepCopy&operator=(constCDeepCopy&r);//赋值运算符函数};voidwriteToFile(char});//main.cpp#include”CDeepCopy.h”CDeepCopy::一CDeepCopy{delete[]P;}CDeepCopy::CDeepCopy(intk){n=k;p=newint[n];}//构造函数实现CDeepCopy&CDeepCopy::0perator=(constCDeepCopy&r)//赋值运算符函数实现{//***********333*********//***********666***********}intmain{CDeepCopya(2),d(3);a.p[O]=1;d.p[O]=666;//对象a,d数组元素的赋值{CDeepCopyb(3);//调用赋值运算符函数a.p[O]=88;b=a;cout<<b.p[O];//显示内层局部对象的数组元素}cout<<d.p[O];//显示d数组元素a.p[O]的值cout<<”dfadeaway;\n”;cout<<a.p[O];//显示a数组元素a.p[O]的值writeToFile(””);return0;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj3。此工程包含一个源程序文件MyMain3.cpp,其中定义的类并不完整。请按要求完成下列操作,将类的定义补充完整。

①定义类Planet的保护数据成员distance和revolve,它们分别表示行星距太阳的距离和行星的公转周期。其中,distance为double型,revolve为int型。请在注释“//**1**”之后添加适当的语句。

②定义类Earth的构造函数Earth(doubled,intr),并在其中计算地球绕太阳公转的轨道周长。假定:circumference=2*d*3.1416。请在注释“//**2**”之后添加适当的语句。

③定义类Earth的成员show(),用于显示所有信息。包括地球距太阳的距离,地球的公转周期,以及地球绕太阳公转的轨道周长。请在注释“//**3**”之后添加适当的语句。

文件MyMain3.cpp中源程序如下:

//MyMain3.cpp

#include<iostream>

usingnamespacestd;

classPlanet

{

protected:

//**1**

public:

Planet(doubled,intr)

{

distance=d;

revolve=r;

}

};

classEarth:publicPlanet

{

private:

doublecircumference;

public:

//**2**

//**3**

};

intmain()

{

Earthobj(9300000,365);

obj.show;

return0;

}

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

(1)添加类complex的无参数的构造函数的定义,将私有成员real和imag都初始化为0。请在注释“//**1**”之后添加适当的语句。

(2)添加类complex的带两个参数的重载构造函数,两个参数r和i都是double类型,要求将r赋值给私有成员real,i赋值给私有成员imag,同时允许调用时参数i可是省略,请在注释“//**2**”之后添加适当的语句。

(3)完成类complex重载加法函数的定义,该函数直接返回一个类complex的对象,同时把参数对象c的实部real和虚部imag分别与当前对象对应部分分别相加,请在注释“//**3**”之后添加适当的语句。

(4)完成类complex的友元函数print的定义,使其以格式“real+imagi”输出,请在注释“//**4**”之后添加适当的语句。

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

#include<iostream.h>

classcomplex

{

public:

//**1**

//**2**

{

real=r;imag=i;

}

complexoperator+(complex&c);

friendvoidprint(complex&c);

private:

doublereal,imag;

};

complexcomplex::operator+(complex&c)

{

//**3**

}

//**4**

cout<<c.real<<"+"<<c.imag<<"i"<<endl;

}

voidmain()

{

complexc1(2.0,3.0),c2(4.0,-2.0),c3;

c3=c1+c2;

print(c3);

c3=c3+complex(3.5);

print(c3);

}

参考答案

1.C解析:break语句将使程序从当前的循环语句(do、while和for)内跳出来,接着执行循环语句后面的语句。break语句和continue语句都C++的跳转语句。break语句又称为跳出语句,它可以用在循环语句和switch语句中。在switch语句中,break用来使执行流程跳出switch语句。在循环语句中,break语句用来使执行流五条件跳出本层循环体。continue语句又称为继续语句,它仅用在循环语句中。它的功能是:结束本次循环,接着进行下一次是否执行循环的条件判定。

2.C解析:此题考查的是运算符的有关概念。运算符重载是针对C++原有运算符进行的,不能通过重载创造新的运算符;除了“.”、“.*”、“->*”、“::”、“?:”这5个运算符之外,其他运算符都可以重载。

3.A解析:C++在创建一个对象时,会调用类的构造函数。语句MyClassab(2),*p;创建了两个对象a、b和指针p,在创建对象a和b后会调用构造函数,而创建指针p时,由于p本身不是对象,所以不调用类的构造函数。

4.A解析:A::表示A的作用域。

5.A解析:模式设计和内模式设计是概念设计的两种方法。物理设计是根据特定的计算机系统,对数据的存储结构和存取方法进行设计,从而实现从逻辑结构到物理结构的转换。从系统开发的角度来看,结构特性设计和行为特性-设计是数据库应用系统所具有的两个特性。结构特性的设计,设计各级数据库模式(静态特性):行为特性的设计,改变实体及其特性,决定数据库系统的功能(动态特性)。

6.B解析:本题考核指针、数组和关键字new。说明一维数组的一般形式为:<数据类型><数组名>[<数组长度>];在此数组长度必须常量表达式,它是一个整常数。B)选项中n是一个int型变量不是常数,所以是错误的。选项A、C使用new获得动态内存空间,它的操作数可以带有初始值表达式或元素个数,A选项的形式表示数组元素的个数,C选项的形式表示为变量*p赋初值n。

7.C解析:复制初始化构造函数的作用是用一个已知的对象来初始化一个被创建的同类的对象,该函数只有一个参数,并且是对同类的某个对象的引用。

8.C解析:派生类Derived由基类Base公有派生,在派生类构造函数声明时系统会自动调用基类的缺省构造函数。调用Derivedd('Derived');后,执行类Derived构造函数的Derived(charc),系统自动调用基类的缺省构造函数Base(),输出字母Base;再执行派生类的构造函数Derived(charc),输出字母Derived。

9.A解析:在函数内部或复合语句内定义变量时,如果没有指定的存储类型或使用了auto说明符,系统就认为所定义的变量具有自动类别。

10.B数据库管理系统是对数据库进行管理的系统软件,它的职能是有效地组织和存储数据,获取和管理数据,接受和完成用户提出的访问数据的各种请求,是数据库系统的核心

11.DD。【解析】模板形参有typename<参数名>、class<参数名>、<类型修饰><参数名>3种形式,即typename与class通用。

12.CC。【解析】++是右结合的,所以先赋值为3,最后输出3+1;常成员函数只有常对象才能调用,所以输出2。

13.B解析:本题的运算过程是fun((int)fun(a+c,b),a-c),fun((int)fun(10,5),2-8),fun((int)15.000000,-6),thn(15,-6)=9。

14.DD.【解析】在线性链表中,各元素在存储空间中的位置是任意的,各元素的顺序也是任意的,依靠指针来实现数据元素的前后件关系。

15.C外部变量i实际上记录的是调用构造函数的次数。

16.A在c++中定义数组时,数组的范围参数在静态定义时必须是一个常数,而在动态分配内存定义时可以是常数,也可以是一个赋了值的参数故选项A是错误的定义方法。

17.C

18.C解析:人工管理阶段是在计算机出现的初期,主要用于科学计算,没有大容量的存储设备。处理方式只能是批处理,数据不共享,不同程序问不能交换数据。文件系统阶段把有关的数据组织成一种文件,这种数据文件可以脱离程序而独立存在,由一个专门的文件管理系统实施统一管理;但是,数据文件仍高度依赖于其对应的程序,不能被多个程序所通用。数据库系统阶段对所有的数据实行统一规划管理,形成了一个数据中心,构成了一个数据仓库;数据库中的数据能够满足所有用户的不同要求,供不同用户共享;数据共享性显著增强。

19.C学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应该是与前两个表能够直接联系且能唯一定义的学号和课号,本题选择C选项。

20.A

21.C数据定义语言:负责数据的模式定义与数据的物理存取构建;数据操纵语言:负责数据的操纵,包括查询及增加、删除、修改等操作;数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等功能。因此本题答案为C)。

22.A栈是先进后出的数据结构,所以栈顶元素最后入栈却最先被删除。栈底元素最先入栈却最后被删除。所以选择A。

23.CC。【解析】上述类的定义共有三处错误:①类的成员变量不能在定义时进行初始化;②类的构造函数不能有返回值(包括void类型);③类的析构函数不能有参数。

24.良好优秀良好良好优秀良好解析:本题主要考察switch语句中break语句的使用。由于caseA和caseB之间没有break语句,导致在输出“优秀”之后顺序执行并输出了“良好”,这与原来的设计思路是不符的。

25.Base::fun();。Base::fun();。解析:本题考查的是虚基类的使用。使用符号“::”可以用来限定要访问的成员所在类的名称。在派生类中对基类成员的访问应读是唯一的,多继承情况下就需要通过使用对象作用域分辨来解决这种对基类成员访问的二义性问题;

26.n=10n=10解析:本题考核常成员数据的应用。类Sample中,定义了一个常数据成员n,所以构造函数只能通过初始化列表来初始化它。

27.TestClass1TcstClass2TestClass1\r\nTcstClass2解析:主函数中首先定义TestClass2对象obj,然后执行“f(obj);”。“voidf(TestClass1&b){b.fun1();b.fun2();}”语句中fun中参数为TestClass1类型的对象b,其中调用fun1()和fun2()。基类TestClass1中的fun2()为虚函数,所以派生类中的fun2也是虚函数,所以输出为调用TestClass1中的fun1,TestClass2中的fun2。即结果为TestClass1和TestClass2。

28.逻辑数据模型逻辑数据模型解析:数据是现实世界符号的抽象,而数据模型(datamodel)则是数据特征的抽象,它从抽象层次上描述了系统的静态特征、动态行为和约束行为,为数据库系统的信息表示与操作提供一个抽象的框架。数据模型按不同的应用层次分成3种类型,它们是概念数据模型(conceptualdatamodel)、逻辑数据模型(logicdatamodel)、物理数据模型(physicaldatamodel)。

29.链式存储和顺序存储链式存储和顺序存储解析:栈和队列都属于线性表,它们一般采用顺序存储结构,也可以对它们采用链式存储结构。注意:栈、数组、表采用的存储结构,各种存储结构的定义和区别。

30.ptr->a=100;ptr->a=100;解析:本题考察的是const的使用。const修饰的是指针变量的值,指针本身是可变的,但指针所指对象的值是常量,即ptr->a是不能被改变的。

31.指针指针解析:指针类型的变量存储的是变量的地址。

32.算法算法

33.212,1解析:数组名作为函数参数传递的是数组的首地址,即实参数组名把实参数组的首地址传给了形参数组名,形参数组名就指向了相应的实参数组,就是说形参数组和实参数其实就是同一个数组,对形参数组元素的修改也同样影响到对应的实参数组元素。

34.多个多个

35.非数据成员非数据成员解析:在C++类的规定中,静态函数只能给引用类的静态成员和非数据成员。36.(1)应改为“ein.getline(str,120,?);”。

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

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

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

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

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

42.(1)应添加“public:”。

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

\n(3)“i++;”应改为“i--;”。

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类的对象被访问。故应在构造函数前添加“public:”,否则该类无法被实例化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则循环永远不会退出。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)应改为“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为类,并不是对象,这里

温馨提示

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

评论

0/150

提交评论