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

下载本文档

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

文档简介

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

一、1.选择题(10题)1.开发大型软件时,产生困难的根本原因是()

A.大系统的复杂性B.人员知识不足C.客观世界千变万化D.时间紧、任务重

2.下面函数的功能是()。intfun(char*x){char*y=X;while(*y++);return(y-x-1);}

A.求字符串的长度B.比较两个字符串的大小C.将字符串x复制到字符串yD.将字符串x连接到字符串y后面

3.有如下程序:#include<iostream>usingnamespacestd;intmain(){voidfunction(doubleval);doubleval;function(val);cout<<val;return0;}voidfunction(doubleval){val=3;}编译运行这个程序将出现的情况是A.编译出错,无法运行B.输出:3C.输出:3.0D.输出一个不确定的数

4.下列各C++程序段中,不包含复合语句的选项为()。

A.{x=y+z;}

B.for(i=1;k<0;i++)if(i%3==1)cout<<i<<endl;

C.while(i<10){cout<<i<<endl;i++;}

D.if(i<10){i=i+1;}

5.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为()

A.12B.13C.14D.15

6.下面程序的输出结果是()。#include<iostream>usingnamespacestd;intfun(int,int);//fun()函数的说明voidmain(){inta=48,b=36,c;c=fun(a,B);cout<<c;}intfun(intu,intv){intw;while(v){w=u%v;u=v;v=w;}returnu;}

A.24B.12C.48D.36

7.C++中运算符优先级由高到低排列正确的是

A.::+++||B.<*||,C.sizeof%+::D.,&&newsizeof

8.已知:intn=10;那么下列语句中错误的是

A.int*p=newlong[n];

B.intp[n];

C.int*p=newlong(n);

D.intp[10];

9.下列关于对列的叙述中正确的是()。

A.在队列中只能删除数据B.在队列中只能插入数据C.队列是先进后出的线性表D.队列是先进先出的线性表

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

A.1,1B.1,2C.2,2D.2,1

二、单选题(13题)11.下面对结构或类中成员的访问中,不正确的访问是______。

A.*pointer.salary;(其中pointer为指向类对象的指针)

B.pointer->salary;

C.x=orker,salary;(其中worker为具有类类型的对象)

D.Location&rA=A1;Intx=rA.GetX();(Location为已定义的类,A为对象)

12.有以下语句,则对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))

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

A.算法的执行效率与数据的存储结构无关

B.算法的空间复杂度是指算法程序中指令(或语句)的条数

C.算法的有穷性是指算法必须能在执行有限个步骤之后终止

D.以上三种描述都不对

14.下列语句中不是死循环的是()。

A.inti=10;

