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

下载本文档

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

文档简介

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

一、1.选择题(10题)1.下列描述中错误的是()。

A.派生类可以使用private派生

B.对基类成员访问必须是无二义性的

C.赋值兼容规则也适合于多继承

D.基类和派生类中存在同名函数,将出现二义性

2.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,在划线处应填入的选项是#include<iostream.h>voidmain(){inti=0,j,k;do{i++;k=316-13*i;}while(______);j=k/11;cout<<"316=13*"<<i<<"+11*"<<j;}

A.k/11B.k%11C.k/11==0D.k%11==0

3.为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为______。

A.PAD图B.N-S图C.结构图D.数据流图

4.在下面的类定义中,错误的语句是()。classSample{public:Sample(intval)://①~Sample();//②private:inta=2.5;//③Sample()://④};

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

5.数据库管理系统DBMS中用来定义模式、内模式和外模式的语言是______。

A.DMLB.CC.DDLD.Pascal

6.while和do-while循环的主要区别是()。

A.do-while的循环体至少无条件执行一次

B.while的循环控制条件比do-while的循环控制条件更严格

C.do-while允许从外部转到循环体内

D.do-while的循环体不能是复合语句

7.在C++语言中,打开一个文件就是将这个文件与一个什么建立关联?

A.流B.类C.结构D.对象

8.下面四个关键字中,说明友元函数的是()。

A.friendB.virtualC.publicD.base

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

A.调用该函数时系统临时

B.return语句中的表达式类型

C.定义该函数时所指定的函数类型

D.调用该函数时的主调函数类型

10.关于模板,下列说法不正确的是()

A.用类模板定义一个对象时,不能省略实参

B.类模板只能有虚拟类型参数

C.类模板本身在编译中不会生成任何代码

D.类模板的成员函数都是模板函数

二、单选题(13题)11.若有下面的函数调用:fun(a+b,3,max(n-1,b))则fun的实参个数是A.3B.4C.5D.6

12.关于函数的返回值,正确的是()。

A.由return语句返回时,只带回一值,其类型在函数定义时确定

B.其类型由调用表达式决定

C.函数可以没有返回值,这时在函数定义中,函数的类型说明就没必要了

D.函数调用就要有返回值,否则调用就没有意义了

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

A.plus(3,5L);

B.plus(3,5L);

C.plus(3,5L);

D.plus(3,5L);

14.在一个派生类的成员函数中,试图调用其基类的成员函数“voidf();”,但无法通过编译。这说明()。A.f()是基类的私有成员B.f()是基类的保护成员C.派生类的继承方式为私有D.派生类的继承方式为保护

15.下面程序的运行结果为

#include<iostream.h>

voidswap(int&a,intb)

{

inttemp;

temp=a++;

a=b;

b=temp;

}

voidmain()

inta=2,b=3;

swap(a,b);

cout<<a<<","<<b<<endl;

}

A.2,3B.3,2C.2,2D.3,3

16.字符串常量"hello"的字符个数是()。

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

17.某二叉树共有7个结点,其中叶子结点只有1个,则该二叉树的深度为(假设根结点在第1层)()。

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

18.在下列关键字中,不能用来表示继承方式的是()。

A.privateB.staticC.publicD.protected

19.实体是信息世界中广泛使用的一个术语,它用于表示()。

A.有生命的事物B.无生命的事物C.实际存在的事物D.一切事物

20.判断char型变量c是否为小写字母的正确表达式是A.‘a’<=c<=‘z’

B.(c>=A)&&(c<=z)

C.(‘a’>=c)||(‘2’<=c)

D.(c>=‘a’)&&(c<=‘z’)

21.设int&max(int&,int&)返回两参数中较大者,如有两整型变量

inta=5;intb=10;在执行max(a,b)++后,a,b的值分别为

A.5,10B.6,10C.5,11D.6.11

22.若有以下程序:#include<iostream>usingnamespacestd;classBase{public:Base(){x=0;}intx;};classDerivedl:virtualpublicBase{public:Derivedl(){x=10;}};classDerived2:virtua11publicBase{public:Derived2(){x=20;}};classDerived:publicDerivedl,protectedDerived2{};intmain(){Derivedobj;cout<<obj.x<<endl;return0;}该程序运行后的输出结果是()。A.20B.30C.10D.0

