全国计算机等级考试二级C++模拟试题20套.docx
《全国计算机等级考试二级C++模拟试题20套.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C++模拟试题20套.docx(74页珍藏版)》请在冰豆网上搜索。
全国计算机等级考试二级C++模拟试题20套
2010年全国计算机等级考试二级C++模拟试题
(1)
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt1_1,此工程包含一个源程序文件kt1_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果为:
Whichact(aorb)?
b
act1
act2
Bact3
Bact4
Bend
源程序文件kt1_1.cpp清单如下:
#include
classA
{public:
virtualvoidact1(){cout<<"act1\n";act2();}
voidact2(){cout<<"act2\n";act3();}
voidact3(){cout<<"Aact3\n";act4();}
virtualvoidact4{cout<<"Aact4\n";act5();}
voidact5(){cout<<"Aend\n";}
};
classB:
publicA
{
voidact3(){cout<<"Bact3\n";act4();}
voidact4(){cout<<"Bact4\n";act5();}
voidact5(){cout<<"Bend\n";}
};
voidmain(void)
{
charc;
A*a;
cout<<"Whichact(aorb)?
";
cin< if(c=='a')
a=newA;
else
a=newB;
a->act1();
deletea;
【参考答案】
(1)将voidact3(){cout<<"Aact3\n";act4();}
改为:
virtualvoidact3(){cout<<"Aact3\n";act4();}
(2)将virtualvoidact4{cout<<"Aact4\n";act5();}
改为:
virtualvoidact4(){cout<<"Aact4\n";act5();}
(3)将cin< 改为:
cin>>c;
【试题解析】
(1)主要考查对虚函数使用规则的理解,要实现对函数act3的动态联编应该使用虚函数,这样在本题中对于函数的调用才能实现根据不同对象调用不同函数;
(2)主要考查对函数定义的掌握,虽然参数表为空,但括号是不能省略的;
(3)主要考查是否会使用流输入操作,本题中使用的是流输出符。
二、简单应用题
请编写一个函数voidfun(charss[]),该函数将字符串ss翻转,如ss为“123abc”则翻转后为“cba321”。
注意:
用数组方式及for循环来实现该函数。
注意:
部分源程序已存在文件kt1_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填写若干语句。
文件kt1_2.cpp的内容如下:
#include
#include
voidfun(charss[]);
voidmain()
{chars[80];
cout<<"请输入字符串:
";
cin>>s;
fun(s);
cout<<"逆序后的字符串:
"< voidfun(charss[])
{
}
【参考答案】
voidfun(charss[])
{
intn=strlen(ss);
for(inti=0;i<(n/2);i++)
{charc=ss[i];
ss[i]=ss[n-1-i];
ss[n-1-i]=c;}
}
【试题解析】
本题考查的是利用数组及for循环、if条件判断等基本控制语句解决实际问题的能力,基本算法是根据字符串的对称性把对应的两个字符串互相换位。
三、综合应用题
使用VC6打开考生文件夹下的工程test1_3,此工程包含一个源程序文件kt1_3.cpp,其中定义了类Cat,但类Cat的定义并不完整。
请按要求完成下列操作,将类Cat的定义补充完整。
(1)定义类Cat的保护数据成员itsAge用于表示年龄,它是int型的数据。
请在注释“//**1**”之后添加适当的语句。
(2)完成成员函数GetAge()的类外定义,返回成员的itsAge值,请在注释“//**2**”之后添加适当的语句。
(3)完成成员函数SetAge(intage)的类外定义,把数据成员itsAge赋值为参数age的值,请在注释“//**3**”之后添加适当的语句。
(4)完成成员函数Meow的类外定义,使其输出字符串“meow.”到屏幕上。
请在注释“//**4**”之后添加适当的语句。
输出结果如下:
meow.
kittyisacatwhois5yearsold.
meow.
注意:
除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序如下:
#include
classCat
{
public:
intGetAge();
voidSetAge(intage);
voidMeow();
protected:
//**1**
};
intCat:
:
GetAge()
{
//**2**
}
voidCat:
:
SetAge(intage)
{
//**3**
}
voidCat:
:
Meow()
{
//**4**
}
voidmain()
{
Catkitty;
kitty.Meow();
kitty.SetAge(5);
cout<<"kittyisacatwhois";
cout< cout<<"yearsold.\n";
kitty.Meow();
}
【参考答案】
(1)intitsAge;
(2)returnitsAge;
(3)itsAge=age;
(4)cout<<"meow.\n";
【试题解析】
本题主要考查类的定义和成员函数的定义的深刻理解。
2010年全国计算机等级考试二级C++模拟试题
(2)
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt2_1,此工程包含一个源程序文件kt2_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
Vehiclemessage
Carmessage
Vehiclemessage
源程序文件kt2_1.cpp清单如下:
#include
classvehicle
{
intwheels;
floatweight;
public:
voidmessage(void){cout<<"Vehiclemessage\n";}
};
classcar:
publicvehicle
{
intpassenger_load;
public:
voidmessage(void){cout>>"Carmessage\n";}
};
classtruck:
publicvehicle
{
intpassenger_load;
floatpayload;
public:
intpassengers(void){returnpassenger_load;}
};
voidmain()
{
vehicle*unicycle;
unicycle=newvehicle;
unicycle.message();
deleteunicycle;
unicycle=newcar;
unicycle->message();
deleteunicycle;
unicycle=newtruck;
unicycle->message();
deleteunicycle;
}
【参考答案】
(1)将voidmessage(void){cout<<"Vehiclemessage\n";}
改为:
virtualvoidmessage(void){cout<<"Vehiclemessage\n";}
(2)将voidmessage(void){cout>>"Carmessage\n";}
改为:
voidmessage(void){cout<<"Carmessage\n";}
(3)将unicycle.message();
改为:
unicycle->message();
【试题解析】
(1)主要考查对虚函数使用规则的掌握,要实现对函数message的动态联编应该使用虚函数,否则产生的是静态联编,调用的函数输出结果就与要求不符;
(2)主要考查对流输出操作的掌握,该处错误的使用了流输入操作;
(3)主要考查对象和对象指针的概念,对象指针使用"->"调用成员函数,而对象使用"."调用成员函数.
二、简单应用题
编写类AA的成员函数intCompare(AAb),该函数用于比较*this与b的大小,若两者含有元素的个数n相同,并且数组中前n个元素值对应相同,则认为两者相等返回1,否则返回0。
注意:
用数组方式及for循环来实现该函数。
输出结果如下:
a=b
a<>c
注意:
部分源程序已存在文件kt2_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数Compare的花括号中填写若干语句。
文件kt2_2.cpp的内容如下:
#include
#include
classAA{
int*a;
intn;
intMS;
public:
voidInitAA(intaa[],intnn,intms)
{
if(nn>ms)
{\cout<<"Error!
"< exit
(1);}
MS=ms;
n=nn;
a=newint[MS];
for(inti=0;i
}
intCompare(AAb);
};
intAA:
:
Compare(AAb)
{
}
voidmain()
{AAa,b,c;
intx[]={1,2,3,4,5};
inty[]={1,2,3,6,7};
intz[]={1,2,5,7,9};
a.InitAA(x,3,5);
b.InitAA(y,3,5);
c.InitAA(z,3,5);
if(a.Compare(b))
cout<<"a=b"< else
cout<<"a<>b"< if(a.Compare(c))
cout<<"a=c"< else
cout<<"a<>c"< 【参考答案】
intAA:
:
Compare(AAb)
{if(n!
=b.n)return0;
for(inti=0;i<>
if(a[i]!
=b.a[i])return0;
return1;}
【试题解析】
本题考查应用for循环、if条件控制语句等基本控制结构解决实际问题的能力。
3.综合应用题
使用VC6打开考生文件夹下的工程test17_3,此工程包含一个源程序文件kt2_3.cpp,其中定义了用于表示点的类Point和表示内容的类Text以及二者的派生类CircleWithText,但它们的定义并不完整。
请按要求完成下列操作,将它们的定义补充完整。
(1)定义类Point的构造函数,请使用参数列表的形式将成员函数x和y分别初始化为参数x1和y1的值。
请在注释“//**1**”之后添加适当的语句。
(2)完成类Text的构造函数Text(char*str)的定义,将char型的str指向的内容赋值给text并且输出str所指向的内容,请在注释“//**2**”之后添加适当的语句。
(3)定义类CircleWithText的构造函数CircleWithText(intcx,intcy,char*msg),int型的cx和cy用于赋值给x和y,char型的指针*msg用于赋值给text,请在注释“//**3**”之后添加适当的语句。
输出结果如下:
Point:
34
hello
注意:
除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序如下:
#include
#include
classPoint
{intx,y;
public:
//**1**
{cout<<"Point:
"< ~Point(){}};
classText
{chartext[100];
public:
Text(char*str)
{//**2**}
~Text(){}};
classCircleWithText:
publicPoint,publicText
{public:
//**3**
{}
~CircleWithText(){}};
voidmain()
{CircleWithTextcm(3,4,"hello");}
【参考答案】
(1)Point(intx1=0,inty1=0):
x(x1),y(y1)
(2)strcpy(text,str);
cout< (3)CircleWithText(intcx,intcy,char*msg):
Point(cx,cy),Text(msg)
【试题解析】
本题主要考查考生对于多继承中类的定义和派生类构造函数的定义的掌握。
注意学会使用参数列表的形式定义派生类的构造函数,在列表中的格式是基类名1(向基类传递的参数列表),基类名2(向基类传递的参数列表)。
2010年全国计算机等级考试二级C++模拟试题(4)
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt4_1,此工程包含一个源程序文件kt4_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
1:
weight:
5
age:
0
2:
weight:
7
age:
9
源程序文件kt4_1.cpp清单如下:
#include
classanimal
{
public:
/****************found*******************/
friendvoidsetvalue(animal&,int);
/****************found*******************/
viodprint();
protected:
intitsweight;
intitsage;
};
voidanimal:
:
print()
{
cout<<"weight:
"< cout<<"age:
"< }
voidsetvalue(animal&ta,inttw)
{
ta.itsweight=tw;
ta.itsage=0;
}
voidsetvalue(animal&ta,inttw,inttn)
{
ta.itsweight=tw;
ta.itsage=tn;
}
voidmain()
{/****************found*******************/
animalpeppy
setvalue(peppy,5);
cout<<"1:
"< peppy.print();
setvalue(peppy,7,9);
cout<<"2:
"< peppy.print();}
【参考答案】
(1)添加友元函数的声明
friendvoidsetvalue(animal&,int,int);
(2)将viodprint();改为:
voidprint();
(3)将animalpeppy改为:
animalpeppy;
【试题解析】
(1)主要考查对成员函数定义规则的掌握,成员函数必须先声明再使用,即使是友元函数也不例外;
(2)主要考查对关键字的掌握,空类型应用void;
(3)主要考查对变量定义的掌握,该处缺少“;”。
二、简单应用题
请编写一个函数intSeqSearch(intlist[],intstart,intn,intkey),该函数从start开始,在大小为n的数组list中查找key值,返回最先找到的key值的位置,如果没有找到则返回-1。
请使用for循环实现。
注意:
部分源程序已存在文件kt4_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数SeqSearch的花括号中填写若干语句。
文件kt4_2.cpp的内容如下:
#include
intSeqSearch(intlist[],intstart,intn,intkey)
{
}
voidmain()
{
intA[10];
intkey,count=0,pos;
cout<<"Enteralistof10integers:
";
for(pos=0;pos<10;pos++)
{
cin>>A[pos];
}
cout<<"Enterakey:
";
cin>>key;
pos=0;
while((pos=SeqSearch(A,pos,10,key))!
=-1)
{
count++;
pos++;
}
cout< }
【参考答案】
intSeqSearch(intlist[],intstart,intn,intkey)
{
for(inti=start;i {
if(list[i]==key)
{
returni;
}
}
return-1;
}
【试题解析】
本题考查的是考生使用for和if等基本控制结构的综合水平,查找一个数组中的指定元素并返回序号是一个基本操作,注意一维数组的实参格式。
使用VC6打开考生文件夹下的工程kt4_3,此工程包含一个源程序文件kt4_3.cpp,其中定义了用于表示向量的类vector,但类vector的定义并不完整。
请按要求完成下列操作,将类vector的定义补充完整。
(1)补充类vector的构造函数,该函数有参数x和y,它们都是int型的数据,默认值都为0。
请使用参数列表的形式分别将类的数据成员a和b分别初始化为参数x和y的值。
请在注释“//**1**”之后添加适当的语句。
(2)完成类vector的成员函数input(intx,inty)的定义,将int型的参数x和y分别赋值给数据成员a和b,请在注释“//**2**”之后添加适当的语句。
(3)完成类vector的友元函数frienddoubleMultiply(vector&x,vector&y)的定义,先定义double型的临时变量c,然后将参数对象x和对象y的数据成员a与b分别相乘再相加后赋值给c,最后返回c的值,将请在注释“//**3**”之后添加适当的语句。
输出结果如下:
(10,20)
(2,3)
80
注意:
除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序如下:
#include
classvector
{
inta;
intb;
public:
//**1**
voidinput(intx,inty)
{//**2**}
voidoutput()
{cout<<'('< frienddoubleMultiply(vector&x,vector&y);
};
doubleMultiply(vector&x,vector&y)
{
//**3**
c=x.a*y.a+x.b*y.b;
returnc;
}
voidmain()
{
vectorx(10,20),y;
doubled;
y.input(2,3);
d=Multiply(x,y);
x.output();
y.output();
cout< }
【参考答案】
(1)vector(intx=0,inty=0):
a(x),b(y){}
(2)a=x;b=y;
(3)doublec;
【试题解析】
本题主要考查类的定义和友元函数定义,其中
(1)中的参数列表形式和(3)中对象访问成员使用“.”操作符。
2010年全国计算机等级考试二级C++模拟试题(5)
上机部分
一、改错题
使用VC6打开考生文件夹下的工程kt5_1,此工程包含一个源程序文件kt5_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:
(1,2)
5,6
(6,9)
源程序文件kt5_1.cpp清单如下:
#include
classA{
public:
A(inti,intj){a=i;b=j;}
/****************found*******************/
voidMove(intx,inty){a+=x;b+=y}
voidShow(){cout<<"("< private:
inta,b;
};
classB:
privateA
{
public:
/****************found******************