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

下载本文档

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

文档简介

2021年广东省汕头市全国计算机等级考试

C++语言程序设计真题(含答案)

学校:班级:姓名:考号:

一、1.选择题(10题)

i.完全不考虑程序的内部结构和内部特征,而只是根据程序功能导出测

试用例的测试方法是o

A.黑箱测试法B.白箱测试法C.错误推测法D.安装测试法

2.在下列关系运算中,能不改变关系中属性个数且减少元组个数的是

A.并B.差C.投影D.交

3.在进行了任何C++流的操作后,都可以用C++流的有关成员函数检

测流的状态,其中只能用于检测刚进行的操作是否失败的函数名是()。

A.failB.eofC.badD.good

4.已知outfile是一个输出流对象,要想将outfile的文件指针定位到当

前位置之前321字节处,正确的函数调用语句是

A.outfile.seekp(321,ios_base::cur);

B.outfile.seekp(321,ios_base::beg);

C.outfile.seekp(-321,ios_base::beg);

D.outfile.seekp(-321,ios_base::cur);

5.关于关键字class和typename,下列表述正确的是

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

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

C.A)和B)都正确

D.A)和B)都不正确

6.下列程序输出的结果是()。#include<stdio.h>fun1(chara,char

b){charc;c=a;a=b;b=c;}fun2(char*a,charb){charc;c=*a;*a=b;b=c;}

fun3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}voidmain(){chara,b;

a='A';b='B';fun1(a,b);putchar(a);putchar(b);

a='A';b='B';fun2(&a,b);putchar(a);putchar(b);

a='A';b='B';fun3(&a,&b);putchar(a);putchar(b);putchar('\n');}

A.BABBABB.ABBBBAC.ABBABAD.ABABBA

7.有如下类定义:

classFoo

{

public:

Foo(intv):value(v){}//①

-Foo(){}//②

private:

Foo(){}//③

intvalue=O;//④

};

其中存在语法错误的行是()。

A.①B.②C.③D.④

8.关于在调用模板函数时模板实参的使用,下列表述正确的是

A.对于虚拟类型参数所对应的模板实参,如果能从模板函数的实参中获

得相同的信息,则都可以省略

B.对于虚拟类型参数所对应的模板实参,如果它们是参数表中的最后的

若干个参数,则都可以省略

C.对于虚拟类型参数所对应的模板实参,若能够省略则必须省略

D.对于常规参数所对应的模板实参,任何情况下都不能省略

9.下列关于结构化程序设计原则和方法的描述中,错误的是()。

A.选用的结构只准许有一个入口和一个出口

B.复杂结构应该用嵌套的基本控制结构进行组合嵌套来实现

C.不允许使用GOTO语句

D.语言中所没有的控制结构,应该采用前后一致的方法来模拟

10.C++语言类体系中,不能被派生类继承的有()。

A.转换函数B.构造函数C.虚函数D.静态成员函数

二、单选题(13题)

11.有下列程序:#include

voidmain()

#include<stdiO.h>

voidmain()

