2014c++试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2014年计算机二级考试C++上机考试试题及答案汇总
2014年计算机二级考试C++上机考试试题及答案(1)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使程序正常运行,并且要求最后一个catch必须抛出执行的任何异常。

程序异常,输出信息为
error
O
ERROR
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:
#includeintmain()
{
try
{
throw("error");
}
//********error********
catch(chars)
{
cout<}
try
{
throw((int)0);
}
//********error********
catch()
{
cout<}
try
{
throw(O);
throw("error");
}
//********error********
catch()
{
cout<<"ERROR"<} return0;
}
二、简单应用题
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。

请补充完整程序fun(inti),使其完成以下功能:如果i=5,则输出如下5行#号。

#
##
###
####
#####
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:
#include
voidfun(inti)
{
}
intmain()
{
fun(5);
return0;
}
三、综合应用题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。

程序通过继承关系,实现对姓名的控制。

类TC1实现对名字访问的接口,TC2实现对名字的设置和输出。

程序输出为
TC2Name
May
其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。

(1)在类TCl中定义接口函数GetName为纯虚函数。

请在注释1后添加适当的语句。

(2)函数GetName2用于获得名字的缓存,但只获得允许读操作这个缓存,请在注释2后添加适当的语句。

(3)实现TC2的构造函数,请在注释3后添加适当的语句。

(4)完成TC2的构造函数,实现对名字的处理。

请在注释4后添加适当的语句。

注意:增加或者修改代码的位置已经用符号
表示出来,请不要修改其他的程序代码。