B.for(inti=1;j<10;i++)while(1){{i--;i--;}if(i==1)break;

C.inti-0;

D.inti=1:

15.

16.在E—R图中,用来表示实体联系的图形是()。

A.椭圆形B.矩形C.菱形D.三角形

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

A.有一个以上根结点的数据结构不一定是非线性结构

B.只有一个根结点的数据结构不一定是线性结构

C.循环链表是非线性结构

D.双向链表是非线性结构

18.下面程序的运行结果为()。#include<iostream.h>voidswap(int&a,intB.inttemp;temp=a++:a=b:b=temp;}voidmain{ima=2,b=3;swap(a,B.;eout<<a<<”,”<<b<<endl;}A.2,3B.3,2C.2,2D.3,3

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

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

20.下列关于赋值运算符“=”重载的叙述中,正确的是A.赋值运算符只能作为类的成员函数重载

B.默认的赋值运算符实现了“深层复制”功能

C.重载的赋值运算符函数有两个本类对象作为形参

D.如果已经定义了复制(拷贝)构造函数,就不能重载赋值运算符

21.有如下程序:#include<iostream>usingnamespacestd;classTestClass{public:virtualvoidfunl(){cout<<"funlTestClass";}virtualvoidfun2(){cout<<“fun2TestClass”;}};classTestClassl:publicTestClass{voidfun(){cout<<“funlTestClassl”;}};intmain(){TestClassobj1,*P;TestClasslobj2;p=&obj2;p->fun1();p->fun2();return0;}该程序执行后的输出结果是()。A.funlTestClasslfun2TestClass

B.funlTestClass1fun2TestC1ass1

C.funlTestClassfun2TestClass

D.funlTestClassfun2TestClassl

22.下列程序的运行结果为()。#include<iostream.h>template<classTT>classFF{TTal,a2,a3;public:FF(TTbl,TTb2,TTb3){al=bl;a2=b2;a3=b3;}TTSum{returnal+a2+a3;};}voidmain{FF<int>x(int(1.1),2,3),Y(int(4.2),5,6);cout<<x.Sum<<<<Y.Sum<<endl;}A.6.115.2B.615C.615.2D.6.115

23.运算符重载是对已有的运算符赋予多重的含义,所以()。

A.能够对基本类型数据(如double),重新定义"+"运算符的含义

B.只能重载C++中己经有的运算符,不能重新定义新运算符

C.能够改变一个已有运算符的优先级和操作数个数

D.C++中现有的所有运算符都可以重载

三、2.填空题(12题)24.某二叉树中度为2的结点有12个,则该二叉树中有______个叶子结点。

25.重新定义标识符的作用域规定是外层变量被隐藏,【】变量是可见的。

26.在C++语言中每个类都有一个【】指针,该指针指向正在调用成员函数的对象。

27.下列程序的输出结果是【】。

#include<iostream.h>

intCalcDigital(char*str)

{

if(str==NULL)

return0;

intnum_of_digital=0;

for(inti=0;str{i]!=0x0;i++)

if(str[i]<='9'&&str[i]>='0')

num_of_digital++;

returnnum_of_digital;

}

voidmain()

{

chara[]="Beijing2008olympic";

cout<<CalcDigital(a)<<endl;

}

28.数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。

29.若a=12,b=14,c=0,则表达式((y=(a>b)?a:b)>c)?y:c的值为【】

30.若有以下程序:

#include<iostream>

usingnamespacestd;

#definePI3.14

classPoint

{

private:

intx,y;

public:

Point(inta,intb)

{

x=a;

y=b;

}

intgetx()

{

returnx;

}

intgety()

{

returny;

}

};

classCircle:publicPoint

{

intr;

public:

Circle(int'a,intb,intC):Point(a,b)

{

r=c;

}

intgetr()

{

returnr;

}

doublearea()

{

returnPI*r*r;

}

};

intmain()

{

Circlec1(5,7,10);

cout<<c1.area()<<end1;

return0;

}

程序执行后的输出结果是【】。

31.虚基类说明格式如下:slass派生类名【】<继承方式><基类名>。

32.冒泡排序在最好情况下时间复杂度为【】。

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

34.条件表达式(x!=9)&&(x==9)的结果是【】。

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

四、程序改错题(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必须抛出执行的任何异常。程序异常,输出信息为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,该程序运行时有错,请改正其中的错误,使程序正常运行,输出的结果为

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,该程序运行时有错误,请改正程序中的错误。本程序要求实现的功能为从键盘输入一个字符串,并将结果保存到文件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;

}

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

}

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

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

{

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

inti;

TC04(10);

while(i>5)

{

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

i++:

04.print;

}

cout<<endl;

return0;

}

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

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。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)定义类的公有数据成员函数N0、Name[32],其中N0是int型的数据,Name[32]为字符型。请在注释1后添加适当的语句。(2)完成函数Set的定义,分别设置N0和Name的值,请在注释2后添加适当的语句。(3)完成函数print,请在注释3后添加适当的语句,输出结果如下:N0=12345Name=HelloWorld!(4)添加默认构造函数,设置N0为0,Name为空,请在注释4后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#include<iostream.h>classTC{public://********1********//********2********{No=no;for(inti=0;strName[i]!=0;i++){Name[i]=strName[i];Name[i+1]=0;}}voidprint(){//********3********}TC(){//********4********)};intmain(){TCstu:stu.Set(12345,"HelloWorld!");stu.print();return0;}

47.请使用VC6或使用【答题】菜单打开考生目录proj3下的工程文件proj3,此工程中包含一个源程序文件proj3.cpp,补充编制c++程序proj3.cpp,其功能是读取文本文件in.dat中的全部内容,将文本存放到doc类的对象myDoc中。然后将myDoc中的字符序列反转,并输出到文件out.dat中。文件in.dat的长度不大于1000字节。要求:补充编制的内容写在“//**********”与“//**********”两行之间。实现将myDoc中的字符序列反转,并将反转后的序列在屏幕上输出。不得修改程序的其他部分。注意:程序最后已将结果输出到文件0ut.dat中,输出函数writeToFile已经给出并且调用。//proj3.cpp#include<iostream>#include<fstream>#include<catting>usingnamespacestd;classdoc{private:char*sir;//文本字符串首地址intlength;//文本字符个数public://构造函数,读取文件内容,用于初始化新对象,filename是文件名字符串首地址doc(char*filename);voidreverse;//将字符序列反转一doc;voidwriteToFile(char*filename);};doc::doc(char}filename){ifstreammyFile(filename);intlen=1001,tmp;atr=newchar[1en];length=0;while((trap=myFile.get)!=EOF){str[1ength++]=trap;}str[1ength]=‘\0’;myFile.close;}voiddoc::reverse{//将数组atr中的length个字符中的第一个字符与最后一个字符交换,第二个字符与倒数第二个//字符交换……//*************333*************//*************666*************}doc::~doe{delete[]str;}voiddoc::writeToFile(char*filename){OfstreamoutFile(filename);outFile<<str;outFile.close;}voidmain{docmyDoc(”in.dat”);myDoc.reveme;myDoc.writeToFile(”out.dat”);}

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