{intx=l,y=2,z=3;

if(x>y)

if(y<z)print{("%d〃,++z);

elseprintf(〃%d〃,++y);

printf(w%d\n",x++);

}

程序的运行结果是()oA.331B.41C.2D.l

12.在C++语言程序中,对象之间的相互通信通过()。

A.继承实现B.调用成员函数实现C.封装实现D.函数重载实现

13.计算斐波那契数列第n项的函数定义如下:

intfib(intn){

if.(n==O)returnl;

elseif(n==1)return2:

elsereturnfib(n-l)+fib(n-2);

)

若执行函数调用表达式fib(2),函数fib被调用的次数是()。

A.lB.2C.3D.4

14.以下类定义中可能会引起错误的语句是()。

classA

(

public:

~A(){}//1

inti;111

private:

intj;//3

A(inti){i++;}//4

};

A.lB.2C.3D.4

15.C++语言中规定函数的返回值的类型是由()。

A.return语句中的表达式类型所决定

B.调用该函数时的主调用函数类型所决定

C.调用该函数时系统临时决定

D.在定义该函数时所指定的数据类型所决定

16.下列对于线性链表的描述中,正确的是()。

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

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

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

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

17.已知类Myclass的定义如下

classMyClass{

public:

voidfunction1(MyClass&C){cout<<c.data;)

staticvoidfunction2(MyClass&C){cout<<c.data;}

voidfunction3(){cout<<data;}

staricvoidfunction4(){cout<<data;}

private:

intdata;

);

其中有编译错误的函数是()。

A.function1B.function!C.function3D.function4

18.下列关于运算符重载的描述中,错误的是()o

A.可以通过运算符重载在C++中创建新的运算符

B.赋值运算符只能重载为成员函数

C.运算符函数重载为类的成员函数时,第一操作参数就是该类对象

D.重载类型转换运算符时不需要声明返回类型

19.有如下程序:

#nclude<iostream>

usingnamespacestd;

classMyClass{

public:MyClass(intx):val(x){}

voidSet(intx){Val=x;}

voidPrint()const{cout<<"val="<<Val<<'\t';}

private:intval;

};

intmain(){

constMyClassobj1(10);

MyClassobj2(20);

objl.Print();//语句1

obj2.Print();//语句2

objl.Set(20);//语句3

obi2.Set(30);//语句4

return0;

其主函数中错误的语句是()。

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

20.下列叙述中正确的是()o

A.循环队列有队头和队尾两个指针,因此循环队列是非线性结构

B.在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况

C.在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况

D.循环队列中元素的个数是由队头指针和队尾指针共同决定

21.关于静态数据成员的描述中正确的是()。

A.类的静态数据成员不是类的所有对象共享的数据

B.类的静态数据成员不能被类的成员函数调用

C.类的静态数据成员不能被类的构造函数调用

D.类的静态数据成员必须进行初始化

22.有如下程序:

#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)retumm>P.m;return

n>P.n;)

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

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

11>P.n;)

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

23.将E-R图转换为关系模式时,实体和联系都可以表示为o

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

三、2.填空题(12题)

24.用以下语句调用库函数malloc,使字符指针st指向具有11个字节

的动态存储空间,请填空。

st=(char*)[];

25.某二叉树中度为2的结点有n个,则该二叉树中有【】个叶子结

八、、O

26.设i,j,k均为int型变量,则执行完for(i=0,j=10;i<=j;i++,j-

-)k=i+j;语句后,k的值为【】。

27.C++语句constchar*constp="hello";,所定义的指针p和它所指的

内容都不能被O

28.如果要把返回值为void的函数A声明为类B的友元函数,则应在

类B的定义中加入的语句是【】。

29.下列程序在构造函数和析构函数中申请和释放类的私有成员,请完

成该类的实现。

classMyclass{

public:

Myclass(intnum);

〜Myclass();

public:

int*p;

);

Myclass::Myclass(inthum){

【】

Myclass::~Myelass(){

【】;

)o

30.根据下面的主程序,完成类的一种构造函数的最简单形式。

#include<iostream,h>

classbase

(

private:

intnum;

public:

[】;

);

voidmain()

(

basetry(6);

)

31.如下程序定义了“单词”类word,类中重载了〈运算符,用于比较“单

词”的大小,返回相应的逻辑值。程序的输出结果为:AfterSorting:Happy

Welcome,请将程序补充完整。

#include<iostream>

#include<string>

usingnamespacestd;

classWord{

public:

Word(strings):str(s){}

stringgetStr(){returnstr;}

const{return(str<w.str);}

friendostream&operator<<(ostream&output,constWord&w){output

<<w.str;returnoutput;}

private:

stringstr;

);

intmain(){

Wordwl("Happy"),w2("Welcome");

cout<<"Aftersorting:";

if(wl<w2)cout<<wl<<"<<w2;

elsecout<<w2<<"<<wl:

return0;

)

32.已知程序的结果为123,请填空。

#include<iostream.h>

template<classT>

classA

(

public:

Tx,y,Z;

voiddisplay(){cout<<x<<""<<y<<""<<z;)

);

voidmain()

(

A<int>al;

【】

[1

【】

al.display();

)

33.在面向对象方法中,类的实例称为。

34.长度为n的顺序存储线性表中,当在任何位置上插入一个元素概率

都相等时,插入一个元素所需移动元素的平均个数为【】。

35.重载的运算符保持其原有的【】、优先级和结合性不变。

四、程序改错题(10题)

36.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错。请改正程序中的错误,使程序输出的结果为

100

37

32

注意:错误的语句在//******errc)r******的下面,修改该语句即

可。

试题程序:

#include<iostream.h>

II******enor******

voidmain

II******error******

intm=0142:

II******error******

intn=0X27:

intq=32;

cout<<m<<endl;

cout<<n<<endl;

cout<<q<<endl;

return;

)

37.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行有问题,请改正main函数中的错误,使程序的输出结果为:

number=1

number=10

number=100

注意:不要改动main函数,不能增加或删除行。也不能更改程序的结

构,错误的语句在//******errc)r******的下面。

试题程序:

#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);

!1********enor********

objl.number=10;

II**************

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

38.使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运

行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

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

试题程序:

#include(iostream.h)

classTC

(

inti;

public:

TC;

voiddisplay;

~TC;

);

!1******error******

TC:TC

{

cout«"Constructor"«",

i=0;

)

TC:display

(

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

)

II******error******

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

(

TCa;

a.display;

)

39.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

Constructor,i=0,

Destructor

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

可。

试题程序:

#include(iostream.h)

classTC

inti;

public:

TC;

voiddisplay;

〜TC;

};

II******error******

TC:TC

{

cout«"Constructor"«",";

i=0;

)

/!******error******

TC:display

(

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

)

II******error******

TC:TC

(

COUI«"Destructor"«endl:

)

voidmain

TCa;

a.display;

)

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

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实现

的功能为从键盘输入一个字符串,并将结果保存到文件1.txt中。

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

构,错误的语句在

I!******error******白勺卜

试题程序:

#include<iostream>

#include<fstream>

!1********error********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

!I********error********

outl.open("l.txt",binary|app);

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

(

II********enor********

outl.puts(s[i]);

outl.close;

)

voidClearFile

{

ofstreamoutl;

outl.open("l.txt");

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

retumO;

)

41.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,该程序

运行时有错误,请改正错误,使程序正常运行,并且要求最后一个

catch必须抛出执行的任何异常。

程序异常,输出信息为

error

O

ERROR

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

构,错误的语句在//******errc)r******的下面。

试题程序:

#include<iostream.h)

intmain

(

try

(

throw("error");

)

II********error********

catch(chars)

(

cout«s«endl;

)

try

(

throw((int)0);

)

II********error********

catch

(

cout«i«endl;

)

try

(

throw(O);

throw("error");

)

II********error********

catch

(

cout«"ERROR"«endl;

returnO;

)

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

(

I!********enor********

TCobjl;

objl.Print;

TCobj2(3);

II********error********

objl.number=10;

Ii********error*******

TC.SetNumber(lOO);

objl.Print;

obj2.Print;

)

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

I********error********/

inti;

TC04(10);

while(i>5)

!********611^^1*********!

1++:

04.print;

)

cout«endl;

retumO;

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

1.cpp,该程序运行时有错误,请改正程序中的错误。本程序要求实

现的功能为从键盘输入一个字符串,并将结果保存到文件Ltxt中。

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

构,错误的语句在

/I******error******白勺~曲jo

试题程序:

#include<iostream>

#include<fstream>

II********enor********

usingstd;

voidWriteFile(char*s)

(

ofstreamoutl;

II********error********

outl.open("l.txt",binary|app);

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

(

II********error*********

outl.puts(s[i]);

)

outl.close;

voidClearFile

ofstreamout1;

outl.open("l.txt");

outl.close;

)

intmain

(

chars[1024];

ClearFile;

cout«"pleaseinputastrin9:"«endl;

cin.getline(s,1024);

WriteFile(s);

retumO;

)

45.使用VC++6.。打开考生文件夹下的源程序文件1.cpp,但该程

序运行有问题,请改正main函数中的错误,使该程序的输出结果正

确。

程序输出:

8

8

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

即可,其他的语句不能修改。

试题程序:

#include(iostream.h>

classCO

public:

I********enor********/

staticintn=O:

CO

n++:

)

CO

n—:

)

):

