1、国家二级 C+机试(操作题)模拟试卷 238及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 cpp,该程序运行时有错,请改正错误,使得程序正确执行,并且输出以下语句: TestClass1: 0 TestClass2 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include iostream h struct TestClass1 TestClass1(int i=0) m_i=1; void print() cout “TestClass1: “ m i endl; ; int m_i;
2、 ; Class TestClass2 public: TeStClasS2() void print() cout “TestClass2“ endl; ; *error* private: TestClass2() ; int main() *error* TestClass1 obj1(); *error* TestClass2obj2(); obj1 print(); obj2 print(); return0; 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。完成函数 fun(char*s;int a),其功能是把 S中出现的数字转换成数字存储在 a
3、中,然后返回转换的个数。 例如: s=“1234abcdef567“; 则: a中存储着 1234567 返回: 7 注意:不能修改程序的其他部分,只能修 改 fun()函数。 #include iostream h int fun(char*s, int a) int main() int a1024; int len=fun(“1234abcdef567“, a); for(int i=0; i len; i+) cout ai ; cout endl; cout i endl; return0; 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。类 Per
4、son完成对人的姓名和 年龄的绑定。函数 fun()获得年龄比较大的姓名。然后输出这个姓名到屏幕。 其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)完成类的构造函数,请在注释 *1*后添加适当的语句。 (2)完成构造函数对姓名的赋值,请在注释 *2*后添加适当的语句。 (3)定义类的友元函数 fun(),请在注释 *3*后添加适当的语句。 (4)补充函数 fun()的年龄比较,请在注释 *4*后添 加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 #include iostream h class Person public
5、: *1* int i; for(i=0; sUserrNamei!=0; i+) m_UserNamei=sUserrNamei; *2* m_Old=nOld; private: char m_UserName32; int m_Old; *3* ; void fun(char*s, Person&person1, Person& person2) *4* if() for(int i=0; person1 m_UserNamei!=0; i+) si=person1 m_UserNamei; si+1=0; else for(int i=0; person2 m_UserNamei!=0
6、; i+) si=person2 m_UserNamei; si+1=0; void main() char s32; Person p1(“abc“, 20); Person p2(“def“, 30); fun(s, p1, p2); cout s endl; return; 国家二级 C+机试(操作题)模拟试卷 238答案与解析 一、基本操作题 1 【正确答案】 (1)public: (2)TestClass1 obj1(0);或 TestClass1 obj1; (3)TestClass2 obj2; 【试题解析】 (1)第 1个标识下的 “private: TestClass2()”
7、是析构函数,它不是私有的,所以这里应该为 “删除 private:或修改为 public: ”。 (2)第 2个标识下的 “TestClass1 obj1(): ”语句是定义一个 TestClass1类型的对象obj1(),根据类 TestClass1构造函数的定义 “TestClass1(int i=0)”,知道存在整型参数,应该补充参数,或者只是先定义一个对象名,然后在使用时补充参数,即修改为 “TestClssl objl(0):或 TestClass1 objl; ”。 (3)同理第 3个标识下的 “TestClass2 obj2(); ”语句修改为 “TestClass2obi2;
8、”。 二、简单应用题 2 【正确答案】 int j=0; for(int i=0; si!=0; i+)字符串内循环 if(si =0&si =9)判断字符是否为 0 9的字符 aj+=si-0;如果为 0 9的字符,转换为整型 return j;返回数字个数 【试题解析 】 (1)j变量用来记录转换的个数,首先初始化为 0。 (2)然后利用 for循环对每一个当前字符进行判断是否为数字字符。 (3)如果为数字字符,就将其减去字符 0,即实现字符和整型的转换。并且,将 j的变量值加 l。 三、综合应用题 3 【正确答案】 (1)添加语句: Person(char*sUserrName, int
9、 nOld) (2)添加语句: m_UserNamei=0; (3)添加语句: friend void fun(char*s, Person&person1, Person&person2); (4)将 “if()”补充完整为: if(personl m_Old person2 m_Old) 【试题解析】 (1)题目 1要求 “完成类的构造函数 ”。根据 “class Person”语句知道Person为类,所以类 Person的构造函数名为 Person,根据第 1个标识下的大括弧中的语句知道函数中的参数为数组 sUserrName存放姓名,整型 nOld存放年龄,所以补充构造函数定义为 “
10、Person(char*sUserrName, int nOld)”。 (2)题目 2要求 “完成构造函数对姓名的赋值 ”。根据 (1)中的分析,在第 2个标识下补全姓名赋值,即 “m_UserNamei=0; ”。 (3)题目 3要求 “定义类的友元函数 fun()”。在 C+中,如果在本类以外的其它地方定义了一个函数,在类体中是用 friend对该函数进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中的 fun函数定义为 “void fun(char*s, Person&person1, Person&person2)”,所以声明 fun()为类 Person的友元函数,即这里补全 “friend void fun(char*s,Person&person1,Person&person2); ”。 (4)题目 4要求 “补充函数 fun()的年龄比较 ”。类 Person中年龄的变量为 m_Old,根据 C+中类变量的调用格式补充第 4个标识下, if判断中的条件语句,即“if(personl m_Old person2 m_Old)”。