1、二级 C+机试-142 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句:TC1:0TC2注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.hstruct TC1TCl(int i=0)m_i=i;void print()cout“TC1:“m_iend1;int m_i;class TC2public:TC2()voi
2、d print()cout“TC2“end1;/*error*private:TC2();int main()/*error*TC1 obj1();/*error*TC2 ohj2();obj1.print();ohj2.print();return 0;(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。完成函数 fun(char *s,int a),其功能是把字符串 s 中的数字提取出来存储在 a中,然后返回数字的个数。例如 s=“1234abcdef567“,则 a
3、中存储着 1234567,返回 7。注意:不能修改程序的其他部分,只能修改 fun 函数。试题程序:#includeiostream.hint fun(char *s,int a)int main()int a1024;int len=fun(“1234abcdef567“,a);for(int i=0;ilen;i+)coutai;coutend1;coutiend1;return 0;(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。类 People 包括姓名和年龄两个字段。函数 fun 获得年龄比较大的人的
4、姓名,然后输出这个姓名到屏幕。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成类的构造函数功能,请在注释 1 后添加适当的语句。(2)完成构造函数对姓名的赋值,请在注释 2 后添加适当的语句。(3)定义类的友元函数 fun,请在注释 3 后添加适当的语句。(4)补充函数 fun 的年龄比较功能,请在注释 4 后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#includeiostream.hclass Peoplepublic:/*1*int i;for(i=0;sUserNamei!=0;i+)m_UserName
5、i=sUserNamei;/*2*m_Old=nOld;private:char m_UserName32;int m_Old;/*3*;void fun(char *s,People person1,Peopleperson2)/*4*if()for(int i=0;person1.m_UserNamdi!=0;i+)si=person1.m_UserNamei;si+1=0;elsefor(int i=0;person2.m_UserNamei!=0;i+)si=person2.m_UserNamei;si+1=0;void main()char s32;People p1(“abc“,2
6、0);People p2(“def“,30);fun(s,p1,p2);coutsend1;return;(分数:30.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_二级 C+机试-142 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句:TC1:0TC2注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.h
7、struct TC1TCl(int i=0)m_i=i;void print()cout“TC1:“m_iend1;int m_i;class TC2public:TC2()void print()cout“TC2“end1;/*error*private:TC2();int main()/*error*TC1 obj1();/*error*TC2 ohj2();obj1.print();ohj2.print();return 0;(分数:30.00)填空项 1:_ (正确答案:应改为“public:”。)解析:填空项 1:_ (正确答案:应改为“TC1 obj1(0);”或“TC1 obj1
8、;”。)解析:填空项 1:_ (正确答案:应改为“TC2 obj2;”。)解析:解析 本题第 1 处的“private:TC2()”是析构函数,它不是私有的,所以这里应该删除“private:”或修改为“public:”。第 2 处的“TC1 obj1();”语句是定义一个 TC1 类型的对象obj1(),根据类 TC1 构造函数的定义“TC1(int i=0)”,知道存在整型参数,应该补充参数,或者只是先定义一个对象名,然后在使用时补充参数,即修改为“TC1 obj1(0);或 TC1 obj1;”。第 3 处的“TC2 obj2();”语句修改为“TC2 obj2;”。二、2简单应用题(总
9、题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。完成函数 fun(char *s,int a),其功能是把字符串 s 中的数字提取出来存储在 a中,然后返回数字的个数。例如 s=“1234abcdef567“,则 a中存储着 1234567,返回 7。注意:不能修改程序的其他部分,只能修改 fun 函数。试题程序:#includeiostream.hint fun(char *s,int a)int main()int a1024;int len=fun(“1234abcdef567“,a);for(int i=0;ilen;i+)coutai;c
10、outend1;coutiend1;return 0;(分数:40.00)_正确答案:(int j=0;for(int i=0;si!=0;i+) /字符串内循环if(si=0si=9) /判断字符是否为 09 的字符aj+=si=0; /如果为 09 的字符,转换为整型return j; /返回数字个数)解析:解析 本题中变量 j 用来记录转换的个数,首先初始化为 0,然后利用 for 循环判断每一个当前字符是否为数字字符。如果为数字字符,就将其减去字符“0”,即实现字符和整型的转换,并且将 j 的变量值加 1。三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件
11、夹下的源程序文件 3.cpp。类 People 包括姓名和年龄两个字段。函数 fun 获得年龄比较大的人的姓名,然后输出这个姓名到屏幕。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。(1)完成类的构造函数功能,请在注释 1 后添加适当的语句。(2)完成构造函数对姓名的赋值,请在注释 2 后添加适当的语句。(3)定义类的友元函数 fun,请在注释 3 后添加适当的语句。(4)补充函数 fun 的年龄比较功能,请在注释 4 后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#includeiostream.hclass Peopl
12、epublic:/*1*int i;for(i=0;sUserNamei!=0;i+)m_UserNamei=sUserNamei;/*2*m_Old=nOld;private:char m_UserName32;int m_Old;/*3*;void fun(char *s,People person1,Peopleperson2)/*4*if()for(int i=0;person1.m_UserNamdi!=0;i+)si=person1.m_UserNamei;si+1=0;elsefor(int i=0;person2.m_UserNamei!=0;i+)si=person2.m_U
13、serNamei;si+1=0;void main()char s32;People p1(“abc“,20);People p2(“def“,30);fun(s,p1,p2);coutsend1;return;(分数:30.00)填空项 1:_ (正确答案:应添加“People(char *sUserName,int nOld)”。)解析:填空项 1:_ (正确答案:应添加“m_UserNamei=0;”。)解析:填空项 1:_ (正确答案:应添加“friend void fun(char *s,Peopleperson1,Peopleperson2);”。)解析:填空项 1:_ (正确答案
14、:将“if()”补充完整为“if(person1.m_Old)person2.m_Old)”。)解析:解析 本题第 1 处要求“完成类的构造函数”。根据“class People”语句知道 People 为类,所以类 People 的构造函数名为 People,根据第 1 处的大括弧中的语句知道函数中的参数为数组 sUserName存放姓名,整型 nOld 存放年龄,所以补充构造函数定义为“People(char *sUserName,int nOld)”。第2 处要求“完成构造函数对姓名的赋值”。第 2 处补全姓名赋值,即“m_UserNamei=0;”。第 3 处要求“定义类的友元函数 f
15、un”。在 C+中,如果在本类以外的其他地方定义了一个函数,在类体中是用friend 对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中的fun 函数定义为“void fun(char *s,Peopleperson1,Peopleperson2)”,所以声明 fun()为类People 的友元函数,即这里补全“friend void fun(char *s,Peopleperson1,Peopleperson2);”。第 4 处要求“补充函数 fun 的年龄比较”。类 People 中年龄的变量为 m_Old,根据 C+中类变量的调用格式补充第 4 处 if 语句中的条件判断语句,即“if(person1.m_Oldperson2.m_Old)”。