!********enor********/

intCO::n;

voidmain

COobj;

COobj2f7];

CO*C=NULL:

c=&obj:

I********error********/

eout«C.n«endl;

cout«C0::n«endl;

五、综合应用题(2题)

46.(l)“while”应改为“while(infile.get(ch))”。

(2)应添加"bur[len++]=ch;bur[len]=ch;len++;

(3)应添加“outfile2«bur[i++];”或“outfile2«buf[i];i++;”。

(4)“TCobj;”应改为"TCobi("in.txt");

【解析】本题考查了文件流的使用。根据题意,第1处要获得一个字符,

并判断是否到文件结尾,所以应使用get函数;第2处应将ch存入buf

数组,同时让len增1;第3处将buf中的字节输出给outfile2,注意同

时让i增1,否则while循环将进入死循环;第4处TC只确一个带char*

参数的构造函数,所以创建对象时必须使用构造参数,根据题意这个参

数应该是“"in.txt"”。

47.使用VC++6.。打开考生文件夹下的源程序文件3.cpp。其中定

义的类不完整,按要求完成下列操作,将类的定义补充完整。

⑴定义类的公有数据成员函数NO、Name[32],其中NO是int型的数

据,Name[32]为字符型。请在注释1后添加适当的语句。

(2)完成函数Set的定义,分别设置NO和Name的值,请在注释2后添

