1、国家二级 C+机试(操作题)模拟试卷 353及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为: OK 注意:错误的语句在*error*的下面,修改该语句即可。 #include Class CBase public: CBase() a=b=0; prirate: int a,b; ;class CDerirel:public CBase public: CDerivel() *error* virtual v
2、oid func(); ; class CDerive2:publiC CDerivel public: CDerive2() a=0; b=0; void func() *error* cout“OK”funC(); (分数:2.00)_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,完成空出部分程序。函数 fun(char*s,char*s1,char*s2)中形参字符串 s1和 s2有相同的字符个数,且 s1中各字符互不相同。该函数实现将已知字符串 s中所有在字符串 s1中也存在的字符,都用字符串 s2中
3、的对应位置的字符代替。 例如:设字符串 s、s1 和 s2分别为: s=“ABCABC”, s1=“AC”, s2=“ZX” 则 s2中的字符 z和 X分别对应 s1中的字符 C和 A,函数调用 fun(s,s1,s2)将字符串 s的内容变为“ZBXZBX”。注意:不能修改程序的其他部分,只能修改 fun()函数。 #include void fun(char*s,char*s1,char *s2) void main() char s=“ABCABC”; fun(s,“AC”,“ZX”); std:couts_三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程
4、序文件 modi3cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)完成类 MyArrayClass的构造函数,申请数组的大小,请在注释*1*后添加适当的语句。 (2)完成类 MyArrayClass的析构函数,释放数组,请在注释*2*后添加适当的语句。 (3)完成重载运算符“”,用来获得指定下标的数据,请在注释*3*后添加适当的语句。 (4)完成函数 SetElement(),用来设置指定下标的数据。如果数据没有超出范围,则设置数据,并返回 1,否则返回 0,请在注释*4*后添加适当的语句。 注意:除在指定的位置添加语句外,并不要更改程序中的其他语句
5、。 #include template class MyArrayClass private: T*data; int length; public: MyArrayClass(int len) length=len; *1* 一 MyArrayClas S() *2* Toperator(int i) *3* bool SetElement(int i,T t) *4* if() datai=t; return true; return false; ; int msin() MyArrayclas sobj(5); obj3=1; cout_国家二级 C+机试(操作题)模拟试卷 353答案
6、解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modi1cpp,该程序运行时有错误,请改正其中的错误,使程序正确运行。并且使程序输出的结果为: OK 注意:错误的语句在*error*的下面,修改该语句即可。 #include Class CBase public: CBase() a=b=0; prirate: int a,b; ;class CDerirel:public CBase public: CDerivel() *error* virtual void func(); ; class CDeri
7、ve2:publiC CDerivel public: CDerive2() a=0; b=0; void func() *error* cout“OK”funC(); (分数:2.00)_正确答案:(正确答案:(1)virtual Void func()=0; (2)cout“OK”解析:解析:程序中定义了类 CBase、CDerive1 和 CDerive2,类 CDerive1公有派生于类CBase,CDerive2 公有派生于类 CDerive1,在类 CDerive1中定义了虚函数 func0,但是没有给出具体实现,派生类 CDerive2中给出了 func0函数的具体实现,因此 C
8、Derive1类中的 func0函数是纯虚函数。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,完成空出部分程序。函数 fun(char*s,char*s1,char*s2)中形参字符串 s1和 s2有相同的字符个数,且 s1中各字符互不相同。该函数实现将已知字符串 s中所有在字符串 s1中也存在的字符,都用字符串 s2中的对应位置的字符代替。 例如:设字符串 s、s1 和 s2分别为: s=“ABCABC”, s1=“AC”, s2=“ZX” 则 s2中的字符 z和 X分别对应 s1中的字符 C和 A,函数调
9、用 fun(s,s1,s2)将字符串 s的内容变为“ZBXZBX”。注意:不能修改程序的其他部分,只能修改 fun()函数。 #include void fun(char*s,char*s1,char *s2) void main() char s=“ABCABC”; fun(s,“AC”,“ZX”); std:couts_正确答案:(正确答案:char *p,*q; for(;*s;s+) 在串 s中找符合条件的字符,然后替换 for(p=s1,q=s2 ;*p ; p+,q+) 让指针 p,q 分别指向 s 1和 s 2 if(*p=*s) 如果 s中存在 s l中 p指向的字符 *s=*
10、q; 那么用 q指向的 s2中的字符替换 )解析:解析:(1)该程序功能是将己知字符串 s中所有在字符串 s1中也存在的字符,都用字符串 s2中的对应位置的字符代替。它的解题思路,首先是找到符合替换条件的字符,然后进行替换。 (2)从己给部分源程序的 main主函数开始入手,核心函数 void fun(char*s,char*s1,char*s2)中的 s1,s2 参数为要替换的字符串,s 为要被替换的字符串。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:
11、(1)完成类 MyArrayClass的构造函数,申请数组的大小,请在注释*1*后添加适当的语句。 (2)完成类 MyArrayClass的析构函数,释放数组,请在注释*2*后添加适当的语句。 (3)完成重载运算符“”,用来获得指定下标的数据,请在注释*3*后添加适当的语句。 (4)完成函数 SetElement(),用来设置指定下标的数据。如果数据没有超出范围,则设置数据,并返回 1,否则返回 0,请在注释*4*后添加适当的语句。 注意:除在指定的位置添加语句外,并不要更改程序中的其他语句。 #include template class MyArrayClass private: T*da
12、ta; int length; public: MyArrayClass(int len) length=len; *1* 一 MyArrayClas S() *2* Toperator(int i) *3* bool SetElement(int i,T t) *4* if() datai=t; return true; return false; ; int msin() MyArrayclas sobj(5); obj3=1; cout_正确答案:(正确答案:(1)添加语句:data=new Tlen; (2)添加语句:deletedata; (3)添加语句:return data i; (4)将“i f()”补充完整为:i f(ilength)解析:解析:程序中定义了类模板 MyArrayClass,含有成员变量 length和 data指针,构造函数、析构函数、重载运算符“”和 SetElement()函数。构造函数中申请内存空间给 data指针,析构函数中释放内存资源,重载运算符“”用来获得指定下标的数据,SetElement()用来设置指定下标的数据。