(1)定义类Rectangle的私有数据成员left,top和fight,bottom,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。

(2)添加类Rectangle的带四个int型参数1、t、r、b的构造函数的声明,并使这四个参数的默认值均为0,请在注释“//**2**”之后添加适当的语句。

(3)添加类Rectangle的成员函数SetTop()参数为int型的t,作用为把t的值赋给类的数据成员top,添加类Rectangle的成员函数SetBottom()参数为int型的t,作用为把t的值赋给类的数据成员bottom,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类Rectangle的成员函数Show()的定义,使其以格式“right-bottompointis(right,bottom)”输出,请在注释“//**4**”之后添加适当的语句。

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

#include<iostream.h>

classRectangle

{

//**1**

intright,bottom;

public:

//**2**

~Rectangle(){};

voidAssign(int1,intt,intr,intb);

voidSetLeft(intt){left=t;}

voidSetRight(intt){right=t;}

//**3**

voidSetBottom(intt){bottom=t;}

voidShow();

};

Rectangle::Rectangle(int1,intt,intr,intb)

{

left=1;top=t;

right=r;bottom=b;

}

voidRectangle::Assign(int1,intt,intr,intb)

{

left=1;top=t;

right=r;bottom=b;

}

voidRectangle::Show()

{

cout<<"left-toppointis("<<left<<","<<top<<")"<<'\n';

//**4**

}

voidmain()

{

Rectanglerect;

rect.Show();

rect.Assign(100,200,300,400);

rect.Show();

}

49.使用VC6打开考生文件夹下的工程test24_3,此工程包含一个源程序文件test24_3.cpp,其中定义了抽象类point和它的派生类line,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义类point的构造函数,函数含参数i和j它们都是int型数据,默认值都是0,用i和j分别将point的数据成员x0和y0初始化。请在注释“//**1**”之后添加适当的语句。

(2)完成类point的成员函数纯虚函数voidset()和voiddraw()的定义,请在注释“//**2**”之后添加适当的语句。

(3)添加类line的构造函数,函数含参数i,j,m和n,它们都是int型数据,默认值都是0,用i和j分别将point的数据成员x0和y0初始化。请在注释“//**3**”之后添加适当的语句。输出结果如下:

line::set()called.

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

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

#include<iostream.h>

classpoint

{

public:

//**1**

//**2**

protected:

intxO,yO;

}

classline:publicpoint

{

public:

//**3**

{

x1=m;

y1=n;

}

voidset(){cout<<"line::set()called.\n";}

voiddraw(){cout<<"line::draw()called.\n";}

protected:

intx1,y1;

};

voidmain()

{

line*lineobj=newline;

1ineobj->set();

}

参考答案

1.A开发大型软件时,产生困难的原因有很多,如需求难以捕捉、员工水平有限、工作安排不太合理、进度控制难以把握、系统开发时间有限等元素,但这些都不是根本的原因,根本的原因是大系统的复杂性。

2.A解析:函数中,首先让字符串指针指向字符串x,然后通过while循环使y指向字符串x的尾部。再通过两指针之间的算术运算得出字符串x的长度。

3.D解析:本题考查的是函数参数的传递。在C++中,函数在传递参数时,总是将实参值的副本传递(拷贝)给被调用函数的形参,即传值调用。因此,在函数中对形参所作的任何操作都不会改变函数外的实参。故本题function()函数不会对主函数中的\u3000val变量造成任何改变,val也没有被初始化,所以输出的是一个不确定的值:故应该选择D。

4.B

5.B解析:按照题目的要求可得到满足条件的二叉树,如下图所示:

故该二叉树中总的结点个数为13。

6.B解析:注意运算符%的特点。

7.A解析:运算符的优先级是::最高,其次是【】,(),等,然后是++,--,再低还有->*,*,+,<<,>>,=。注意:逗号的优先级最低。

