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