1、国家二级( C+)机试模拟试卷 34及答案与解析 一、程序改错题( 30分) 0 使用 VC6打开考生文件夹下的工程 RevProj15。此工程包含一个源程序文件RevMain15.cpp,但该程序中类的定义有错误。请改正程序中的错误,使它能得到正确结果。 注意,不要改动主函数,不得删行或增行,也不得更改程序的结构。 源程序文件 RevMain15.cpp中的程序清单如下: /RevMain15.cpp #include iostream using namespace std; class Sample private: int x; static int y; public: Sample
2、(int a) x=a; y+=x; static void print(Sample s) cout “x=“ x “, y=“ y end1; Sample: y=5; int main() Sampel s1(10); Sample s2(15); Sample: print(s1); Sample: print(s2); return 0; 二、简单应用题( 40分) 1 请编写一个函数 char*change(char instr),将输入字符串中的所有小写字母转换为大写字母输出。要求使用 for循环实现。如输入 jinfeiteng,则输出结果是JINFEITENG。 注意:部分
3、源程序已存在文件 test21_2.cpp中。 请勿修改主函数 main和其他函数中的任何内容,仅在函数 change的花括号中填写若干语句。 文件 test21_2.cpp的内容如下: char*change(char instr); #include“iostream.h“ void main() char instr50; char *outstr; cout “Input a string:“ endl; cin instr; outstr=change(instr); cout “Over graded string:“ endl; cout outstr endl; char*ch
4、ange(char instr) 三、综合应用题( 30分) 1 使用 VC6打开考生文件夹下的工程 MyProj14。此工程包含一个源程序文件MyMain14.cpp,程序中定义了 3个类 A、 B和 C,但类的定义并不完整。 请按要求完成下列操作,将类的定义补充完成: 类 A的成员函数 set x(int i,int j)是虚函数,其实现的功能是将类 A的保护成员x和 y分别设置成 i和 j并且 y具有默认值 0。请在注释 “/* *1* * ”之后添加适当的语句。 将类 A的成员函数 print()声明成员纯虚函数。请在注释 “/* *2* *”之后添加适当的语句。 完成类 A的保护数据
5、成员 x和 y的定义,它们都是整型变量。请在注释 “/* *3* *”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 MyMain14.cpp清单如下: /MyMain14. cpp #include iostream using namespace std; class A public: /* * * 1 * * * /* * * 2 * * * protected: /* * * 3 * * * ; class B : public A public: void print () cout x * x “ , “; ; class C :
6、public A public: void print () cout x* x * x end1; ; int main () A *pa; B b; C c; pa= pa- setx (5); pa- print (); pa= pa- setx (2); pa- print (); return 0; 国家二级( C+)机试模拟试卷 34答案与解析 一、程序改错题( 30分) 二、简单应用题( 40分) 1 【正确答案】 char *change(char instr) char *outstr=new char50; const char delta=A-a; int i; for(i=0;instri!=0; i+) if(instri =a & instri =z) outstri=instri+delta; else outstri=instri; outstri=0; return outstr; 【试题解析】 本题考查的是考生使用 for循环和一维数组的综合水平。对于大小写的 ASCII码的差值可以通过 delta=A-a运算得到,注意在字符串的结尾加入结束标志符 0。 三、综合应用题( 30分)