8.B解析:本题考核指针、数组和new运算符。运算符new用于动态申请存储空间,它的操作数为某种数据类型且可以带有初值表达式或元素个数,若带初值,则其表达式为:<指针>=new<类型>(初值),例如C选项所示,若带有元素个数,则其语法格式为:<指针>=new<类型>[<元素个数>],例如A选项所示。数组定义中数组大小必须为常量,而B)选项中的n为一变量所以是错误的。

9.D解析:队列是允许在一端进行插入而在另一端进行删除的线性表。在队列中,最先插入的元素将最先能够被删除,反之,最后插入的元素将最后才能被删除。因此,队列又称为“先进先出”或“后进后出”的线性表。

10.D解析:如果函数实参是数组名,形参也应为数组名,函数swap中形参进行了交换,实际卜也是实参进行了交换。而且数组名代表数组首元素的地址,并不代表数组的全部元素。所以,swap(b,2)是数组b第一个元素与第二个元素进行交换,即b[0]与b[1],根据题干,知道答案为2,1。

11.A

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

13.C解析:本题考查了算法的基本概念。算法的执行效率不仅与问题的规模有关,还与数据的存储结构有关;算法的空间复杂度是指执行算法所需要的内存空间;算法的有穷性是指算法必须能在有限的时间内执行完,即算法必须能在执行有限个步骤之后终止。

14.A选项A中i自减到1时就会执行break语句跳出循环,选项B中i<10永远成立不会跳出循环.选项c中第一次进入循环体后i>0永远不会跳出循环,选项D中未给出结束循环的条件。

15.A

16.CC。【解析】E—R图也即实体~联系图(EntityRelationshipDiagram),提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型,构成E—R图的基本要素是实体型、属性和联系,其表示方法为:实体型(Entity):用矩形表示,矩形框内写明实体名;属性(Attribute):用椭圆形表示,并用无向边将其与相应的实体连接起来;联系(Relationship):用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。

17.B解析:如果一个非空的数据结构满足以下两个条件:(l)有且只有一个根结点;(2)每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构。如果一个数据结构不是线性结构,则称之为非线性结构,故A项错误。有一个根结点的数据结构不一定是线性结构,如二叉树,B项说法正确。循环链表和双向链表都属于线性链表。故C、D项错误。

18.D本题考查的是引用调用,因为函数swap01用调用参数a,所以在swap函数中a的变化会改变主函数中a的值,即a自加l,但b的值并未改变。

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

20.A解析:=、[]、()、->以及所有的类型;转换运算符只能作为成员函数重载,A项正确。默认的赋值运算符只实现了浅层复制,B项错误。赋值运算符只能作为成员函数重载,形参表中只有一个参数,对应于第二操作数,C项错误。一个类中如果需要重载运算符“=",通常也就需要定义自己特有的复制构造函数,反之亦然,故D项错误。

21.AA。【解析】TestClass为基类,TestClass1是TestClass的派生类。基类中的funl和fun2被定义为虚函数,C++规定,当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数,所以派生类中的funl和fun2也是虚函数。本题从main主函数入手,首先定义了TestClass类型的对象obil和指针P,然后又定义了TestClassl的对象obj2。指针指向对象obj2,然后调用其成员函数fun1,即输出“funlTestClassl”。

22.B本题考查模板函数的应用,表达式int(1.1)和int(4.2)足将1.1和4.2强制转换为整型。

23.B解析:C++在重载运算符时,必须符合以下的条件:

①不可以重载内置的C++数据类型(如int,double等类型)运算符的含义;

②不可以定义C++中没有的运算符;

⑨不可以改变重载运算符的优先级与操作数的个数;

④有些运算符不能被重载,例如域运算符(::),条件运算符(?:)等,具体哪些运算符不能被重载与编译器有关。

24.13

25.内层内层

26.this

27.44解析:分析本题可知函数功能为计算一个字符串中包含的数字个数。字符串中包含的数字有2008,故输出为4。

28.模式或逻辑模式或概念模式模式或逻辑模式或概念模式

29.14

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

31.virtual

32.O(n)

33.对象对象解析:在面向对象概念中,所有的同类的实体的抽象就构成一个类,而类被实例化就形成一个对象。

34.00解析:两个条件必然有一个不满足,由于两者是与的关系,所以为0。

35.n-1

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

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”。

\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”。

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

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

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

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)“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;”。

45.(1)应改为“assert(sizeof(s1)==4);”。

\n(2)应改为“assert(sizeof(s2)==1O);”。

\n(3)应改为“assert(sizeof(s3)==1);”。

\n【解析】assert函数如果为假,则会产生一个中断异常。所以要让它正常执行输出结果,那么assert函数只有为真,才不会产生中断异常。“assert(sizeof(

温馨提示

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

最新文档

评论

0/150

提交评论