C++模拟题二十.docx
《C++模拟题二十.docx》由会员分享,可在线阅读,更多相关《C++模拟题二十.docx(15页珍藏版)》请在冰豆网上搜索。
C++模拟题二十
2011年全国计算机等级考试二级C++模拟试题(20)
笔试部分
一、选择题
1.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树后序遍历为()
A.GEDHFBCAB.DGEBHFCA
C.ABCDEFGHD.ACBFEDHG
【参考答案】B
2.如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是()
A.e3,e1,e4,e2B.e2,e4,e3,e1C.e3,e4,e1,e2D.任意顺序
【参考答案】B
3.程序设计语言的基本成分是数据成分、运算成分、控制成分和()
A.对象成分B.变量成分C.语句成分D.传输成分
【参考答案】D
4.下列不属于软件工程的3个要素的是()
A.工具B.过程C.方法D.环境
【参考答案】D
5.将E-R图转换到关系模式时,实体与联系都可以表示成()
A.属性B.关系C.键D.域
【参考答案】B
6.在深度为5的满二叉树中,叶子结点的个数为()
A.32B.31C.16D.15
【参考答案】B
7.一些重要的程序语言(如C语言和Pascal语言)允许过程的递归调用。
而实现递归调用中的存储分配通常用()
A.栈B.堆C.数组D.链表
【参考答案】A
8.开发软件时对提高开发人员工作效率至关重要的是()
A.操作系统的资源管理功能B.先进的软件开发工具和环境
C.程序人员的数量D.计算机的并行处理能力
【参考答案】B
9.数据处理的最小单位是()
A.数据B.数据元素C.数据项D.数据结构
【参考答案】C
10.下述关于数据库系统的叙述中正确的是()
A.数据库系统减少了数据冗余
B.数据库系统避免了一切冗余
C.数据库系统中数据的一致性是指数据类型一致
D.数据库系统比文件系统能管理更多的数据
【参考答案】B
11.以下各选项组中,均是C++语言关键字的组是()
A.publicoperatorthis
B.shodstringstatic
C.itwhile>=
D.privatecoutprintf
【参考答案】A
12.下列描述正确的是()
A.表示m>n为true或mn&&m B.switch语句结构中必须有default语句
C.if语句结构中必须有else语句
D.如果至少有一个操作数为true,则包含“||”运算符的表达式为true
【参考答案】D
13.下面关于break语句的描述中,不正确的是()
A.break可以用于循环体内
B.break语句可以在for循环语句中出现多次
C.break语句可以在switch语句中出现多次
D.break语句可用于if条件判断语句内
【参考答案】D
14.下面程序错误的是()
①#include
②voidmain()
③{
④int*p=newint[1];
⑤p=9;
⑥cout<<*p< ⑦delete[]p;
⑧}
A.④B.⑤C.⑥D.⑦
【参考答案】B
15.不能作为重载函数的调用的依据是()
A.参数个数B.参数类型C.函数类型D.函数名称
【参考答案】D
16.在C++语言中,数据封装要解决的问题是()
A.数据的规范化B.便于数据转换
C.避免数据丢失D.防止不同模块之间数据的非法访问
【参考答案】D
17.对类的构造和析构函数描述正确的是()
A.构造函数可以重载,析构函数不能重载
B.构造函数不能重载,析构函数可以重载
C.构造函数可以重载,析构函数也可以重载
D.构造函数不能重载,析构函数也不能重载
【参考答案】A
18.下列对静态数据成员的描述,正确的是()
A.静态数据成员是类的所有对象共享的数据
B.类的每个对象都有自己的静态数据成员
C.类的不同对象有不同的静态数据成员值
D.静态数据成员不能通过类的对象调用
【参考答案】A
19.可以用p.a的形式访问派生类对象p的基类成员a,其中a是()
A.私有继承的公有成员B.公有继承的私有成员
C.公有继承的保护成员D.公有继承的公有成员
【参考答案】D
20.下面关于虚函数的描述,错误的是()
A.在成员函数声明的前面加上virtual修饰,就可把该函数声明为虚函数
B.基类中说明了虚函数后,派生类中对应的函数也必须说明为虚函数
C.虚函数可以是另一个类的友元函数,但不能是静态成员函数
D.基类中说明的纯虚函数在其任何派生类中都必须实现
【参考答案】B
21.语句ofstreamf(″SALARY.DAT″,ios:
:
app|ios:
:
binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且()
A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件
B.若文件存在,将其置为空文件;若文件不存在,找开失败
C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件
D.若文件存在,找开失败;若文件不存在,建立一个新文件
【参考答案】A
22.下面程序的运行结果是()
#include
voidfun(int*a,int*b)
{intx=*a;
*a=*b;*b=x;
cout<<*a<<*b<<″″;}
voidmain()
{intx=1,y=2;
fun(&x,&y);
cout<
A.1212B.1221C.2112D.2121
【参考答案】D
23.以下哪个特征不是面向对象思想中的主要特征?
()
A.多态B.继承C.封装D.垃圾回收
【参考答案】D
24.C++中运算符优先级由高到低排列正确的是()
A.:
:
+++||B.<*||,C.sizeof%+:
:
D.,&&newsizeof
【参考答案】A
25.以下for语句中不是死循环的是()
A.for(inti=0;i<1;++i); B.for(inti=0;;++i);
C.for(inti=1;i>0;++i); D.for(;;);
【参考答案】A
26.以下定义数组中错误的是()
A.inta[10];B.inta[2][20];C.inta[20][];D.inta[];
【参考答案】C
27.下面程序错误的语句是()
#include″iostrteam.h″
①voidmain()
②{
③intA=0;
④int&B;
⑤B=A;
⑥cout< ⑦cout< ⑧}
A.②B.③C.④D.⑥
【参考答案】C
28.函数inttest(inta,intb=1,intc=0),下列调用不合法的个数是()
test(0);test(0,0);test();test(0,0,0);
A.0B.1C.2D.3
【参考答案】C
29.C++语言中关于构造函数的说法正确的是()
A.构造函数的函数名不必和类名相同B.构造函数只能每一个
C.每个类必定有构造函数D.构造函数必有返回值
【参考答案】C
30.下面程序的执行结果为()
#include″iostream″
usingnamespacestd;
classA
{inta;
public:
voidSeta(intx){a=x;}
voidDisplay_a(){cout<
classB
{intb;
public:
voidSetb(intx){b=x;}
voidDispaly_b(){cout<
classC:
publicA,privateB
{private:
intc;
public:
voidSetc(intx,inty,intz)
{c=z;Seta(x);Setb(y);}
voidDisplay_c(){cout<
30.下面程序的执行结果为()
#include″iostream″
usingnamespacestd;
classA
{inta;
public:
voidSeta(intx){a=x;}
voidDisplay_a(){cout<
classB
{intb;
public:
voidSetb(intx){b=x;}
voidDispaly_b(){cout<
classC:
publicA,privateB
{private:
intc;
public:
voidSetc(intx,inty,intz)
{c=z;Seta(x);Setb(y);}
voidDisplay_c(){cout<
30.下面程序的执行结果为()
#include″iostream″
usingnamespacestd;
classA
{inta;
public:
voidSeta(intx){a=x;}
voidDisplay_a(){cout<
classB
{intb;
public:
voidSetb(intx){b=x;}
voidDispaly_b(){cout<
classC:
publicA,privateB
{private:
intc;
public:
voidSetc(intx,inty,intz)
{c=z;Seta(x);Setb(y);}
voidDisplay_c(){cout<
32.只能作为成员函数重载的是()
A.=B.++C.*D.new
【参考答案】A
33.语句cout<(2)<<>
A.1024.4567 B.1024
C.1024.45 D.1e+003
【参考答案】D
34.下列程序的结果是()
#include″iostream.h″
voidmain()
{char*str;
str=″test!
″;
cout<<>
A.程序错误B.!
C.′\0′D.为空字符
【参考答案】D
35.C++函数中不能由系统自动生成的是()
A.析构函数 B.构造函数
C.内联函数 D.拷贝构造函数
【参考答案】C
二、填空题
1.数据结构分为逻辑结构与存储结构,线性链表属于【1】。
【参考答案】
【1】存储结构
2.耦合和内聚是评价模块独立性的两个主要标准,其中【2】反映了模块内各成分之间的联系。
【参考答案】
【2】内聚
3.数据库设计分为以下6个设计阶段:
需求分析阶段、【3】、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。
【参考答案】
【3】数据库概念设计阶段
4.面向对象模型最基本概念是对象和【4】。
【参考答案】
【4】类
5.数据模型按不同应用层次分成3种类型,它们是概念数据模型、【5】和物理数据模型。
【参考答案】
【5】逻辑数据模型
6.开发一个C++语言程序的步骤通常包括编辑、【6】、链接、运行和调试。
【参考答案】
【6】编译
7.下面程序的输出结果为【7】。
#include
voidmain()
{intnum=0,i=8;
do{
i--;
num++;
}while(--i);
cout<
【参考答案】
【7】-4
8.下面程序的运行结果为【8】。
#include
voidfun(intx=0,inty=0)
{cout<
voidmain()
{fun(5);}
【参考答案】
【8】50
9.C++语言支持的两种多态性分别是编译时的多态性和【9】的多态性。
【参考答案】
【9】运行时
10.cout.put(′A′);,还可以表示为【10】。
【参考答案】
【10】cout<<′A′;
11.将以下程序写成三目运算表达式是【11】。
if(a>b)max=a;
elsemax=b;
【参考答案】
【11】max=(a>b)?
a:
b;
12.下面程序的功能是将字符数组a中下标值为偶数的元素从小到大排列,其他元素不变,请填空。
#include
#include
voidmain()
{chara[]=″clanguage″,t;
inti,j,k;
k=strlen(a);
for(i=0;i<=k-2;i+=2)
for(j=i+2;j<=k;【12】)
if(【13】)
{t=a[i];a[i]=a[j];a[j]=t;}
cout< cout< 【参考答案】
【12】j+=2
【13】a[i]>=a[j]或a[i]>a[j]
13.请定义一个函数名为A,返回值为int,没有参数的纯虚函数的定义是【14】。
【参考答案】
【14】virtualintA()=0;
14.假设fin是一个文件流对象,则关闭文件的语句是【15】。
【参考答案】
【15】fin
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt20_1,此工程包含一个源程序文件kt20_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为:
Thefirstresultis5
Thesecondresultis2
Thethirdresultis2
Thefourthresultis6
源程序文件kt20_1.cpp清单如下:
#include
intsubtraction(inta,intb)
{intr;
r=a-b;
/*****************found*****************/
return&r;}
intmain()
{intx=5,y=3,z;
z=subtraction(7,2);
cout<<"Thefirstresultis"< cout<<"Thesecondresultis"< /*****************found*****************/
cout<<"Thethirdresultis"< /*****************found*****************/
z=4+*subtraction(x,y);
cout<<"Thefourthresultis"< return0;}
【参考答案】
(1)将return&r;改为:
returnr;
(2)将cout<<"Thethirdresultis"< 改为:
cout<<"Thethirdresultis"< (3)将z=4+*subtraction(x,y);
改为:
z=4+subtraction(x,y);
【试题解析】
(1)主要考查对于函数的返回值类型的理解,题目中函数的定义是int型的,所以应该返回一个该类型的参数,这里的错误就在于它返回了一个int型参数的地址,如果把函数返回值定义成int型的指针,那么这种返回方式就正确了;
(2)主要考查对已经定义好参数类型和个数的函数,题目中的函数subtraction()已经定义好了,是两个int型的参数,但是这里错误的调用了两个参数的地址,使得本来是传值调用变成了传址调用,所以会报错,传值调用是把参数的数值复制后传入函数中,不改变原函数中参数的值,而传址调用是把参数在内存中的地址传进函数中,函数对参数的任何作用都会改变原函数中参数的值;
(3)主要考查对函数调用的掌握,函数subtraction()是一个普通函数,调用的时候直接写函数名和适当的参数就可以了。
二、简单应用题
请编写一个函数printdate(intyear,intmonth,intday),该函数实现将输入的3个数字转换成英语数字纪年输出的功能,如输入March9,1978,则输出197839。
注意:
使用switch结构实现该函数的基本功能并应该能够判断错误的输入。
部分源程序已存在文件kt20_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数printdate的花括号中填写若干语句。
源程序文件kt20_2.cpp清单如下:
#include
voidprintdate(intyear,intmonth,intday)
{
}
voidmain()
{printdate(1978,3,9);}
【参考答案】
voidprintdate(intyear,intmonth,intday)
{if(year<0||month<1||month>12||day<1||day>31)
{cout<<"ERROR";
return;}
switch(month)
{case1:
cout<<"January";break;
case2:
cout<<"February";break;
case3:
cout<<"March";break;
case4:
cout<<"April";break;
case5:
cout<<"May";break;
case6:
cout<<"June";break;
case7:
cout<<"July";break;
case8:
cout<<"Auguest";break;
case9:
cout<<"September";break;
case10:
cout<<"October";break;
case11:
cout<<"November";break;
case12:
cout<<"December";break;}
cout<<""<
【试题解析】
本题考查对switch结构的应用。
switch分支结构也是常用的选择结构,对于每个case结构,只有遇到break才会中止并且跳出switch结构,否则会一直执行到下一个break或者switch的结尾,而对于参数的预处理应该是程序健壮性的基本要求。
三、综合应用题
使用VC6打开考生文件夹下的工程kt20_3。
此工程包含一个kt20_3.cpp,其中定义了类CVector,,但该类的定义并不完整。
请按要求完成下列操作,将程序补充完整。
(1)完成类CVector构造函数的定义,把传入的int型参数a和b分别赋值给类的成员变量x和y。
请在注释“//**1**”之后添加适当的语句。
(2)完成类CVector的"+"运算符重载函数的定义,使Cvector类的两个对象相加时可以直接使用符号"+",并且结果仍然为类Cvector的对象,请在注释“//**2**”之后添加适当的语句。
(3)在主函数中添加适当的语句,把类Cvector的对象a和b相加,并且把结果保存在对象c中,最后以"x,y"的形式输出在屏幕上,请在注释“//**3**”之后添加适当的语句。
源程序文件kt20_3.cpp清单如下:
#include
classCVector
{public:
intx,y;
CVector(){};
CVector(int,int);
CVectoroperator+(CVector);};
CVector:
:
CVector(inta,intb)
{//**1**}
CVectorCVector:
:
operator+(CVectorparam)
{//**2**
temp.y=y+param.y;
return(temp);}
intmain()
{CVectora(3,1);
CVectorb(1,2);
CVectorc;
//**3**
return0;}
【参考答案】
(1)x=a;
y=b;
(2)CVectortemp;
temp.x=x+param.x;
(3)c=a+b;
cout< 【试题解析】
主要考查对类的数据成员赋值与定义重载为成员函数的运算符函数的掌握,其中
(2)就是运算符函数的实现,实际上就是通过已有的函数和符号实现复杂的运算功能,并最终返回该类的对象,注意最后的返回值必须是对象才能满足要求,(4)中使用对象调用类的数据成员用符号“.”。