试题程序:
#include
classTC1
{
public:
//********1********
};
classTC2:publicTCl
{
public:
voidGetName()
{
cout<<"TC2Name"<}
//********2********
{
returnm_str;
}
//********3********
{
inti:
for(i=0;str[i]!=0;i++)
m_str[i]=str[i];
//********4********
}
private:
charm_str[32];
};
voidmain()
{
TCl*P;
TC20bj1("May");
p=&objl;
p->GetName();
cout<return;
}
一、程序改错题
(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(…)”。

二、简单应用题
for(intj=0;j(i;j++)//行循环
{
for(intk=0;k<=j;k++)//列循环
cout<<"#";//输出“#”
cout<}
【解析】本题首先利用for循环进行外层循环,输出对应的i行,然后利用for循环进行内层循环,输出对应i行的i列。

三、综合应用题
(1)应添加“virtualvoidGetNamt!()=0;”。

(2)应添加“constchar*GetName2()”。

(3)应添加“TC2(char*str)”。

(4)应添加“m_str[i]=0;”。

【解析】本题第1处要求“在类TC1中定义接口函数GetName,为纯虚函数”。

在C ++中,在基类中用virtual声明成员函数为虚函数。

纯虚函数是在声明虚函数时被“初始化”为0的函数,即“virtualvoidGetName()=0;”。

第2处要求“函数GetName2实现获得名字的缓存,但只获得读允许操作这个缓存”。

只能引用数据成员,而不能修改,所以使用常成员函数,其一般形式为“const函数类型函数名”,即“constchar*GetName2()”。

第3处要求“实现TC2的构造函数”。

TC2的构造函数与类TC2的名称应该相同,而且第3处的大括弧中是对字符数组str的操作,所以类TC2的构造函数中的参数为str,即这里补全为“TC2(char*str)”。

第4处要求“完成TC2的构造函数,实现对名字的处理”,补全类TC2的构造函数,构造函数中的名字变量str
对应于类TC中的成员变量m_str,所以这里补全变量赋值操作“m_str[i]=0;”。

2014年计算机二级考试C++上机考试试题及答案(2)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句:
TC1:0
TC2
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:
#include
structTC1
{
TCl(inti=0)
{
m_i=i;
}
voidprint()
{
cout<<"TCl:"<}
intm_i;
};
classTC2
{
public:
TC2()
{
}
voidprint()
{
cout<<"TC2"<}
//********error********
private:
~TC2()
{
}
};
intmain()
{ //********error********
TC1obj1();
//********error********
TC20bj2();
obj1.print();
obj2.print();
return0;
}
二、简单应用题
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。

完成函数fun(char*S,inta[]),其功能是把字符串S中的数字提取出来存储在a[]中,然后返回数字的个数。

例如s="1234abcdef567",则a[]中存储着1234567,返回7。

注意:不能修改程序的其他部分,只能修改fun函数。

试题程序:
#include(iostream.h>
intfun(char*s,inta[])
{
}
intmain()
{
inta[1024];
intlen=fun("1234abedef567",a);
for(inti=0;i{
COUt<}
cout<cout<return0;
}
三、综合应用题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。

类People包括姓名和年龄两个字段。

函数fun获得年龄比较大的人的姓名,然后输出这个姓名到屏幕。

其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。

(1)完成类的构造函数功能,请在注释1后添加适当的语句。

(2)完成构造函数对姓名的赋值,请在注释2后添加适当的语句。

(3)定义类的友元函数fun,请在注释3后添加适当的语句。

(4)补充函数fun的年龄比较功能,请在注释4后添加适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。

试题程序:
#include
classPeople
{
public:
//********1********
{
inti;
for(i=0;sUserName[i]!=0;i++)
{m_UserName[i]=sUserName[i];
}
//********2********
m_Old=nOld;
}
private:
charm_UserName[32];
intm_Old;
//********3********
};
voidfun(char*s,People&personl,People&person2
{
//********4********
if()
{
for(inti=0;personl.m_UserName[i]!=0;i +
+)
{
s[i]=personl.m_UserName[i];
s[i+1]=0;
}
}
else
{
for(inti=0;person2.m_UserName[i]!=0;i +
+) {s[i]=person2.m_UserName[i];
s[i+1]=0;
}
}
}
voidmain()
{
chars[32];
Peoplepl("abc",20);
Peoplep2("def",30):
fun(S,p1,p2);
cout<return;
}
一、程序改错题
(1)应改为“public:”。

(2)应改为“TClobj1(0);”或“TClobjl;”。

(3)应改为“TC20bj2;”。

【解析】本题第1处的“private:~TC2()”是析构函数,它不是私有的,所以这里应该删除“private:”或修改为“pub-lic:”。

第2处的“TClobjl();”语句是定义一个TCl类型的对象objl(),根据类TCl构造函数的定义“TCl(inti=o)”,知道存在整型参数,应该补充参数,或者只是先定义一个对象名,然后在使用时补充参数,即修改为“TClobjl(0);或TClobil;”。

第3处的“TC20bj2();”语句修改为“TC20bj2;”。

二、简单应用题
intj=0;
for(inti=0;s[i]!=0;i++)//字符串内循环{
if(s[i]>=’0’&&s[i]<=’9’)//判断字符是否为0
~9的字符
a[j++]=s[i]-’0’;//如果为0~9的字符,转换
为整型
}
}
returnj;//返回数字个数
【解析】本题中变量j用来记录转换的个数,首先初始化为0,然后利用for循环判断每一个当前字符是否为数字字符。

如果为数字字符,就将其减去字符“0”,即实现字符和
整型的转换,并且将j的变量值加1。

三、综合应用题
(1)应添加“People(char*sUserName,intnOld)”。

(2)应添加“m_UserName[i]=0;”。

(3)应添加“friendvoidfun(char*s,People&personl,People&person2);”。

(4)将“if()”补充完整为“if(personl.m_Old)person2.mOld)”。

【解析】本题第1处要求“完成类的构造函数”。

根据
“classPeople”语句知道People为类,所以类People的构造函数名为People,根据第1处的大括弧中的语句知道函数中的参数为数组sUserName存放姓名,整型nOld存放年龄,所以补充构造函数定义为“People(char*sUserName,intnOtd)”。

第2处要求“完成构造函数对姓名的贼值”。

第2处补全姓名赋值,即“m_UserName[i]=0;”。

第3处要求“定义类的友元函数fun”。

在C ++中,如果在本类以外的其他地方定义了一个函数,在类体中是用friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。

程序中的fun函数定义为“voidfun(char*S,People&personl,People&person2)”,所以声明fun()为类People的友元函数,即这里补全“friendvoktfun(char*s,People&personl,People&person2);”。

第4处要求“补充函数fun的年龄比较”。

类People中年龄的变量为m_Old,根据C++中类变量的调用格式补充第4处if语句中的条件判断语句,即“if(per-sonl.m_O1d)person2.m_Old)”。