23.以下非法的赋值表达式是()。

A.n=(i=2,++i);B.j++;C.++(i+1);D.x=j>0;

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

#include<iostream.h>.

#include<fstream.h>

#include<stdlib.h>

voidmain()

{

fstreamoutfile,infile;

outfile.open("data.clat",ios::out);

if(!outfile)

{

cout<<"Can'topenthefile."<<end1;

abort();

}

outfile<<"1234567890"<<end1;

outfile<<"aaaaaaaaa"<<end1;

outfile<<"**********"<<end1;

outfile.close();

infile.open("data.dat",ios::in);

if(!infile)

{

cout<<"Can'topenthefile."<<end1;

abort();

}

charline[80];

intI=0;

while(!infile.eof())

{

I++;

infile.getline(line,sizeof(line));

cout<<I<<":"<<line<<end1;

}

infile.close();

}

25.设有定义语句:doublex=2.5,y=4.7;inta=7;那么表达式x+a%3*(int)(x+y)%2/4的值为【】。

26.按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于______。

27.软件是程序、数据和______的集合。

28.如下程序的输出结果是______。

#include<iostream>

usingnamespacestd;

classPet{

charname[10];

public:

Pet(char*nanle){strcpy(this->name,name);}

constchar*getName()const{returnname;}

virtualvoidcall()eonst=0;

};

classDog:publicPet{

public:

Dog(char*name):Pet(name){}

voidcall()eonst{cout<<"汪汪叫";}

};

classCat:publicPet{

public:

Cat(char*name):Pet(name){}

voidcall()const{eout<<"喵喵叫";}

};

intmain(){

Pet*petl=newDog("哈克"),*pet2=newCat("吉米");

eout<<petl->getName();petl->call();eout<<endl;

cout<<pet2->getName();pet2->call();eout<<endl;

return0;

}

29.operator是运算符重载时必须使用的关键字,它和被重载的运算符连在一起,作为运算符函数的专用函数名,务必把该函数说明为______的。

30.常用的黑箱测试有等价分类法、______、因果图法和错误推测法4种。

31.数据结构分为逻辑结构和存储结构,循环队列属于______结构。

32.大多数C++程序都要包含______头文件。该文件中包含了所有输入/输出流操作所需要的基本信息。

33.如果表达式x=y*z中的*是作为成员函数重载的运算符,采用运算符函数调用格式,该表达式还可以表示为______。

34.已知doublevar;是文件F1.CPP中的一个全局变量定义,若文件F2.CPP中的某个函数也需要访问,则在文件F2.CPP中var应说明为【】。

35.软件设计模块化的目的是【】。

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

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,该程序运行有问题,请改正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;}

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

}

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

}

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,此工程中包含一个源程序文件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”);}47.使用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;}六、3.综合应用题(2题)48.使用VC6打开考生文件夹下的工程MyProj1。此工程包含千个源程序文件MyMainl.cpp,其中定义了用于表示日期的类Date,但类Date的定义并不完整。请按要求完成下列操作,将类Date的定义补充完成:

①定义私有数据成员year、month和day分别用于表示年、月、日,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。

②完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1,day=1,请在注释“//**2**”之后添加适当的语句。

③完成重载构造函数Date(inty,intm,intd)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值,请在注释“//**3**”之后添加适当的语句。

④完成成员函数print的类外定义,使其以“年-月-日”的格式将Date对象的值输出到屏幕上。请在注释“//**4**”之后添加适当的语句。

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

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

//MyMainl.cpp

#include<iostream>

usingnamespacestd;

classDate

{

public:

//**2**

Date(inty,intm,intd)

{

//**3**

}

voidprint()const;

private:

//datamember

//**1**

};

voidDate::print()const

{

//**4**

}

intmain()

{

Datenational_day(1949,10,1);

national_day.print();

return0;

}

49.使用VC6打开考生文件夹下的工程test31_3。此工程包含一个test31_3.cpp,其中定义了可以动态分配的字符串类,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义类tstring的私有数据成员length和p,它们分别是血型的数据和字符型的指针,其中length表示一个字符串的长度。请在注释“//**1**”之后添加适当的语句。

