1、国家二级( C+)机试模拟试卷 35及答案与解析 一、程序改错题( 30分) 1 使用 VC6打开考生文件夹下的工程 test21_1,此工程包含一个源程序文件test21_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下: The grade is 3 源程序文件 test21_1.cpp清单如下: #include iostream.h class student private: int grade; public: /* found*/ student(int thegra):(thegra) student() int get_grade()return gr
2、ade; ; void main() int thegra=3; /* found*/ student point=new student(thegra); /* found*/ cout “The grade is“ point.get_grade() endl; delete point; 二、简单应用题( 40分) 2 请编写函数 fun(),对长度为 7个字符的字符串,除 首、尾字符外,将其余 5个字符按 ASCII码值降序排列。 例如:原来的字符串为 CEAedca,则排序后输出为 CedcEAa。 注意:部分源程序已存在文件 test22_2.cpp中。 请勿改动主函数 main和
3、其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 文件 test22_2.cpp的内容如下: #include iostream.h #include stdio.h #include ctype.h #include conio.h void int fun(char *s, int num) void main ( ) char s10; printf (“输入 7个字符的字符串: “); gets(s); fun(s,7); cout s; 三、综合应用题( 30分) 2 使用 VC6打开考生文件夹下的工程 MyProj15。此工程包含一个源程序文件MyMain15
4、.cpp。程序中定义了 3个类 A、 B和 C,但类的定义并不完整。 请按要求完成下列操作,将类的定义补充完成: 类 Inherit是类 Base的公有派生类。请在注释 “/* *1* *”之后添加适当的语句。 完成类 Inherit成员函数 setvalue(int a,int b,int c,int d)的定义,此函数实现的功能是将基类成员 x、 y、 z和派生类的数据成员 m的值分别设置成 a、 b、 c和 d。请在注释 “/* *2* *”之后添加适当的语句。 完成类 Inherit成员函数 display()的类体外定义,此函数实现的功能是以 “,”的格式将 x、 y、 z和 m的值
5、输出到屏幕上。请在注释 “/* *3* *”之后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 MyMain15.cpp清单如下: /Mymain15.cpp #include iostream using namespace std; class Base private: int x; protected: int y; public: int z; void setx(int i) x=i; int getx()const return x; ; /* * *1* * * private: int m; public: void setvalu
6、e(int a, int b, int c, int d) /* * *2* * * void display()const; ; /* * *3* * * int main() Inherit A; A setvalue(1, 2, 3, 4); A display(); return 0; 国家二级( C+)机试模拟试卷 35答案与解析 一、程序改错题( 30分) 1 【正确答案】 (1)错误 :student(int thegra):(thegra) 正确 :student(int thegra):grade(thegra) (2)错误 :student point=new studen
7、t(thegra) 正确 :student*point=new student(thegra); (3)错误 :cout “The grade is“ point.get_grade() endl; 正确 :cout “The grade is“ point- get_grade() endl; 【试题解析】 (1)主要考查考生对于构造函数使用参数列表初始化数据成员的掌握,可以使用参数列表的形式,也可以在函数内部实现,不过参数赋值的双方都必须出现,本题的错误就在于并没有把参数赋值给数据成员; (2)主要考查考生对于使用指针申请动态空间的方法的理解, new运算符申请的空间返回值为指针类型,指针
8、类型的定义是在变量名前加上 “*”; (3)主要考查考生对于对象指针调用成员函数方法的掌握,必须使用符号 “- ”,而对象本身使用符号 “.”。 二、简单应用题( 40分) 2 【正确答案】 int fun(char*s,int num) char t; int i, j; for(i=1; i num-2; i+) for(j=i+1; j num-1; j+) if(si sj) t=si; si=sj; sj=t; 【试题解析】 本题 考查利用循环来控制数组元素的操作,首尾元素除外,因此,数组的下标值要从 1开始,用循环变量 i来依次取得数组中的元素,用数组中的元素 si和 sj进行比较,如果后一个元素的 ASCII码值大于前一个元素的 ASCII码值,则交换这两个数组元素的值。 三、综合应用题( 30分)