2021年内蒙古自治区乌兰察布市全国计算机等级考试C++语言程序设计预测试题(含答案)_第1页
2021年内蒙古自治区乌兰察布市全国计算机等级考试C++语言程序设计预测试题(含答案)_第2页
2021年内蒙古自治区乌兰察布市全国计算机等级考试C++语言程序设计预测试题(含答案)_第3页
2021年内蒙古自治区乌兰察布市全国计算机等级考试C++语言程序设计预测试题(含答案)_第4页
2021年内蒙古自治区乌兰察布市全国计算机等级考试C++语言程序设计预测试题(含答案)_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

2021年内蒙古自治区乌兰察布市全国计算机等级考试C++语言程序设计预测试题(含答案)学校:________班级:________姓名:________考号:________

一、1.选择题(10题)1.设有以下程序段:inta[5]={0},*p,*q;p=a;q=a;则下列选项中,合法的运算是()。

A.p+qB.p-qC.p*qD.p%q

2.关于面向对象的程序设计方法,下列说法正确的是A.“封装性”指的是将不同类型的相关数据组合在一起,作为一个整体进行处理

B.“多态性”指的是对象的状态会根据运行时要求自动变化

C.基类的私有成员在派生类的对象中不可访问,也不占内存空间

D.在面向对象的程序设计中,结构化程序设计方法仍有着重要作用

3.面向对象程序设计思想的主要特征中不包括

A.继承性B.功能分解,逐步求精C.封装性和信息隐藏D.多态性

4.下面关于数组的描述错误的是()。

A.在C++语言中数组的名字就是指向该数组第一个元素的指针

B.长度为n的数组,下标的范围是0~n-1

C.数组的大小必须在编译时确定

D.数组只能通过值参数和引用参数两种方式传递给函数

5.若以下定义:structlink{intdata;structlink*next;}a,b,C,*p,*q;且变量a和b之间已有下图所示的链表结构。

指针p指向变量a,q指向变量c,则能够把c插入到a和b之间并形成新的链表的语句组是()。

A.a.next=c;c.next=b;

B.p.next=q;q.next=p.next;

C.q->next=p->next;p->next=&c;

D.(*p).next=c;(*q).next=b;

6.流程控制语句的基本控制结构有三种,不属于这一种结构的是()。

A.顺序结构B.选择结构C.循环结构D.计算结构

7.设栈S的初始状态为空。元素a,b,c,d,e,f依次通过栈S,若出栈的顺序为b,d,c,f,e,a,则栈S的容量至少应该为

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

8.下列叙述中,正确的是

A.用E-R图能够表示实体集间一对一的联系、一对多的联系和多对多的联系

B.用E-R图只能表示实体集之间一对一的联系

C.用E—R图只能表示实体集之间一对多的联系

D.用E—R图表示的概念数据模型只能转换为关系数据模型

9.有如下程序:#include<iostream>usingnamespaeestd;classA{public:A(inti):rl(i){}voidprint(){cout<<'E'<<rl<<'-';}voidprint()const}cout<<'C'<<rl*rl<<'-';}private:intrl;};intmain(){Aal(2);eonstAa2(4);a1.print();a2.print();return0;}程序的输出结果是

A.运行时出错B.E2-C16-C.C4-C16-D.E2-E4-

10.关系数据库管理系统能实现的专门关系运算包括()。

A.排序、索引、统计B.选择、投影、连接C.关联、更新、排序D.显示、打印、制表

二、单选题(13题)11.

12.下列有关类继承的叙述中,错误的是()。

A.继承可以实现软件复用

B.虚基类可以解决由多继承产生的二义性问题

C.派生类构造函数要负责调用基类的构造函数

D.派生类没有继承基类的私有成员

13.以下程序的正确运行结果是()。#include<iostream.h>intfun(int);voidmain(){inta=2,i;for(i=0;i<3;i++)cout<<fun(a)<<end1;cout<<end1;}intfun(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}

A.4,5,6B.6,7,9C.7,8,9D.7,7,7

14.下列字符数组的初始化,正确的是()。A.charch[5]={"a","b","c","d","e"};

B.charch[]={"a","b"};

C.charch[15]={"welcometochina"};

