2017河南计算机等级考试二级C++ 上机试题2
联 系 方 式 : 0 3 7 1 - 5 8 5 3 5 5 2 5
微 信 : 1 5 7 3 6 9 1 0 2 1 7
Q Q : 2 4 2 4 1 9 8 9 1 7
一、程序改错题
使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句:
TC1:0
TC2
注意:不要改动main函数,不能增加或删除行,也不能更改程序的结构,错误的语句在//******error******的下面。
试题程序:
#include
structTC1
{
TCl(inti=0)
{
m_i=i;
}
voidprint()
{
cout<<"TCl:"<<M_I<<ENDL;
}
intm_i;
};
classTC2
{
public:
TC2()
{
}
voidprint()
{
cout<<"TC2"<<ENDL:
}
//********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<LEN;I++) style="TEXT-ALIGN: left; WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; FONT: 14px/25px 宋体; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"
{
COUt<<A[I]<<’’;
}
cout<<ENDL;
cout<<I<<ENDL:
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<<S<<ENDL:
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)”。
联 系 方 式 : 0 3 7 1 - 5 8 5 3 5 5 2 5 微 信 : 1 5 7 3 6 9 1 0 2 1 7 Q Q : 2 4 2 4 1 9 8 9 1 7