(2)完成类tstring的构造函数,使length等于字符串m的长度,并申请由指针p指向的length长的字符型空间,将m所指的字符串复制到该空间。请在注释“//**2**”之后添加适当的语句。

(3)完成类tstring的成员函数strcopy(tstringn)的定义,该函数将对象n的值(包括字符串长度和字符串本身)复制给调用该函数的对象(对象n的字符串长度任意)。请在注释“//**3**”之后添加适当的语句。

(4)完成类tstring的友元函数strlink(tstringm,tstringn)的定义,该函数将可动态分配的字符串类对象m和n的字符串成员连接在一起(对象m和n的字符串长度任意),并返回该串。请在注释“//**4**”之后添加适当的语句。

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

程序输出结果如下:

hellotheworld!

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

#include<iostream.h>

#include<conio.h>

#include<string.h>

clasststring

{

public:

//**1**

tstring(char*m)

{

//**2**

strcpy(p,m);

}

voidstrcopy(tstringn);

friendchar*strlink(tstringm,tstringn);

};

voidtstring::strcopy(tstringn)

{

//**3**

char*q;

q=newchar[length];

strcpy(q,tstring::p);

q=strcat(tstring::p,n.p);

tstring::p=q;

tstring::length=strlen(tstring::p);

}

char*strlink(tstringm,tstringn)

{

intlength=strlen(m.p)+strlen(n.p);

char*p;

//**4**

strcpy(p,m.p);

p=strcat(p,n.p);

returnp;

}

voidmain()

{

tstringa("hello");

tstringb("theworld");

tstringc("!");

a.strcopy(b);

cout<<strlink(a,c)<<end1;

}

参考答案

1.D解析:基类和派生类存在同名函数,符合支配规则,不存在二义性。

2.B解析:do-while语句的一般形式是

do

{

语句

}while(表达式);

特点是:“直到型”循环结构。先执行一次“语句”,判“表达式”,当“表达式”为非0,再执行“语句”,直到“表达式”的值为0时停止执行语句。在一般情况下,用while和do-while语句解决同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但当while后面的“表达式”一开始就为“假”时,两种循环的结果不同。这是因为此时while循环的循环不被执行,而do-while循环的循环体被执行一次。本题的关键是两个加数分别能被13和11整除,在i=0时,直接将316赋值给k,当k%11的值为0时,则不必执行循环,将执行j=k/11语句,输出结果,所以该表达式合理的条件是k%11。

3.B解析:常见的过程设计工具有:程序流程图、N-S图、PAD图和HIPO图。其

中,为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流

程图,通常也把这种图称为N-S图。

注意:其他常用算法描述工具的概念。

4.C解析:本题考核类的定义。C++不能类的定义中给数据成员赋初值。

5.C

6.A解析:while是先判断条件再执行语句;do-while则是先执行一次语句再判断条件,从而决定是否继续再执行循环体中的语句,这正是二者主要区别。

7.A解析:C++的I/O系统是通过一种称为流的机制来实现文件和控制台的I/O操作的。简单地说,在C++中,输入/输出操作是通过流来完成的。而文件流以磁盘文件及其他可按文件方式进行管理的外部设备为输入/输出对象。每个文件流都应当与一个打开的文件相联系;关闭一个文件就是取消这种联系。

8.A解析:firend是友元成员的关键字。

9.C解析:本题考查对函数定义的掌握程度。函数类型决定了函数返回值的,类型。函数值返回类型可以由编译器自动完成类型转换。在函数有返回值的调用中,编译器将return后面的表达式的类型强制转换为该函数定义时指定的返回值类型。

10.B解析:类模板不是一个实实在在的类,本身在编译中不会生成任何代码;用类模板定义一个对象时,不能省略实参;类模板的成员函数都是模板函敷。C++中可以为类模板的参数设置默认值,所以选项B)错误。

11.A解析:本题考查的知识点是函数的调用。C++中函数调用的一般形式为:

<函数名>(<实参表>)

其中,实参表是以逗号分割的一系列表达式。因此,本例中fun()函数的实参表是由3个表达式组成:a+b、3和max(n-1,b)。故应该选择A。