加适当的语句。

⑶完成函数print,请在注释3后添加适当的语句,输出结果如下:

N0=12345

Name=HelloWorld!

(4)添加默认构造函数,设置NO为0,Name为空,请在注释4后添加

适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其

他的程序代码。

试题程序:

#include<iostream.h>

classTC

(

public:

II

No=no;

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

Name[i]=strName[i];

Name[i+1]=0;

)

)

voidprint()

//********3********

TC()

II********4********)

};

intmain()

TCstu:

stu.Set(12345,"HelloWorld!");stu.print();

retumO;

)

六、3.综合应用题(2题)

48.使用VC6打开考生文件夹下的工程test22_3,此工程包含一个源程

序文件test22_3.叩p,其中定义了用于表示考生的类CStudent和它的派

生类CGraduateStudent,但它们的定义并不完整。请按要求完成下列操

作,将程序补充完整。

(1)定义CStudent的构造函数,函数含参数nm,它是char型的指针数

据,请使用字符串函数将类数据成员name初始化。请在注释“〃**1***

之后添加适当的语句。

(2)完成类CStudent的成员函数voidaddscore(doublesc)的定义,将类数

据成员score加上参数sc,请在注释“〃**2**”之后添加适当的语句。

⑶添加类CGraduateStudent的成员函数voidaddpaper(intd)的定义,将

int型的参数d的值加到类的数据成员paper±,请在注释“〃**3**”之后

添加适当的语句。

(4)调用对象sdt的成员函数addpaper使得该考生的论文数量变为10,

将请在注释“〃**4**”之后添加适当的语句。

输出结果如下:

StudentHanson

(Adviso亡MichaelPhong)

Totalpaperis10

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

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

#include<iostream.h>

#include<string.h>

classCStudent

(

private:

charname[30];

intcode;

doublescore;

public:

CStudent(char*nm)

(

〃**]**

)

CStudent(){}

voidputname(char*nm){strcpy(name,nm);}

voidputcode(intd){code=d;}

voidputscore(doublesc){score=sc;}

voidgetname(char*nm){strcpy(nm,name);}

doublegetcode(){returncode;)

doublegetscore(){returnscore;}

voidaddscore(doublesc)

classCGraduateStudent:publicCStudent

private:

charadvisor[30];

intpaper;

public:

voidputadvisor(char*nm){strcpy(advisor,nm);}

voidgetadvisor(char*nm){strcpy(nm,advisor);}

voidputpaper(intd){papered;}

〃**3**

intgetpaper(){returnpaper;}

);

voidmain()

(

CGraduateStudentsdt;

sdt.putname("Hanson");

sdt.putadvisor("MichaelPhong");

sdt.putpaper(8);

charcsname[30];

sdt.getname(csname);

charcaname[30];

sdt.getadvisor(caname);

cout<<"Student"<<csname<<endl;

cout<<"(Advisor:"<<caname<<")"<<endl;

cout<<"Totalpaperis"<<sdt.getpaper()<<endl;

)

49.使用VC6打开考生文件夹下的工程MyProj6o此工程包含一个源程

序文件MyMain6.cppo在程序中,定义了一个Furniture类,Bed类和

Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,

Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的

派生类。

请按要求完成下列操作,将类Date的定义补充完成:

①Bed类是在Furniture类的基础上按公有继承的方式产生的派生类,为

了使程序中的多重继承关系不出现二义性。请在注释“〃**1**”之后添加

适当的语句。

②Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,

为了使程序中的多重继承关系不出现二义性。请在注释“〃**2***之后添

加适当的语句。

③Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生

的派生类。请在注释“〃**3**”之后添加适当的语句。

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

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

//MyMain6.cpp

#include<iostream>

usingnamespacestd;

classFurniture

(

public:

Furniture(){}

voidsetweight(intw)

(

weight=w;

)

intgetweight()

{

returnweight;

protected:

intweight;

);

//**1**classBeddefinition

(

public:

Bed(){}

voidsleep()

(

cout<<"sleeping..."<<endl;

)

};

//**2**classSofadefinition

(

public:

Sofa(){}

voidwatchTV()

(

cout<<"watchingTV..."<<endl;

)

);

〃***3***

(

public:

Sleepersofa(){}

voidFoldout()

(

cout<<"Foldoutthesofa".<<endl;

);

intmain()

{

Sleepersofass;

ss.setweight(20);

cout<<ss.getweight()<<endl;

return0;

)

参考答案

1.A解析:黑箱测试方法完全不考虑程序的内部结构和内部特征,而只

是根据功能导出测试用例。注意:白箱测试是根据对程序内部逻辑结构

的分析来选取测试用例,白箱测试也称为逻辑覆盖测试,故选项B)不正

确;错误推测法只是黑箱测试所使用的一种具体的方法,故选项C)不正

确,安装测试是测试层次中的一种,它属于高级测试,故选项D)不正确。

注意:常用的黑箱测试方法及其定义,白箱测试用例的准则。

2.D解析:交运算是不改变关系中属性个数的,且减少元组的个数。

3.A解析:可以用文件流对象的成员函数来判别文件流当前的状态:fail,

刚进行的操作失败是返回true,否则返回£用$6,飞0£进行输入操作时,

若文件到达文件尾返回true,否则返回false;bad,如果进行了非法操作

返回true,否则返回false;good,刚进行的操作成功时返回true,否则

返回falseo

4.D解析:在文件中偏移定位时的初始值ios::base_beg将指针定位在文

件的开始位置;ios::base_cur将指针定位在文件的当前位置;

ios::base_end将指针定位在文件的结束位置。从当前位置往后偏移量为

正,从当前位置往前偏移,偏移量为负。

5.A解析:本题考核模板的概念。C++中,模板形参具有三种形式:

(l)typename<参数名>,(2)class<参数名>,(3)<类型修饰符><参数

名〉,前两种形式是等价的,在声明模板参数时,关键字typename和

class可以互换。但是在定义类的程序中,关键字class代表的含义是类,

此时不能用typename代替。

6.B解析:由程序中的主函数main入手,分别调用funl,fun2,fun3

函数,得出输出结果。其中,3个函数都是实现的两个形参的交换功能,

只是值传递的方式不同,有的是引用,有的是传值。第一个函数中参数

采用的是值传递的方式,形参的变化不影响实参。所以d调用funl后,

实参a和b并没有交换,仍然是AB。第二个调用中,实参a采用的是

地址,即传递的是地址,所以形参a的改变会影响实参a的值,即BB。

同理,调用fun3后为BA.

7.D

解析:本题考查了类的定义。C++语言规定,在类体中不允许对所定

义的数据成员进行初始化。故本题应该选择D。

8.D

解析:本题考查的是模板实参的省略。模板实参在以下几种情况中不

能省略:

①从模板函数实参表获得的信息有矛盾:

②需要获得特定类型的返回值,而不管参数的类型如何;

③虚拟类型参数没有出现在模板函数的形参表中;

④函数模板含有常规形参。

故本题的正确答案是选项D。

9.C解析:限制使用GOTO语句是结构化程序设计的原则和方法之一,

但不是绝对不允许使用GOTO语句。选项A)、B)、D)为结构化程序设

计的原则。

10.B解析:派生类对象的数据结构是由基类中说明的数据成员和派生

类中说明的数据成员共同构成,所以不能继承基类的构造函数,必须重

新定义。

11.D

Do【解析】C语言中规定,else与离它最近的if相匹配。\r\nx=l,

