1、国家二级 C+机试(操作题)模拟试卷 266及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 cpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: 1 5 1 注意:错误的语句在 *error*的下面,修改该语句即可。 #include iostream h *error* enum Sun, Mon, Tue, Wed, Thu, Fri, Sat, *error* MyEnum; struct Struct *error* int Fri, int Sun; ; void main() int i=Mon; MyEnum t=Fri;
2、Struct str1; str1 Fri=Mon; cout i endl; cout t endl; cout str1 Fri endl; 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。阅读下列函数说明和代码,完成空出部分程序。函数 factor(int*des, int&length, int n)实现的功能是:将n所有因数存放到 des中,通过 length引用返回因数的个数,比如 fator(a, length,20)执行后,则 a=1, 2, 4, 5, 10, 20, length=6。 注意:只能补充函数 factor(),请勿改动其他部分
3、的内容。 #include 10Stream h #define MAXNLEN100 void factor(int*des, int&length, int n) void main() int aMAXNLEN, length; int n=20; factor(a, length, n); for(inti=0; i length; i+) cout ai “ “; cout endl; return; 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)定义类的私有变量
4、a、 b,请在注释 *1*后添加适当的语句。 (2)完成类的构造函数,对变量 a、 b赋值 ,缺省两个变量值为 1,在注释*2*之后添加语句。 (3)完成打印函数 display(),打印出 “a*b=c”格式的 一个乘法算式,在注释 *3*之后添加语句。 (4)补充主函数,使得打印 99的乘法口诀。在注释 *4*后添加语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include iostream h class CMyFormula private: *1* public: *2* this- a=a; this- b=b; void set(int x, int
5、y) a=x; b=y; void display() *3* ; int main() CMyFormula formular(1, 1); for(inti=1; i =9; i+) *4* for(int j=1; j+) formular set(j, i); formular dispiay(); cout “ “; cout endl; return0; 国家二级 C+机试(操作题)模拟试卷 266答案与解析 一、基本操作题 1 【正确答案】 (1)enum MyEnum (2); (3)int Fri; 【试题解析】 (1)第一标识下声明枚举类型,声明枚举类型的一般形式为: “e
6、num枚举类型名 枚举常量列表 ; ”,程序当中把枚举类型名 MyEnum放到枚举声明后面,显然不符合枚举类型声 明格式,因此第 1个标识下应改成 “enum MyEnum”。 (2)由 (1)的分析可知,第 2个标识下也不符合枚举类型声明格式,应以 “; ”结束,即第 2个标识下应改为 “; ”。 (3)第 3标识处声明结构体,结构体定义的一般形式为: struct结构体名 成员列表 变量名列表; 结构体中成员列表中各个元素是不同的变量,变量之间应以分号隔开,而不是以逗号隔开,因此第 3个标识下应改为为 “int Fri; ”。 二、简单应用题 2 【正确答案】 length=0; for(
7、int i=1; i =n; i+) if(n i=0)判断是否 n的因数 deslength=i; length+; 【试题解析】 (1)找到 n的每一个因数可采用循环方法,循环变量从 1开始到 n,逐个取 n和循环变量的余数。 (2)如果余数为 0说明是 n的因数,添加到 des中,参数 length是采用的引用传递方式,形参的改变会影响实参,因此可直接将 length的值加 1表示 des中元素个数加 1。 三、综合应用题 3 【正确答案】 (1)添加语句: int a, b; (2)添加语句: CMyFormula(int a=1, int b=1) (3)添加语句: cout a *
8、 b = a*b; (4)将 “for(int j=1; j+)”补充完整为: for(int j=1; j =i; j+) 【试题解析】 (1)第 1个标识下完成 CMyFormula类的私有变量 a、 b的定义,从函数 set(int x, int y)的参数类型可以看出 a和 b均为 int型变量,故第 1个标识下应添加 “int a, b; ”。 (2)第 2个标识下添加构造函数声明,完成对变量 a、 b赋值,该构造有两个参数 a和 b,且 a和 b缺省值为 1,因此第 2个标识下应添加 “CMyFormula(int a=1, int b=1)”。 (3)。打印函数 display()在屏幕上打印出 “a*b=c”格式的一个乘法算式,因此第 3个标识下应添加 “cout a * b = a*b; ”。 (4)观察可知第 4个标识下的 for循环是死循环, J没有判断退出条件,会一直循环下去得不到想到的 99的口诀表,外层循环变量 i从 1开始变化至 9,循环 9次,内部循环变量 j应该从 1变化到 i,输出一行, j =i,这样保证输出的是倒 99口诀,因此第 4个标识下应改为 “for(int j=1; j =i j+)”。