1、国家二级( C+)机试模拟试卷 53及答案与解析 一、程序改错题( 30分) 1 使用 VC6打开考生文件夹下的工程 test39_1,此工程包含一个源程序文件test39_1.cpp,但该程序运行有问题,请改正函数中的错误,使该程序的输出结果为; This is static a: 1 This is non-static b: 1 This is static a: 2 This is non-static b: 2 This is static a: 2 This is non-static b: 1 Press any key to continue 源程序文件 test39_1.cp
2、p清单如下; #include iostream.h class shared static int a; int b; public: /* found */ void set(int i=0, int j) a=i; b=j; void show(); ; /* found */ void shared:show() cout “This is static a: “ a; cout “nThis is non-static b: “ b; /* found */ cout “n“; void main () shared x, y; x.set (1, 1); x.show ( ); y
3、.set (2, 2); y.show ( ); x.show ( ); 二、简单应用题( 40分) 2 请编写一个函数 printdate(int year,int month,int day),该函数实现将输入的 3个数字转换成英语数字纪年输出的功能,如输入 March9,1978,则输出 1978 3 9。注意:使用 switch结构实现该函数的基本功能并应该能够判断错误的输入。部分源程序已存在文件 test40_2.cpp中。请勿修改主函数 main和其他函数中的任何内容,仅在函数 printdate的花括号中填写若干语句。 源程序文件 rest40_2.cpp清单如下: #inclu
4、de iostream.h void printdate(int year, int month, int day) void main() printdate(1978,3,9); 三、综合应用题( 30分) 3 使用 VC6打开考生文件夹下的工程 test38_3。此工程包含一 个 test38_3.cpp,其中定义了类 complex,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)添加类 complex的无参数的构造函数的定义,将私有成员 real和 imag都初始化为 0。请在注释 “/*1*”之后添加适当的语句。 (2)添加类 complex的带两个参数的重载构造
5、函数,两个参数 r和 i都是 double类型,要求将 r赋值给私有成员 real, i赋值给私有成员 imag,同时允许调用时参数i可是省略,请在注释 “/*2*”之后添加适当的语句。 (3)完 成类 complex重载加法函数的定义,该函数直接返回一个类 complex的对象,同时把参数对象 c的实部 real和虚部 imag分别与当前对象对应部分分别相加,请在注释 “/*3*”之后添加适当的语句。 (4)完成类 complex的友元函数 print的定义,使其以格式 “real+imagi”输出,请在注释 “/*4*”之后添加适当的语句。 源程序文件 test38_3.cpp清单如下;
6、#include iostream.h class complex public: / * 1 * / * 2 * real=r;imag=i; complex operator+(complex friend void print(complex private: double real,imag; ; complex complex:operator+(complex void main( ) complex c1(2.0,3.0),c2(4.0,-2.0),c3; c3=c1+c2; print(c3); c3=c3+complex(3.5); print(c3); 国家二级( C+)机
7、试模拟试卷 53答案与解析 一 、程序改错题( 30分) 1 【正确答案】 (1) 错误: void set(int i=0, int j)a=i; b=j; 正确: void set(int i, int j)a=i; b=j; (2) 错误:缺少对静态成员的初始化 正确: int shared:a; (3) 错误: cout “n“; 正确: cout “n“: 【试题解析】 (1)主要考查考生对于类的参数初始化的理解,类的成员函数的参数在函数声明中不能进行初始化,只能在函数体内部进行,这是 C+的规定: (2)主要考查考生是否掌握了静态成员的定义,静态成员是该类共有的数据成员,所有该类的
8、对象共同拥有,它必须在类的内部声明,类的外部进行初始化之后才能使用; (3)主要考查考生对于输出流语句的掌握, “ ”运算符是 C+的 iostream类重载的输出符号,而 “ ”运算符是 C+的 iostream类重载的输入符号。 二、简单应用题( 40分) 2 【正确答案】 void printdate(int year, int month, int day) if(year 0|month 1|month 12|day 1|day 31) cout “ERROR“; return; switch(month) case 1:cout “January“;break; case 2:co
9、ut “February“;break; case 3:cout “March“;break; case 4:eout “April“;break; case 5:cout “May“;break; case 6:cout “June“;break; case 7:cout “July“;break; case 8:cout “Auguest“;break; case 9:cout “September“;break; case 10:cout “October“;break; case 11:cout “November“;break; case 12:cout “December“;bre
10、ak; cout “ “ day “,“ year endl; 【试题解析】 本题考查的是考生对 switch结构的应用。 switch分支结构也是常用的选择结构,对于每个 case结构,只有遇到 break才会中止并且跳出 switch结构,否则会一直执行到下一个 break或者 switch的结尾,而对于参数的预处理应该是程序健壮性的基本要求。 三、综合应用题( 30分) 3 【正确答案】 (1) complex( ) real=imag=0; (2) complex(double r, double i=0) (3) return complex(real+c.real,imag+c.imag); (4) void print(complex &c) 【试题解析】 主要考查考生对于类的构造函数重载、缺省参数的设置、运算符的重载和友元函数的定义的掌握,其中 (2)使用了参数赋初值的方式使得带两个参数的构造函数可以省略后一个参数,这是一种重要的方法, (3)直接返回类的一个使用带两个参数的构造函数生成的临时对象 ,这是把运算符重载为类的成员函数时经常使用的方式, (4)友元函数应该在类内声明,类外定义调用时和普通函数 样,这 点要切记。