2014年计算机二级考试C++上机考试试题及答案(3)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行有问题,请改正main函数中的错误,使程序的输出结果为:
number=1
number=10
number=100
注意:不要改动main函数,不能增加或删除行。

也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:
#include
classTC
{
public:
TC(inti)
{
number=i;
}
voidSetNumber(intm)
{
number=m;
}
intGetNumber()const
{
returnnumber;
}
voidPrint()const
{
cout<<"number="<}
private:
intnumber;
};
voidmain()
{
//********error********
TCobjl;
objl.Print();
TCobj2(3);
//********error********
objl.number=10;
//********error*‟******
TC.SetNumber(100);
objl.Print();
obj2.Print();
}
二、简单应用题
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。

完成fun函数,其功能是求出M行N列二维数组每行元素中的最小值,并计算它们的和,通过形参传回主函数并输出。

注意:不能修改程序的其他部分,只能修改fun函数。

试题程序:
#include(iostream.h)
#defineM2
#defineN4
voidfun(inta[M][N],int*sum)
{
}
voidmain()
{
intx[M][N]={7,6,5,2,4,2,8,3};
ints;
fun(x,&s);
cout<return;
}
三、综合应用题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。

其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。

(1)完成类TCl的成员函数seta的定义,定义seta对象,x为int类型,请在注释1后添加适当的语句。

(2)完成类TC3多继承类TCl和TC2的定义,请在注释2后添加适当的语句。

(3)定义类TC3中的私有成员C为int 型,请在注释3后添加适当的语句。

(4)完成setc中对基类的变量a的赋值,请在注释4后添加适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。

试题程序:
#include(iostream.h>
clasSTC1
{
inta;
public:
//********1********
{
returna=x:
}
voidshowa()
{
cout<}
};
classTC2
{
intb;
public:
voidsetb(intx)
{
b=x:
}
voidshowb()
{
cout<}
};
//********2********
{
private:
//********3********
public:
voidsetc(intX,inty,intz)
{
C=Z:
//********4********
setb(y);
}
voidshowc()
{
cout<}
};
voidmain()
{
TC3C;
C.seta(5);
C.showa();
C.sete(5,7,4);
C.showc();
}
上机考试试题答案与解析
一、程序改错题
(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);”。