D.charch[14]={"Iamastudent"};

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

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

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

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

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

16.下列关于模板的描述中,错误的是()。

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

B.函数模板是一种参数化类型的函数

C.满足一定条件时可以省略模板实参

D.模板形参只能由关键字typename声明

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

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

18.有如下程序:#included<iostream>usingnamespacestd;classTestClass{inta;pubIic:TestClass(intx){a=x;}voidshow(){cout<<a;)};classTestClassl:publicTestClass{intb;public:TestClassl(inti):TestClass(i+1),b(i){}voidshow(){cout<<b;)};intmain(){TestClassb(5),*P;TestClassld(1):p=&d;p->show();return0;}该程序运行后的打印结果是()。A.5B.1C.0D.2

19.在进行了任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态,其中只能用于检测刚进行的操作是否失败函数名是()。

A.failB.eofC.badD.good

20.下列关于对象初始化的叙述中,正确的是A.定义对象的时候不能对对象进行初始化

B.定义对象之后可以显式地调用构造函数进行初始化

C.定义对象时将自动调用构造函数进行初始化

D.在一个类中必须显式地定义构造函数实现初始化

21.在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是()

A.派生类的对象可以赋给基类的对象

B.派生类的对象可以初始化基类的引用

C.派生类的对象可以直接访问基类中的成员

D.派生类的对象的地址可以赋给指向基类的指针

22.在C++语言中,打开一个文件就是将这个文件与一个()建立关联。

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

23.有如下程序:#include<iostream>usingnamespacestd;classBase{public:voidfunl{cout<<”Base\n”;}virtualvoidfun2{eout<<”Base\n”;}};classDerived:publicBase{public:voidfunl{eout<<”Derived、n”;}voidfura{eout<.<”Derived\n”;}};voidf(Base&B.}b.funl;b.ftm2;}intmain{Derivedobj;f(obj);return0;}执行这个程序的输出结果是()。A.BaseBaseB.BaseDerivedC.DerivedBaseD.DerivedDerived

三、2.填空题(12题)24.下面程序的功能是将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变,请填空。

#include<iostream.h>

#include<string.h>

voidmain()

{chara[]="clanguage",t;

inti,j,k;

k=strlen(a);

for(i=0;i<=k-2;i+=2)

for(j=i+2;j<=k;【】=

if(【】)

{t=a[i];a[i]=a[j];a[j]=t;}

cout<<a;

cout<<end1;=

25.设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的顺序是e2、e4、e3、e6、e5、e1,则栈S的容量至少应是【】。

26.表达式x=operator-(y,z)可以表示为【】。

27.C++语言的参数传递机制包括传值和传地址两种,如果调用函数时,需要改变实参或者返回多个值,应该采取【】方式。

28.指针数组是由______构成的数组。

29.数据流图中父图和子图的平衡是指【】。

30.在结构化分析中,用于描述加工逻辑的主要工具有三种,即:结构化语言、判定表、【】。

31.【】是C++语言程序的入口。

32.诊断和改正程序中错误的工作通常称为______。

33.在编译时才确定的函数调用称为【】,它是通过使用【】来实现的。

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

35.虚函数必须是类的【】。

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

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

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;

}

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

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

}

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

}

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

六、3.综合应用题(2题)48.使用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);

}

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

(1)补充类Employee的构造函数,请使用字符串函数将数据成员name,address,city,province和zipcode分别初始化为参数*nm,*addr,*city,*prov和*zip的值。请在注释“//**1**”之后添加适当的语句;

(2)完成类Employee的成员函数ChangeName(char*newName)的定义,将newName指向的内容赋值给数据成员name,请在注释“//**2**”之后添加适当的语句;

(3)完成类Employee的成员函数Display()的定义,先使用指针buffer动态申请一个char型的200单位大小的空间,然后使用字符串函数将数据成员name和address依次复制其中,最后返回该指针buffer,将请在注释“//**3**”之后添加适当的语句。输出结果如下:

王东建国路大街105号

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

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

#include<iostream.h>

#include<string.h>

classEmployee{

protected:

charname[20];

charaddress[100];

charcity[20];

charprovince[20];

charzipcode[10];

public:

Employee(char*nm,char*addr,char*city,char*prov,char*zip);

voidChangeName(char*newName);

char*Display();

};