y=2,z=3,所以第一个if的条件(x>y)不成立,直接执行printf("%d\

n",x+1);语句,输出x的值1,再把x加1。

12.B解析:对象属于某个已知的类,是类的实例,对象之间通信实际上

就是通过函数传递信息,封装是把数据和操作结合在一起,继承是对于

类的方法的改变和补充,重载是多态性之一。

13.C

Co【解析】根据递归调用的含义,当n为2时有fib(o),fib(l),fib(2)

被调用,且fib(O),fib(l)时调用结束,共3次。

14.D

Do【解析】本题考查关于C++语言类的定义方法。在C++语言中

类定义中的构造函数是私有的,但是却调用了其中的公有变量,在实

例化时会斟现错误。

15.D

16.B解析:在链式存储结构中,存储数据结构的存储空间可以不连续,

各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据

元素之间的逻辑关系是由指针域来确定的。

17.D

18.A

Ao【解析】运算符的重载是针对C++中原有运算符进行的,不能通

过重载创造新的运算符。

19.C

解析:此题考查的是常对象。使用const关键字修饰的对象称为常对

象,它不能被更新。主函数中声明的。bjl是常对象,因此objl不能被

更新,即语句3更新。均1的语句错误。

20.D

\r\n

所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位

置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队

尾指针•rear指向队列中的队尾元素,用排头指针-front指向排头元素的

前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针

real指向的位置之间所有的元素均为队列中的元素。求解队列中元素个

数的方法是:若front>rear,队列中有n-front+rear个元素(其中n为循

环队列的容量);若front<rear,队列中有real-front个元素;若

front=rear,队列中有n个或。个元素。循环队列是线性结构。因此本

题的正确答案是D。

21.D解析:C++类中的静态成员变量是该类中所有对象所共有的,它

能够被类中的任何函数调用,所以选项A)、选项B)、选项C)是错误

的。而类的静态数据成员是必须要进行初始化才能使用的。

22.A

解析:题目要求先比较m的大小。其次比较n的大小,首先看函数定

义booloperator>(Pairp)corlst,从中可以看出B)和D)选项和函数定义不

一致,缺少const,故排除;选项c只有一层比较不符合题意,故排除

C)选项。因此,本题答案为A)。

23.C从E-R图到关系模式的转换是比较直接的,实体与联系都可以表

示成关系,E-\nR图中属性也可以转换成关系的属性。本题选择C选

项。

24.malloc(ll)或malloc(sizeof(char)*11)malloc(11)或

malloc(sizeof(char)*l1)解析:malloc函数的参数可以是一个具体的常数,

也可以是一个表达式。在本题中,可以是malloc(ll),也可以借助于sizeof

运算符来表示。

25.n+l

26.1010解析:该for语句以i为0、j为10初始化,循环条件是i<=j

每次循环后i增1、j减1,循环体是将i与j的和赋给k0这样变量k将

保存的是最后一次赋给它的值。一次循环后i为1、j为9,二次循环后

i为2、j为8............五次循环后i为5、j为5,继续第六次循环,将

i与j的和1。存于k后,i为6、j为4,结束循环。所以循环执行后k为

10o

27.改变改变解析:本题考查的是定义常量的关键字const,由const定

义的变量的值不可以再改变,所以定义时必须进行初始化。

28.friendvoidA();friendvoidA();解析:C++中类的友元函数在声明

时应在该函数前面加上关键字friend,同样如果要声明一个类为另一个

类的友元类也要在前面类名前加上friendo

29.P=newint(a)、deletePP=newint(a)sdeleteP解析:new和delete的用

法。

3O.base(intn){}base(intn){}解析:注意,根据main函数中对类base的

使用情况可知,base类必须提供整型单参构造函数,同时要求构造其最

简单的形式,故函数体为空。

3l.booloperator<(Wordw)booloperator<(Wordw)解析:重载关系运算

符“〈”为成员函数,得到逻辑类型结果,且只要一个参数。

32.al.x=l;al.y=2;al.z=3;al.x=l;\r\nal.y=2;\r\nal.z=3;解析:通

过程序的结果知道数据类型是int,所以调用时声明模板实参为int的,

再对x,y,z进行赋值。

33.对象对象解析:在面向对象概念中,所有的同类的实体的抽象就构

成一个类,而类被实例化就形成一个对象。

34.n/2n/2解析:性表的任何位置插入一个元素的概率相等,即概率为

P=l/(n+l),则插入一个元素时所需移动元素的平均次数为E=l/(n+l)

(n-i+1)=n/2o

