1、国家二级( C+)机试模拟试卷 37及答案与解析 一、程序改错题( 30分) 1 使用 VC6打开考生文件夹下的工程 test23_1,此工程包含一个源程序文件test23_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下 : i iz O 12 22 源程序文件 test23_1.cpp清单如下: #include iostream.h #include stdio.h class innerclass int x; public: /*found*/ innerclass(int z) x=z; cout “iz“ endl; /*found*/ void writ
2、e( ) print(“%dn“,x); class outerclass int y; innerclass g; innerclass *h; public: outerclass(int a); void write( ) printf(“%dn“,y); void write_inner_g() g.write(); void write_inner_h() h- write(); ; outerclass:outerclass(int a) /*found*/ h=new innerclass(12); cout “o“ endl; int main ( ) outerclass o
3、b(22); ob.write_inner_h(); ob.write(); return 1; 二、简单应用题( 40分) 2 请编写类的成员函数 char Buff=new charLength; CharArray () delete Buff; int GetLength () return Length; char private: int Length; char *Buff; ; char CharArray string1(6); char *string2=“string“; for(cnt=0; cnt 8; cnt+) string1cnt = string2cnt; c
4、out “n“; for(cnt=0; cnt 8; cnt+) cout string1cnt; cout “n“; cout string1.GetLength() endl; 三、综合应用题( 30分) 3 使用 VC6打开考生文件夹下的工程 test22_3,此工程包含一个源程序文件test22_3.cpp,其中定义了用于表示考生的类 CStudent和它的派生类CGraduateStudent,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。 (1)定义 CStudent的构造函数,函数含参数 nm,它是 char型的指针数据,请使用字符串函数将类数据成员 name初始化
5、。请在注释 “/*1*”之后添加适当的语句。 (2)完成类 CStudent的成员函数 void addscore(double sc)的定义,将类数据成员score加上参数 sc,请在注释 “/*2*”之后添加适当的语句。 (3)添加类 CGraduateStudent的成员函数 void addpaper(int d)的定义,将 int型的参数 d的值加到类的数据成员 paper上,请在注释 “/*3*”之后添加适当的语句。 (4)调用对象 sdt的成员函数 addpaper使得该考生的论文数量变为 10,将请在注释“/*4*”之后添加适当的语句。 输出结果如下: Student Hans
6、on (Advisor:MichaelPhong) Total paper is 10 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 源程序文件 test22_3.cpp清单如下: #include iostream.h #include string.h class CStudent private: char name30; int code; double score; public: CStudent(char* nm) /*1* CStudent() void putname(char* nm) strcpy(name,nm); void putcode(int d)
7、code=d; void putscore(double sc)score=sc; void getname(char* nm)strcpy(nm, name); double getcode()return code; ) double getscore()return score; void addscore(double sc) /*2* ; class CGraduateStudent:public CStudent private: char advisor30; int paper; public: void putadvisor(char*nm) strcpy(advisor,
8、nm); void getadvisor(char*nm) strcpy(nm, advisor); void putpaper(int d) paper=d; /*3* int getpaper() return paper; ; void main() CGraduateStudent sdt; sdt.putname(“Hanson“); sdt.putadvisor(“MichaelPhong“); sdt.putpaper(8); /*4* char csname30; sdt.getname(csname); char caname30; sdt.getadvisor(caname
9、); cout “Student“ csname endl; cout “(Advisor:“ caname “)“ endl; cout “Total paper is“ sdt.getpaper() endl; 国家二级( C+)机试模拟试卷 37答案与解析 一、程序改错题( 30分) 1 【正确答案】 (1)错误:缺少缺省的构造函数 正确: innerclass()cout “i“ endl; (2)错误: void write()print(“%dn“,x); 正确: void write()printf(“%dn“,x); (3)错误:缺少赋值语句 正确: y=a; 【试题解析】 (
10、1)主要考查考生对于派生类调用基类构造函数的应用,此处必须定义缺省的构造函数 (g调用 ); (2)主要考查考生对于格式化输出的掌握,应该使用函数 printf,其中的 %d表示 是输出整型: (3)主要考查考生对于构造函数作用的掌握,只有在此处赋值才能将 22显示出来,因为构造函数在声明对象的时候会被自动的调用。 二、简单应用题( 40分) 2 【正确答案】 char & CharArray:operator (int i) static char ch=0; if(i Length & i =0) return Buffi; else cout “nIndex out Of range.“; return ch; 【试题解析】 本题主要考查考生对于运算符重载的掌握,重载下标运算是安全数组中非常重要的。注意下标操作符最终的目的是返回该下标对应的字符。 三、综合应用题( 30分) 3 【正确答案】 (1) strcpy(name,nm); (2) score+=sc; (3) void addpaper(int d)paper+=d; (4) sdt.addpaper(2); 【试题解析】 本题主要考查考生对于类的定义和使用对象调用成员函数的理解,注意认真的阅读主程序,弄清楚 (4)中 paper的原值为 8。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1