Employee::Employee(char*nm,char*adr,char*cit,char*prov,char*zip)

{

//**1**

strcpy(city,cit);

strcpy(province,prov);

strcpy(zipcode,zip);

}

voidEmployee::ChangeName(char*newName)

{

//**2**

}

char*Employee::Display()

{

//**3**

strcat(buffer,address);

returnbuffer;

}

voidmain()

{

Employeeemp("李华","建国路大街105号","石家庄","河北","103400");

emp.ChangeName("王东");

cout<<emp.Display()<<end1;

}

参考答案

1.B解析:本题考核指针的运算。C++语言中,指向同一字符串的指针之间可以,也只能进行减运算,减运算后返回的是一整型数,表示指针之间的地址偏移量。

2.D解析:本题考核C++程序的基本框架。“封装性”指将数据和算法捆绑成一个整体,而不是将不同类型的相关数据组合在一起。C++中的多态性是指一个面向对象的系统常常要求一组具有相同基本语义的方法能在同一接口下为不同的对象服务。基类的私有成员在派生类的对象中不可访问,但是也占据内存空间。C++同时支持结构化和面向对象两种程序设计的基本框架,所以在面向对象的程序设计中,结构化程序设计方法仍有着重要作用。

3.B解析:C++是一种面向对象的程序设计语言.,它充分支持面向对象思想中的3个主要特征:封装性、继承性、多态性。B选项所描述是结构化程序设计的思想。

4.D解析:本题考查的是数组的基本使用,数组还可以通过对应的指针调用传递参数,其余选项的说法都是正确的。

5.C解析:本题考核结构型指针的应用。当指针所指向的变量的类型为结构类型时,这个指针就是结构指针。题中定义了p和q为结构指针。当访问由指针所指向的结构的元素时,用箭头“->”运算符实现这个操作。分析各选项:

选项A中,语句“a.next=c;c.next=b;”的赋值有问题,因为结构成员next为结构型指针,而变量c和b只是结构变量,不是地址值,所以达不到题目要求。

选项B中,执行语句“p.next=q;q.next=p.next;”后,只是把a点和c点双向连接起来了,并不能把c插入到a和b之间,形成新的链表。

选项C中,先让c的后趋节点指向a的后趋节点b,再使a的后趋节点指向c。

这样就完成了把c插入到a和b并形成新的链表的功能。所以选项C中的语句可完成题目所属功能。

选项D中,(*p).next与(*q).next都是指针型变量,而赋值语句的右值c和b只是结构型变量,所以此语句不能达到题目要求的目的。

6.D

7.A解析:根据题中给定的条件,可以作如下的模拟操作:①元素a,b进栈,栈中有2个元素,分别为a,b;②元素b出栈后,元素c,d进栈,栈中有3个元素,分别为a,c,d;③元素d,c出栈后,元素e,f进栈,栈中有3个元素,分别为a,e,f;④最后,元素f,e,a出栈,栈为空。可以看出,进栈的顺序为a,b,c,d,e,f,出栈的顺序为b,d,c,f,e,a,满足题目要求。每次进栈操作后,栈中最多有3个元素,所以,为了顺利完成这些操作,栈的容量应至少为3。本题的正确答案为A。

8.A解析:两个实体之间的联系实际上是实体集间的函数关系,这种函数关系可以有下面几种,即一对一的联系、一对多(或多对一)的联系和多对多的联系;概念模型便于向各种模型转换。由于概念模型不依赖于具体的数据库管理系统,因此,容易向关系模型、网状模型和层次模型等各种模型转换。

9.B解析:在类中重载函数的情况下,常对象调用类的常成员函数,非常对象调用类的非常成员函数,故答案为B。

10.B解析:此题为数据库的基本概念,可以对照办工软件的电子表格进行如下理解:选择:我们根据某条件选择出一行或多行元组(一个元组即为二维表中的一行)。投影:按字段(也称属性,比如学生关系(学号,姓名,出生年月,性别),学号、姓名…都是属性)选取一列或多列(一个二维表中所有元组在某一列或几列上截取出来)。连接:2个或2个以上的表连接组成一张新的表,通常有条件连接。比如学生关系(学号,姓名,系号),又有一张系表(系号,系名,主任),2张表可以合并为一张这样的表(学号,姓名,系号,系名,主任)。