35.操作符个数操作符个数解析:本题考查的是运算符重载的概念,用

户重新定义的运算符不改变原运算符的优先性和结合性,也不改变运算

符的语法结构.也就是说重载运算符不会产生新的运算符。

u,,

36.(l)voidmaino

(2)“intm=0144;

(3)“intn=OX25;”或“intn-0x25;

【解析】本题主要考查了主函数定义及幕同进制之间的转换,包括十

进制到八进制,十进制到十六进制。主函数定义的定义形式为

“main”,函数名之后必须是一对括号,因此第1处应改为“voidmain”。

cout输出默认是以十进制方式输出的,根据题目要求输出的结果可发

现变量的初值不正确,十进制的100对应八进制的144,卡进制的37

对应十六进制的25,因此2和3应分别改成“intm=0144;”,

“intn=0x25;”或“intn=0x25;

37.⑴应改为“TCobjl(l);

\n(2)应改为“Objl.SetNumber(lO);

\n(3)应改为“0bj2.SelNumber(lOO);"。

\n【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个输

出结果两1,所以补全参数1,即第1处的“TCobjl(l);"。第2处处的

“objl.number=10;”应该是调用成员函数SetNumber赋值。在C++中

成员函数的使用形式应该是:对象名.成员函数,所以修改为

“objl.SetNumber(lO);"。类是对象的抽象,而对象是类的具体实例。

第3处叮(2.5611^11166«100);”语句中的T(2为类,并不是对象,这里

应该使用定义的对象,即obj2,所以将语句修改为

“obj2.SetNumber(lOO);

38.(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处的语句叮(3::丁€:”可知,显然这里是在类外实现析构函数,析构函

数是一个特殊的函数,它的名称和类名相同,并在前面加“字符,用

采与构造函数加以区别,因此第3处的语句应改为“TC::~TC”。

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

⑵应改为“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;

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

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

\n【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,

对于C++中引入标准命名空间的格式,缺少namespace,所以第1处

的语句修改为“usingnamespacestd;第2处,调用成员函数open中,

输入、输出方式是在ios类中定义的,所以“outl.open是.txt',binary|

app);”语句缺少类ios,即第2处的语句修改为"outl.open(,l.txt',ios::

binary|ios::app);”。第3个标识应该用流成员函数put输出字符,所

以第3处的语句修改为“outl.put(s[i]);

41.(1)应改为"catch(char*s)”。

⑵应改为“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(…)”。

42.⑴应改为“TCobjl(l);

(2)应改为“Objl.SetNumber(lO);

(3)应改为“0bj2.SelNumber(lOO);

【解析】本题第1处的“TCobjl;”语句是声明TC类的对象Objl,根据

TC类构造函数的定义TC(inti),存在整型参数,并且题目要求第一个

输出结果两1,所以补全参数1,即第1处的“TCobjl(l);第2处处

的“objl.number=10;”应该是调用成员函数SetNumber赋值。在C+

+中成员函数的使用形式应该是:对象名.成员函数,所以修改为

“objl.SetNumber(lO);类是对象的抽象,而对象是类的具体实

例。第3处“TC.SetNumber(lOO);”语句中的TC为类,并不是对象,

这里应该使用定义的对象,即。bj2,所以将语句修改为

“obj2.SetNumber(lOO);

43.(1)应添加“public:

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

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

\n【解析】本题主要考查的是成员的访问属性。成员的访问属性有公有、

保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类

的对象被访问。故应在构造函数前添加“public:“,否则该类无法被实例

化。变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造

参数,题目已要求使用后者。本题要求输出5个数,while的循环变量i

每次减1,在i>5时循环,故i初始化应为10。若循环中i每次增1,则

循环永远不会退出。

44.(1)应改为"usingnamespacestd;

(2)应改为"outl.open("l.txt",ios::binaryIios::叩p);

(3)应改为“outl.put(s[i]);

【解析】本题第1处的“usingstd;”是在程序中引入标准命名空间std,

对于C++中引入标准命名空间的格式,缺少namespace,所以第1处

的语句修改为“usingnamespacestd;第2处,调用成员函数open

中,输入、输出方式是在ios类中定义的,所以“outl.open("l.txt",

binaryIapp);”语句缺少类ios,即第2处的语句修改为

“outl.open("1.txt",ios::bi

温馨提示

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

评论

0/150

提交评论