1、国家二级 C+机试(操作题)模拟试卷 446 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modilepp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为:1063022 注意:错误的语句在*error*的下面,修改该语句即可。#includeiostreamhclass CMyClassprivate: int number; int Add(int i) return number+=i; int Sub(int i) return number-=i; int Mul(int i
2、) return number*=i; ) int Div(int i) if (i!=0) return number=i; else return number; *error* typedef int(FUNC)(int); *error* FUNC func;public: CMyClass() func0=CMyClass:Add; func1=CMyClass:Sub; func2=CMyClass:Mul; func3=CMyClass:Div; number=0; int CallFunction(int i,int j) *error* return(funci)(j); ;
3、void main() CMyClass myobj; coutmyobjCallFunction(0,10)end1; coutmyobjCallFunction(1,4)end1; coutmyobjCallFunction(2,5)end1; coutmyobjCallFunction(3,15)end1; coutmyobjCallFunction(3,0)end1;(分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6 打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。sum(hatn)计算所有 n 的因子之和(不包括
4、1 和自身)。 注意:不能修改程序的其他部分,只能补充 sum()函数。 #include int sum(int n) void main() cout*funci)(j);)解析:解析:(1)在类中定义函数指针须指定类名及指针定义运算符水,因此第 1 个标识下函数指针正确的定义为“typedefint(CMyClass:*FUNC)(int);”。 (2)函数指针数组本身是数组类型,因此在定义时如果没有初始化,就必须指定数组大小,在本题中因为指针数组包含的指针变量需要指向四种算数运算,因此定义指针数组大小为 4,即第 2 个标识下应改为“FUNC func4;”。 (3)func 是指针数
5、组,因此访问的时候需要有指针运算符“*”,第 3 个标识下应改成“return(this-*funci)(j);”。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6 打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。sum(hatn)计算所有 n 的因子之和(不包括 1 和自身)。 注意:不能修改程序的其他部分,只能补充 sum()函数。 #include int sum(int n) void main() coutsum(10)sum(200)sum(400)_正确答案:(正确答案:int all=0; for(int i=2;i解析:解析
6、:(1)数 n 的因子是指为整除 n 等于 0 的所有自然数的集合。 (2)为了实现计算所有 n 的因子之和且不包含 1 和自身,函数中定义一个变量 all 用来保存求和结果,并为最终结果在函数结束时返回; (3)在循环中逐个寻找 n 的因子,为了在计算中排除掉 1 和 n 本身,因此循环变量 i 的变化范围为从 2 到n1。 (4)如果 ni=0,说明 i 是 n 的因子,因此将 i 加到 all 上。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6 打开考生文件夹下的源程序文件 modi3cpp,其中定义了用于表示学生学号的类CStudentID,但类 CStudentID 的
7、定义并不完整。 运行结果为: 学生的学号为:200805 学生名为:李伟 删除学生学号为:200805 请按要求完成下列操作,将类 CStudentID 的定义补充完成: (1)定义 class CStudentID 类的私有数据成员 IDvalue 表示学生的学号,为 long 型的数据。请在注释*1*之后添加适当的语句。 (2)完成默认构造函数 CStudentID 的定义,使CStudentID 对象的默认值为:id=0,并把学生的学号赋给 IDvalue,并输出“赋给学生的学号:”及学号。请在注释*2*之后添加适当的语句。 (3)完成默认析构函数 CStudentID 的定义,使CSt
8、udentID 析构时输出“删除学号:”及学号。请在注释*3*之后添加适当的语句。 (4)完成默认构造函数 CStudentlnfo 的定义。对应两个默认参数:要求定义 char stName,其默认值为“no name”,定义 long stID,其默认值设为 0,并使它们赋值给相应的类数据成员。请在注释*4*之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeiostreamh#includestringhclass CStudentID*1*定义私有数据成员 public: *2*定义默认构造函数 IDvalue=id; cout“学生的学号
9、为:“IDvalueend1; *3*定义析构函数 cout“删除学生学号为:“IDvalueend1; ; class CStudentInfo private: CStudentID id; char name20;public: *4*定义默认构造函数完成数据成员初始化 cout“学生名为:“stNameend1; strcpy(name,stName); ; void main() CStudentInfo st(“李伟“,200805); (分数:2.00)_正确答案:(正确答案:(1)添加语句:long IDvalue; (2)添加语句:CStudentID(long id=0)
10、(3)添加语句:CStudentID() (4)添加语句:CStudentInfo (char stName= “no name“,long stID=0):id(StID)解析:解析:(1)第 1 个标识下完成 CStudentlD 类的私有数据成员 IDvalue 的定义,为 long 型的数据,因此第 1 个标识下应添加“long IDvalue;”。 (2)构造函数完成类成员变量的初始化,构造函数名和类名一致,该构造函数带有一个参数 id,其默认值为 id=0,因此第 2 个标识下应添加“CStudentID(long id=0)”。 (3)析构函数也和类名一致,并且在前面加“”以和构造函数区分,析构函数没有参数,故第 3 个标识下应添加“CStudentID()”。 (4)CStudentInfo 包含的学生学号信息保存在类 CStudentID的实例中,可通过调用类 CStudentID 的自定义构造函数初始化,第 4 个标识下应添加“CStudentInfo (char stName=“no name“,longstID=0):id(stID)”。