1、国家二级 C+机试(操作题)模拟试卷 446及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil epp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 10 6 30 2 2 注意:错误的语句在 *error*的下面,修改该语句即可。 #include class CMyClass private: int number; int Add(int i) return number+=i; int Sub(int i) return number-=i; int Mul(int i) return number*=i; ) int Div(int
2、 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); ; void main() CMyClass myo
3、bj; cout int sum(int n) void main() cout #include class CStudentID *1*定义私有 数据成员 public: *2*定义默认 构造函数 IDvalue=id; cout*funci)(j); 【试题解析】 (1)在类中定义函数指针须指定类名及指针定义运算符水,因此第 1个标识下函数指针正确的定义为 “typedefint(CMyClass: *FUNC)(int); ”。 (2)函数指针数组本身是数组类型,因此在定义时如果没有初始化,就必须指定数组大小,在本题中因为指针数组包 含的指针变量需要指向四种算数运算,因此定义指针数组大
4、小为 4,即第 2个标识下应改为 “FUNC func4; ”。 (3)func是指针数组,因此访问的时候需要有指针运算符 “*”,第 3个标识下应改成“return(this-*funci)(j); ”。 二、简单应用题 2 【正确答案】 int all=0; for(int i=2; in; i+) if(n i=0) all+=i; return all; 【试题解析】 (1)数 n的因子是指为整除 n等 于 0的所有自然数的集合。 (2)为了实现计算所有 n的因子之和且不包含 1和自身,函数中定义一个变量 all用来保存求和结果,并为最终结果在函数结束时返回; (3)在循环中逐个寻找
5、n的因子,为了在计算中排除掉 1和 n本身,因此循环变量 i的变化范围为从 2到 n 1。 (4)如果 n i=0,说明 i是 n的因子,因此将 i加到 all上。 三、综合应用题 3 【正确答案】 (1)添加语句: long IDvalue; (2)添加语句: CStudentID(long id=0) (3)添加语句: CStudentID() (4)添加语句: CStudentInfo (char stName= “no name“, long stID=0): id(StID) 【试题解析】 (1)第 1个标识下完成 CStudentlD类的私有数据成员 IDvalue的定义,为 lo
6、ng型的数据,因此第 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)”。