11.B

12.D解析:派生方式分为两种:private派生或public派生,分别被称为私有派生和公有派生,使用\u3000public派生,基类的所有成员在派生类中的访问权限不变。

13.C

14.B解析:选项A中一个数组元素存放一个字符,不能存放字符串;当把字符串整体赋给字符串时,字符数组的长度要比字符串长度大1,用来存放终结符,所以选项C和选项D都不正确。

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

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

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

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

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

16.DD。【解析】template<typename(或class)数据类型参数标识符>。

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

18.DD。【解析】TestClass为TestClass1的基类,在主函数main中定义TestClass对象b,*P。TestClass1对象d,P指向d,调用其show函数。“TestClass(inti):TestClass(i+1),b(i){}”语句中的TestClass基类参数为2,所以show输出2。

19.A解析:C++中可以用文件流对象的下列成员函数来判别文件流的当前状态。

①函数isopen():判定流对象是否与一个打开的文件相联系,若是,返回true,否则返回false。

②函数good():刚进行的操作成功时返回true,否则返回false。

③函数fail():与good()相反,刚进行的操作失败时返回true,否则返回false。

④函数bad():如果进行了非法操作返回true,否则返回false。

⑤函数eof():进行输入操作时,若到达文件尾返回true,否则返回false。

其中,eof函数只能用于输入流操作。

20.C解析:构造函数的作用是在对象被创建的时候对对象进行初始化。构造函数在对象被创建的时候由系统自动调用。故C项正确。

21.C解析:友元函数的定义既可以在类内部进行,也可以在类外部进行。它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非成员函数可以访问类的私有成员。

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

23.B在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数,本题中定义r一个派生类对象0bi,执行f函数后,将派生类对象0bj转化为基类对象,由于fun1不是虚函数,所以输出基类的fun1;而fun2是虚函数,所以输出派生类的fun2,所以本题答案为8。

24.j+=2]a[i]>=a[j]或a[i]>a[j]j+=2\r\n]a[i]>=a[j]或a[i]>a[j]解析:strlen函数是测试字符串长度的函数,函数的值为字符串中的实际长度,不包括'\\0'在内。

25.大于3大于3解析:栈的操作原则“后进先出”,队列的操作原则“先进后出”。出队列顺序即为入队列顺序,而入队列顺序也就是出栈顺序是:e2、e4、e3、e6、e5、e1。为得到出栈顺序为e2、e4、e3、e6、e5、e1。则入栈操作应为e1、e2进栈,e2出栈。(进栈后有e1、e2,出栈后仅有e1)e3、e4进栈,e4、e3出栈。(进栈后有e1、e3、e4,出栈后仅有e1)e5、e6进栈,e5、e6、e1出栈。(进栈后有el、e5、e6,出栈后为空)。

26.x=y-2

27.传地址传地址解析:本题考查的是传值调用和传址调用的区别——传值调用只是进行值的简单复制,返回之后不会改变原来的值;而传址调用是把参数的地址传入,会改变原来的值。

28.指针变量指针变量

29.子图的输入、输出数据流同父图中的输入输出完全一致子图的输入、输出数据流同父图中的输入输出完全一致解析:数据流图中父图和子图应平衡,即子图的输入、输出数据流同父图中的输入输出完全一致。

30.判定树判定树

31.main()函数main()函数解析:main()是C++语言的入口函数。注意:main()函数可以放在程序的任何位置

32.程序调试程序调试

33.静态联编、重载函数静态联编、重载函数解析:静态联编的定义:在编译时才确定的函数调用称为静态联编,它是通过使用重载函数来实现的。

34.纯虚函数基类纯虚函数基类

35.成员函数成员函数解析:C++中,只有类的成员函数才能说明为虚函数。这是因为,虚函数仅适用于有继承关系的类对象,所以普通函数不能说明为虚函数。

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

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

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

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

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

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

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

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

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

45.(1)应改为“usingna

温馨提示

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

最新文档

评论

0/150

提交评论