二、简单应用题
inti,j,k,s=0;
for(i=0;i{
k=0:
for(j=1;j ifa[i][j])k=j;//求得每一行的最小值
s+=a[i][k];//最小值求和
}
*sum=S;//返回求和值
【解析】本题依次访问每一行的元素。

在对每一行的访问过程中选出最小数。

将选出的最小数求和。

三、综合应用题
(1)应添加“intseta(intx)”。

(2)应添加“classTC3:publicTC1,privateTC2”。

(3)应添加“intC;”。

(4)应添加“seta(x);”。

【解析】本题第1处要求“完成类TCl 的成员函数seta定义,定义seta对象X为int类型”。

类的成员函数是函数的一种,它与一般函数的区别是,它是一个类的成员,出现在类体中。

所以类TCl中的成员函数,就是在TCl中定义题目中要求的参数为intx 的seta函数,即“intseta(intx)”。

第2处要求“完成类TCl(公有)和类TC2(私有)派生类TC3的定义”。

从已有的类产生一个新的子类,称为类的派生。

声明派生类的一般形式为“class派生类名;[继承方式]基类名”。

根据声明派生类的一般形式,这里补全“class
TC3:publicTC1,privateTC2”。

第3处要求“定义类TC3中的私有成员C为int”。

在类TC3中的private数据成员区域,定义intC,印在第3处补全“intC;”。

第4处要求“完成setc中对基类的变量a的赋值”。

基类为TCl,setc对于该类a的赋值,是intseta(intx)函数的赋值,即“seta(x);”2014年计算机二级考试C++上机考试试题及答案(4)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正错误,使得程序通过运行。

程序输出结果为
5
a
1
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error**
****的下面。

试题程序:
#include(iostream)
template(classT>
//********error********
tmin(tX,ty)
{
return(x>y)?y:x;
}
voidmain()
{
intn=5:’
//********error********
charc="a":
intd=1:
//********error********
cout<cout<cout<}
二、简单应用题
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。

请完成函数fun(intn),使其实现以下功能:当i等于3时,则打印如下内容。

A
AA
AAA
注意:不能修改程序的其他部分,只能修改fun函数。

试题程序:
#include
voidfun(intn)
{
}
voidmain()
{
intn;
cout<<"请输入打印的行数:"< cin>>n;
if(n<1)
{
cout<<"输入的行数必须大于0"< return;
}
fun(n);
return;
}
三、综合应用题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。

其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。

(1)在类TC中定义name为字符串类型,age为int型,请在注释1之后添加语句。

(2)设置类TC0的基类为TC类的定义,请在注释2后添加语句。

(3)在类TC的派生类TC0的公有成员中定义析构函数TC0,请在注释3后添加语句。

(4)设置类TCl的基类为TC类的定义,请在注释4后添加语句。

程序输出结果为
TCclassconstructor
TC0classconstructor
TConclassconstructor
TClclassconstructor
TClclassconstructor
TCclassconstructor
TC0classconstructor
TCclassconstructor
注意:增加或者修改代码的位置已经用符号表示出来一请不要修改其他的程序代码。

试题程序:
#include
classTC
{
//********1********
public:
TC(){cout<<"TCclassconstructor"< TC(){tout<<"TCclassconstructor"<};
//********2********
{
char*departmert;
intlevel;
public:
TCO()
{cout<<"TCOclassconstructor"<//********3********
{cout<<"TC0classconstructor"<};
//********4********
{
char*maior:
floatsalary;
public:
TCl(){cOUt<<"TClclassconstructor"< TCI(){COUt<<"TClclassconstructor"<};
voidmain()
{
TC0sl;
TCItl;
}
上机考试试题答案与解析
一、程序改错题
(1)应改为“Tmin(TX,Ty)”。

(2)应改为“charc=’a’;”。

(3)应改为“usingnamespacestd;”。

【解析】本题C++是区分大小写的,“template T>”语句中定义的模板类为T不是t,所以第1处的“tmin(tx,ty)”修改为“Tmin(Tx,Ty)”。

第2处的“charc="a";”语句中的变量a为char型,赋值为字符a,在C++中应该使用单引号标注字符变量,而不是双引号,所以修改为“charC=’a’;”。

在程序中用到C++标准库时,要使用std
标准命名空间进行限定。

cout为标准库函数,所以要声明cout是在命名空间std中定义的流对象,即添加“usingnamespacestd;”。

二、简单应用题
inti;
for(i=0;i{
intj;
for(j=0;j(n-i-1;j++)//循环打印空格
{
cout<<’’;
}
for(;j{
cout<<"A":
}
cout<}
【解析】本题利用外层循环打印每一行。

内层循环分为
打印空格和打印A。

打印空格由第一个位置到第n-i-1。

打印A,是由打印完空格开始一直到行结束。

在外循环中打印每一行的结束符。

三、综合应用题
(1)应添加“char*name;intage;”。

(2)应添加“classTC0:publicTC”。

(3)应添加“~TCO()”。

(4)应添加“classTC1:publicTC”。

【解析】本题第1处要求“TC中定义name为字符串类型,age为整型”。

根据题目要求,在程序TC类中定义变量name和age,即“char*name;intage;”。

第2处要求“设置类TC0的基类为TC类的定义”。

在C++中,从已有的类产生一个新的子类,称为类的派生。

声明派生类的一般形式为“ClaSS派生类名:[继承方式]慕类名”。

根据声明派生类的一般形式,这里补全“classTC0:publicTC”。

第3处要求“在类TC的派生类TCO的公有成员中定义析构函数TC0”。

析构函数也是一个特殊的成员函数,它的作用与构造函数相反,它的名称是在类名前面加一个“~”符号。

题目中要求的类名称为“TCO”即这里补全“~TCO()”。

第4处要求“设置类TCl的基类为TCl类的定义”,在第4处补充“ClassTCl:public,TC”。

2014年计算机二级考试C++上机考试试题及答案(5)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请改正其中的错误,使得程序正确运行。

程序输出:
s1:n=20
s2:n=10
执行s3.add(s1,s2)
s3:n=30
s4:n=30
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。

试题程序:
#includeclassTC
{
intn;
public:
TC(){}
TC(intm)
{
n=m:
}
//********error********
TCadd(TCs1,s2)
{
this->n=s1.n+s2.n;
//********error********
return(this);
}
voiddisp()
{
cout<<"n一="<}
//********error********
}
voidmain()
{
TCs1(20),s2(10),s3,s4;
cout<<"s1:";
s1.disp();
cout<<"s2:";
s2.disp();
s4=s3.add(s1,s2);
cout<("执行s3.add(s1,s2)\ns3:";
s3.disp();
COUt<<"s4:";s4.disp();
}
二、简单应用题
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。

完成fun函数,使其功能为将两个按小到大排序的数组a和b,复制合并成一个有序整数序列c,其中形参n和m 分别是数组a和b的元素个数。

注意:不能修改程序的其他部分,只能修改fun函数。

试题程序:
#include
voidfun(inta[],intn,intb[],intm,int*c) {
}
voidmain()
{
intA[]={3,5,7,9,11,18,21);
intB[]={6,15,19,21,39};
intC[25],i;
for(i=0;i<25;i++)C[i]=0;
cout<<"A[]=";
for(i=0;i<7;i++)
cout<eout<cout<<"B[]=";
for(i=0;i<5;i++)
coul<cout<fun(A,7,B,5,C);
cout<<"C[]=";
for(i=0;i<12;i++)
cout<cout<return:
}
三、综合应用题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。

其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。

(1)将文件以追加的方式打开。

请在注释l后添加适当的语句。

(2)定义m、n为类TC的公有int型数据成员。

请在注释2后添加适当的语句。

(3)定义P为类TC的数据成员指针,并指向类TC的数据成员m。

请在注释3后添加适当的语句。

(4)定义P指向类TC的数据成员n。

请在注释4后添加适当的语句。

注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。

试题程序:
#include
#include(fstream)
#include
#include
usingnamespacestd;
voidWriteFile(intx)
{
ofstreamout1;
//********1********
out1.open("3.txt",);
out1<out1.close();
}
voidClearFile()
{
ofstreamout1;
outl.open("3.txt");
out1.close();
}
classTC
{
public:
voiddisp()
{
cout<<"m="<WriteFile(m);
cout<<"n="<WriteFile(n);
}
//********2********
};
voidmain()
{
//********3********
ClearFile();
TCa;
a.*p=30;
//********4********
a.*p=45;
a.disp();
}
一、程序改错题
(1)应改为“TCadd(TCs1,TCs2)”。

(2)应改为“return(*this);”。

(3)应改为“};”。

【解析】本题中的变量“s2”没有声明类型,所以补充“s2”的类型,即“TCadd(TCs1,TCs2)”,“this->n=s1.n+s2.n;”语句中的this变量为指针变量,所以第2处的“return(this);”返回语句中的this变量,应该返回指针型,所以修改为“return(*this);”。

C++中类的定义格式应为“class类名{};”,以分号为结尾,所以在第3处的类结尾处补充分号“;”,即修改为“};”。

二、简单应用题
inti,j;
for(i=j=0;i(n&&j{
*c++=a[i]个数组中元素大小
}
while(iwhile(j(m)*c++=b[j++];
【解析】本题都指向数组的第一个元素。

利用for循环对要合并的两个数组中的元素进行比较,直到两个数组结束。

取比较结果小的元素,并将指向这个数组的位置向后移动一位。

三、综合应用题
(1)将“out1.open(”3.txt”,);”补充完整为“outl.open("3.txt",ios_base::app);"。

(2)应添加“intm,n;”。

(3)应添加“intTC::*p=&(TC::m);”。

(4)应添加“p=&(TC::n);”。

【解析】本题第1处要求“对文件以追加的方式打开”。

文件输入输出方式的设置值,ios::app是以输出方式打开文件,写入的数据添加在文件末尾,即第1处的语句补全为“out1.open("3.tXt",ios_base::app);”。

第2处要求“定义m、n为类TC的公有int 型数据成员”。

只需在程序中的TC类中的public区域添加m、n的定义即可。

即在第2处添加“intm,n;”。

第3处要求“定义P 为类TC的数据成员指针,并指向类TC数据成员m”。

程序中类TC数据成员m为“TC::m”定义P为类TC的数据成员指针语句为“TC::*P”,将其指向前面的数据成员m,即为“intTC::*P=&(TC::m);”。

第4处要求“定义P指向类TC数据成员n”。

定义类TC数据成员n的语句为“TC::n”,用P指向类TC数据成员n,添加的语句即“p=&(TC::n);”。

2014年计算机二级考试C++上机考试试题及答案(6)
一、程序改错题
使用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<return0;
}
二、简单应用题
使用vC++6.0打开考生文件夹下的源程序文件2.cpp,请实现函数fun(doublea[],intlen)的如下功能:
(1)a[]是一个数组,长度为len。

(2)a[0]=0,a[1]=1。

(3)a[i+2]=a[i]+a[i+1]。

注意:不能修改函数的其他部分。

试题程序:
#include(iostream)
voidfun(doublea[],intlen)
{
}
voidmain()
{
doublea[20];
fun(a,20);
for(inti=0;i<20;i++)
{
std::cout<if(i%6==5)
std::eout<}
return;
)
三、综合应用题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。

请完成以下部分,实现在屏幕上输出为
C3
C2
这个程序需要修改的部分,请按照以下部分实现。

(1)类C0不能被实例化,请定义一个纯虚函数print,在注释1后添加适当的语句。

(2)类C1私有虚继承类C0,请在注释2后添加适当的语句。

(3)类C2公有继承于C0,请在注释3后添加适当的语句。

(4)类c3公有继承于C2与C1,请在注释4后添加适当的语句。

注意:增加代码或者修改代码的位置已经用符号表示出来。

请不要修改其他的程序代码。

试题程序:
#include(iostream.h)
classCO
{
//********1********
};
//********2********
classC1:
{
public:
voidprint()
{
cout<"”C1"<}
};
//********3********
classC2:
{
public:
voidprint()
{
cout<<"C2"<}
};
//********4***x****
classC3:
{
public:
voidprint()
{
cout<<"C3"<}
};
voidmain()
{
C30bj3;
C20bj2;
obj3.print();
obj2.print();
return;
}
上机考试试题答案与解析
一、程序改错题
(1)应添加“public:”。

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

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

【解析】本题主要考查的是成员的访问属性。

成员的访问属性有公有、保护和私有3种,而默认的访问属性为私有,只有公有成员才能通过类的对象被访问。

故应在构造
函数前添加“public:”,否则该类无法被实例化。

变量的初始化可以通过“=”号,也可以和初始化对象一样添加构造参数,题目已要求使用后者。

本题要求输出5个数,while的循环变量i每次减1,在i>5时循环,故i初始化应为10。

若循环中i每次增1,则循环永远不会退出。

二、简单应用题
voidfun(doublea[],intlen)
{
if(1en>O)
a[0]=0:
if(1en>1)
a[1]=1;
for(inti=2;i<1en;i++)
a[i]=a[i-1]+a[i-2];
}
【解析】本题考查的是计算数列值。

首先给a[0]和a[1]赋初值,注意判断数组是否越界,然后循环遍历a[2]~a[len-1],根据题目给出关系计算每一个元素的值。

三、综合应用题
(1)应添加“virtualvoidprint()=0,”。

(2)“classC1:”应改为“classC1:virtualprivateC0”。

(3)“classC2:”应改为“classC2:publicC0”。

(4)“classC3:”应改为“classC3:publicC2,publicC1”。

【解析】本题考查了类的继承。

根据题意,第1处应该添加“virtualvoidprint()=0;”。

第2处根据题意,在冒号后面应添加“virtualprivateCO”。

第3处根据题意,冒号后应添加“publicCO”。

第4处根据题意,冒号后应添加“publicC2,publicC1”。

2014年计算机二级考试C++上机考试试题及答案(7)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件
1.cpp,该程序运行时有误,请改正其中的错误,使程序正常运行,并使程序的输出结果为
平均值为29
最大值为112
最小值为-11
注意:错误的语句在//******error******的下面,修改该语句即可。

试题程序:
#include(iostream)
usingnamespacestd;
intmain()
{
inti,Ave,Min,Max;
intdata[8]={100,21,-73,86,14,0,-21,1};
Ave=0;
for(i=0:i<8:i++)
//******error******
Ave=data[i];
Ave/=8:
cout<<"平均值为:"< Max=Min=data[O];
for(i=0;i<8;i++)
{
//******error******
if(data[i](Max)Max=data[i];
//******error******
if(data[i])Min)Min=data[i];
}
cout<<"最大值为:"<cout<<"最小值为:"<return0;
}
二、简单应用题
使用VC++6.0打开考生文件夹下的源程序文件2.cpp。

阅读下列函数说明和代码,完成空出部分程序。

函数sum(intA[NUM][NUM],intn)的功能是计算矩阵中所有非质数数字的和。

提示:函数isPrime(intn)的功能是判定当前数字是否为质数,如果是,则返回true。

注意:不能修改程序的其他部分,只能修改sum函数。

试题程序:
#include(iostream.h)
#include
#defineNUM50
intA[NUM][NUM]=
{
{1,3,5,7,9},
{11,13,15,17,19},
{21,23,25,27,29},
{31,33,35,37,39},
{41,43,45,47,49}
};
boolisPrime(intn)
{
if(n==1)
returnfalse;
if(n==2)
returntrue;
for(inti=2;i(n/2;i++)
{
if(n%i==0)
returnfalse;
}
returntrue;
}
intsum(intAENUM]ENUM],intn)
{
}
intmain()
{
cout<return0;
}
三、综合应用题
使用VC++6.0打开考生文件夹下的源程序文件3.cpp,其中定义了类BA、PA1和PA2,其中PA1类由BA类公有派生,PA2类由PA1类公有派生。

上述3个类的定义并不完整,请按要求完成下列操作,将程序补充完整。

程序输出结果如下:
1O
5
1057
(1)定义类BA的构造函数,该构造函数有一个整型的参数m,在构造函数中将m 赋值给数据成员a。

请在注释1之后添加适当的语句。

(2)定义类PA1的构造函数,该构造函数有两个整型的参数m和n,在构造函数中将m赋值给数据成员b,将n作为基类BA 构造函数的参数值传人。

请在注释2之后添加适当的语句。

(3)定义类PA2的构造函数,该构造函数有3个整型的参数m、n和k,在构造函数中请将m赋值给数据成员c,将n和k分别赋值给基类PA1构造函数的参数m和n。

请在注释3之后添加适当的语句。

(4)完成类PA2的成员函数show的定义,该函数调用基类成员函数,输出基类私有成员a、b及类PA2自身的数据成员C的值,上述3个值在输出时用空格隔开。

请在注释4之后添加适当的语句。

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

试题程序:
#include(iostream.h>
classBA
{
inta;
public:
//********1********
intgeta(){returna;}
};
classPAl:publicBA
{
intb;
public:
//********2********
intgetb(){returnb;}
};
classPA2:publicPAl
{
intC;
public:
//********3********
voidshow()
{
//********4********
}
};
voidmain()
{
PA2a(7,5,10);
cout<cout<a.show();
}
上机考试试题答案与解析
一、程序改错题
(1)应改为“Ave+=data[i];”或“Ave=Ave +data[i];”。

(2)应改为“if(data[i])Max)Max=data[i];”。

(3)应改为“if(data[i](Min)Min=data[i];”。

【解析】本题第一个for循环是求数组各个元素的和,逐次将每个元素值加起来,而程序当中是逐个赋值的,因此在第1标识处应将“Ave=data[i]”改成“Ave+=data[i]”或“AveAve+data[i]”。

第2处根据题意再求数组当中元素的最大值和最小值,用变量Max记录最大值,Min记录最小值,在for 循环中,逐次比较,如果该元素值比当前Max大,则Max取该元素值,因此第2标识处正确的语句应该是“if(data[i]>Max)Max=data[i]”。

如果数组中该元素值比Min小,则Min取该元素值。

因此,两个if语句中的条件判断错误,将第3标识处的语句“if(data[i]>Min)Min=data[i];”改成“if(data[i]二、简单应用题
intre=0:
for(inti=0;i{
for(intj=0;j{
if(!isPrime(A[i][j]))//判断是否是素数,不是
素数则累加
{
re=re+A[i][j];
}
}
}
returnre:
【解析】矩阵A[NUM][NUM]是二维矩阵,sum函数的参数n给出了矩阵A的具体维数,因此矩阵A中共含有n×n个有效数。

A[NUM][NUM]中的元素可表示为A[i][j],其中i表示元素所在行数,j表示元素所在的列数,i、j分别在0到n-1范围内变化,因此设置内外两层循环可逐个遍历整个矩阵寻找非质数。

函数isPrime提供了判断质数的方法,对每个元素A[i][j],调用函数isPrime(A[i][j]),判断函数的返回值是否为假,如果为假,说明不是质数,应该累加起来。

三、综合应用题
(1)应添加“BA(intm){a=m;}”。

(2)应添加“PAl(intm,intn):BA(n){b=m;}”。

(3)应添力Ⅱ“PA2(intm,intn,intk):PAl(n,k){C=m;)”。

(4)应添加“cout<【解析】根据第1处要求,构造函数的函数名和类名一致,显然BA构造函数的名称为BA,在BA()中通过参数m完成对成员变量a的赋值,因此构造函数的名称为BA(intm),在函数内部对成员a赋值,故第1处的语句应添加“BA(intm){a=m;)”。

根据第2处的要求,构造函数的形式为“PAl(intm,intn)”,m赋值给PA1类成员b,将n作为基类BA构造函数的参数值传入,故第2处应添加“PA1(intm,intn):BA(n){b=m;}”。

根据第3处的要求,函数形式为PA2(intm,intn,intk),在构造函数中将m赋值给数据成员c,将n和k分别赋值给基类PA1构造函数的参数m和n,因此第3处应添加“PA2(intm,intn,intk):PA1(n,k){C=m;}”。

根据第4处的要求,PA2类公有派生于PA1,而PA1公有派生于BA,因此在PA2类中可以调用基类的geta()和getb()来获得基类私有成员a 和b,再输出PA2的私有成员C即满足要求,因此第4处应添加“cout<
2014年计算机二级考试C++上机考试试题及答案(8)
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错误,请补充程序中的丢失部分,使得程序运行。

可以在修改处增加或者删除一条语句。

本程序完成以下功能:
(1)获得输入的两个数字d1,d2(d1=6,d2=1)。

相关文档
最新文档