1、二级 C+机试-94 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test14_1,此工程包含一个源程序文件 test14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:member1=5 member2=5member1=7 member2=9源程序文件 test14_1.cpp 清单如下:#includeiostream.hclass My Class/* found *friend void setMember(MyClass myObj,char meml)my
2、Obj.member1=mem1;myObj.member2=mem1;cout“member1=“myObi.member1“ member2=“myObj.member2endl;/* found */void setMember(MyClass& myObj,char mem1,char mem2)myObj.member1=mem1;myObj.member2=mem2;cout“member1:“myObj.member1“member2=“myObj.member2endl;private:char member1;char member2;void main()MyClass t
3、heObj;/* found */theObj.setMember(theObj,5);theObj.setMember(theObj,7,9);(分数:33.00)_二、2简单应用题(总题数:1,分数:33.00)2.请编写一个函数 void swap(int *x,int*y),用来交换两个数的值。注意:部分源程序已存在文件 test14_2.cpp 中。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 swap 的花括号中填写若干语句。文件 test14_2.cpp 的内容如下:#includeiostream.hvoid swap(int *x,int*y);void mai
4、n()int a=1,b=3;swap(&a,&b);cout“a=“a“ “b=“bendl;void swap(int *x,int *y)(分数:33.00)_三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 test14_3,此工程包含一个 test14_3.cpp,其中定义了类 File,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)完成构造函数的定义,使数据成员 filename,content 指向为空。请在注释“/*1*”之后添加适当的语句;(2)完成函数 set_contents 的定义,该函数为 content 申请
5、新的空间来存储 new_content 的内容,成功返回 true,失败返回 false。请在注释“/*2*”之后添加适当的语句;(3)完成成员函数 copy(File &source,File &target)的定义,该函数实现将 source 的内容拷贝至target 的功能,注意必须使用已经定义的成员函数来实现。请在注释“/*3*”之后添加适当的语句:(4)完成析构函数的定义,要求释放 content 指向的空间。请在注释“/*4*”之后添加适当的语句。输出结果如下:file2:file1 contentsfile2:file2 contents注意:除在指定的位置添加语句外,请不要改动
6、程序中的其他语句。源程序文件 testl4_3cpp 清单如下:#includeiostream.h#includestring.hclass Fileprivate:char file_name64;char*contents;public:File(char*filename)/ * 1 *;File:File()/ * 4 *void printfile()coutfile_name“:“contentsendl;)friend bool copy(File & source,File & target);bool set_contents(char * new_contents);bo
7、ol File:set_contents(char*new_contents)/ * 2 *if(contents=NULL)return false;strcpy(contents,new_contents);return true;bool copy(File &source,File &target)/ * 3 *void main)File f1(“filel“),f2(“file2“);f1.set_contents(“filel contents“);copy(f1,f2);f2.printfile();f2.set_contents(“file2 contents,);f2.pr
8、intfile();(分数:34.00)_二级 C+机试-94 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:33.00)1.使用 VC6 打开考生文件夹下的工程 test14_1,此工程包含一个源程序文件 test14_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:member1=5 member2=5member1=7 member2=9源程序文件 test14_1.cpp 清单如下:#includeiostream.hclass My Class/* found *friend void setMember(MyClas
9、s myObj,char meml)myObj.member1=mem1;myObj.member2=mem1;cout“member1=“myObi.member1“ member2=“myObj.member2endl;/* found */void setMember(MyClass& myObj,char mem1,char mem2)myObj.member1=mem1;myObj.member2=mem2;cout“member1:“myObj.member1“member2=“myObj.member2endl;private:char member1;char member2;
10、void main()MyClass theObj;/* found */theObj.setMember(theObj,5);theObj.setMember(theObj,7,9);(分数:33.00)_正确答案:(1)错误:friend void setMember(MyClass myObj,char mem1)正确:friend void set Member(MyClass& myObj,char mem1)(2)错误:void setMember(MyClass & myObj,char mem1,char mem2)正确:friend void setMembe (MyClas
11、s& myObj,char mem1,char mem2)(3)错误:theObj.setMember(theObj,5);theObj.setMember(theObj,7,9);正确:setMember(theOebj,5);setMember(theObj,7,9);)解析:解析(1)主要考查考生对于友元函数定义的掌握,应该使用引用调用才能改变该对象的成员值;(2)主要考查考生对于友元函数重载的掌握,因为前面已经有了同名函数,很明显这个函数也应该为友元函数,所以关键字 friend 声明;(3)主要考查考生是否会使用友元函数,调用友元函数和普通函数的方法一样,不需要使用对象访问。二、2简
12、单应用题(总题数:1,分数:33.00)2.请编写一个函数 void swap(int *x,int*y),用来交换两个数的值。注意:部分源程序已存在文件 test14_2.cpp 中。请勿修改主函数 main 和其他函数中的任何内容,仅在函数 swap 的花括号中填写若干语句。文件 test14_2.cpp 的内容如下:#includeiostream.hvoid swap(int *x,int*y);void main()int a=1,b=3;swap(&a,&b);cout“a=“a“ “b=“bendl;void swap(int *x,int *y)(分数:33.00)_正确答案:
13、(void swap(int *x,int *y)int temp;temp=*x;*x=*y;*y=temp;)解析:解析本题考查的是考生利用基本控制语句解决实际问题的能力。swap 函数可以交换两个数的值。利用指针来交换变量的值是必须掌握的。三、3综合应用题(总题数:1,分数:34.00)3.使用 VC6 打开考生文件夹下的工程 test14_3,此工程包含一个 test14_3.cpp,其中定义了类 File,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)完成构造函数的定义,使数据成员 filename,content 指向为空。请在注释“/*1*”之后添加适当的语句;
14、(2)完成函数 set_contents 的定义,该函数为 content 申请新的空间来存储 new_content 的内容,成功返回 true,失败返回 false。请在注释“/*2*”之后添加适当的语句;(3)完成成员函数 copy(File &source,File &target)的定义,该函数实现将 source 的内容拷贝至target 的功能,注意必须使用已经定义的成员函数来实现。请在注释“/*3*”之后添加适当的语句:(4)完成析构函数的定义,要求释放 content 指向的空间。请在注释“/*4*”之后添加适当的语句。输出结果如下:file2:file1 contentsf
15、ile2:file2 contents注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。源程序文件 testl4_3cpp 清单如下:#includeiostream.h#includestring.hclass Fileprivate:char file_name64;char*contents;public:File(char*filename)/ * 1 *;File:File()/ * 4 *void printfile()coutfile_name“:“contentsendl;)friend bool copy(File & source,File & target);b
16、ool set_contents(char * new_contents);bool File:set_contents(char*new_contents)/ * 2 *if(contents=NULL)return false;strcpy(contents,new_contents);return true;bool copy(File &source,File &target)/ * 3 *void main)File f1(“filel“),f2(“file2“);f1.set_contents(“filel contents“);copy(f1,f2);f2.printfile()
17、;f2.set_contents(“file2 contents,);f2.printfile();(分数:34.00)_正确答案:(1)strcpy(file_name,filename);contents=NULL;(2)contents=new char(strlen(new_contents)+1);(3)return target.set_contents(source.contents);(4)deletecontents;)解析:解析主要考查点为类的构造函数的定义、字符串函数的使用及动态空间的申请与释放等,注意字符串函数的使用,其中 strlen 返回字符串含有字符的数目,strcpy 是将参数 2 的字符串赋值给参数 1 的字符串。