12.A解析:选项B函数返回值类型在函数定义时就确定了;选项C没有返回值用void标示;函数是完成特定功能的程序段,可以没有返回值。

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

14.A解析:此题考查的是派生类对基类成员的访问。基类的成员有公有.保护和私有3种访问属性:类的继承方式也有公有继承、保护继承和私有继承3种。无论哪种继承方式,派生类中的成员都不能访问基类中的私有成员,但可以访问基类中的公有成员和保护成员。

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

16.D解析:本题考核的是字符串常量这个知识点。字符串常量实际上是一个数组,组成数据的字符除显式给出的外,还包括字符结尾处标识字符串结束的符号'\\0'。所以字符串的字符个数等于字符个数加1,C++语言编译器会自动在字符串的末尾加上'\\0',作为字符串结束标识。故本题答案选项是:D。

17.DD【解析】根据二叉树的基本性质3:在任意一棵二叉树中,多为0的叶子结点总比度为2的结点多一个,所以本题中度为2的结点为1-1=0个,所以可以知道本题目中的二又树的每一个结点都有一个分支,所以共7个结点共7层,即度为7。

18.B解析:在C++中继承主要有三种关系:public、protected和private。这三种继承关系中public继承是最为常用的一种继承关系。

19.C解析:实体是客观存在且可以相互区别的事物。实体可以是具体的对象,如一个学生,也可以是一个抽象的事件,如一次出门旅游等。因此,实体既可以是有生命的事物,也可以是无生命的事物,但它必须是客观存在的,而且可以相互区别。

20.D解析:字符型数据在计算机内部是以ASCII码存储的,英文大写字母和小写字母在ASCII码表中都是连续的。大写字母A~Z是从65~90,小写字母a~z是从97—122。所以只要变量c大于等于a并且等于小于2就能保证其为小写字母。

21.C考点:本题主要考查知识点为引用作为函数参数透析:执行max(a,b)++后,函数返回变量b后加1,即b=11.因为函数参数采用的引用方式,使用改变的是实参变量b的值。

22.AA。【解析】本题考查虚基类的应用。虽然Derivedl和Derived2都是由共同的基类x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份副本,不论在类Derivedl中修改,还是在Derived2中修改,都是直接对这唯一副本进行操作。本题程序执行语句“Derivedobj;”时.就会先调虚基类Base的构造函数,使得X=0,然后执行类Derivedl的构造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。

23.C解析:对于任何一种赋值运算,其赋值号或复合赋值号左边必须是一个左值。左值是指具有对应的可由用户访问的存储单元,并且能够由用户改变其值的量。而在C)选项中赋值号对应的是表达式“i+1”,不是一个左值,因此是非法的赋值表达式。

24.1:12345678902:aaaaaaaaa3:**********4:

解析:本题考核运算符的使用(包括类型、优先级、结合性)。强制类型转换符()将表达式x+y的值转换为int型,那么表达式“a%3*(int)(x+y)%2/4”结果将为整型,计算:7%3*7%2/4的结果为0,而x为double型,所以最后的结果为2.5

26.线性结构线性结构解析:数据的逻辑结构,是指数据元素之间的逻辑关系,分为线性结构和非线性结构,常见的线性结构有线性表、栈和队列等;常见的非线性结构有树、二叉树等。

27.相关文档相关文档

28.哈克汪汪叫吉米喵喵叫哈克汪汪叫吉米喵喵叫

29.public

30.边值分析法边值分析法

31.存储存储解析:数据结构包括逻辑结构和物理结构(存储结构),逻辑结构包括集合、线性、树、网络等,而存储结构主要指的是逻辑结构的存储,包括顺序、链表、索引、散列等。

32.iostream.h

33.x=y.operator*(z)x=y.operator*(z)解析:此题考查的是“*”运算符的重载。运算符函数的调用有两种形式,第一种是像一般函数那样用函数名调用,即y.operator*(z);另一种是通过运算符构成表达式,即y*z。

34.外部变量外部变量

35.降低复杂性降低复杂性解析:模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程,由此分解来降低复杂性。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)应改为“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]);”。38.(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)”。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)“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;”。

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

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

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

45.(1)应改为“usingnamespacestd;”。

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

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

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

温馨提示

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

评论

0/150

提交评论