1、二级 C+机试-139 及答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使得程序正确运行。程序输出:s1:n=20s2:n=10执行 s3.add(s1,s2)s3:n=30s4:n=30注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.hclass TCint n;public:TC()TC(int m)n=m;/*error*TC add(T
2、C s1,s2)thisn=s1.n+s2.n;/*error*return(this);void disp()cout“n=“nend1;/*error*void main()TC s1(20),s2(10),s3,s4;cout“s1:“;s1.disp();cout“s2:“;s2.disp();s4=s3.add(s1,s2);cout“执行 s3.add(s1,s2)/ns3:“;s3.disp();cout“s4:“;s4.disp();(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件
3、夹下的源程序文件 2.cpp。完成 fun 函数,使其功能为将两个按小到大排序的数组 a 和 b,复制合并成一个有序整数序列 c,其中形参 n 和 m 分别是数组 a 和 b 的元素个数。注意:不能修改程序的其他部分,只能修改 fun 函数。试题程序:#includeiostream.hvoid fun(int a,int n,int b,int m,int *c)void main()int A=3,5,7,9,11,18,21;int s=6,15,19,21,39;int C25,i;for(i=0;i25;i+)Ci=0;cout“A=“;for(i=0;i7;i+)coutAi,;c
4、outend1;cout“B=“;for(i=0;i5;i+)coutBi,;coutend1;fun(A,7,B,5,C);cout“C=“;for(i=0;i12;i+)coutCi,;coutend1;return;(分数:40.00)_三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。(1)将文件以追加的方式打开。请在注释 1 后添加适当的语句。(2)定义 m、n 为类 TC 的公有 int 型数据成员。请在注释 2 后添加适当的语句。(3)定义 p 为类 TC 的数
5、据成员指针,并指向类 TC 的数据成员 m。请在注释 3 后添加适当的语句。(4)定义 p 指向类 TC 的数据成员 n。请在注释 4 后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#includeiostream.h#includefstream#includeiomanip#includecmathusing namespace std;void WriteFile(int x)ofstream out1;/*1*out1.open(“3.txt“,);out1x;out1.close();void ClearFile()ofstre
6、am out1;out1.open(“3.txt“);out1.close();class TCpublic:void disp()cout“m=“mend1;WriteFile(m);cout“n=“nend1;WriteFile(n);/*2*;void main()/*3*ClearFile();TC a;a. *p=30;/*4*a. *p=45;a.disp();(分数:30.00)填空项 1:_填空项 1:_填空项 1:_填空项 1:_二级 C+机试-139 答案解析(总分:100.00,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)使用 VC+6.0 打开考生
7、文件夹下的源程序文件 1.cpp,该程序运行时有错误,请改正其中的错误,使得程序正确运行。程序输出:s1:n=20s2:n=10执行 s3.add(s1,s2)s3:n=30s4:n=30注意:不要改动 main 函数,不能增加或删除行,也不能更改程序的结构,错误的语句在/*error*的下面。试题程序:#includeiostream.hclass TCint n;public:TC()TC(int m)n=m;/*error*TC add(TC s1,s2)thisn=s1.n+s2.n;/*error*return(this);void disp()cout“n=“nend1;/*err
8、or*void main()TC s1(20),s2(10),s3,s4;cout“s1:“;s1.disp();cout“s2:“;s2.disp();s4=s3.add(s1,s2);cout“执行 s3.add(s1,s2)/ns3:“;s3.disp();cout“s4:“;s4.disp();(分数:30.00)填空项 1:_ (正确答案:应改为“TC add(TC s1,TC s2)”。)解析:填空项 1:_ (正确答案:应改为“return(*this);”。)解析:填空项 1:_ (正确答案:应改为“;”。)解析:解析 本题中的变量“s2”没有声明类型,所以补充“s2”的类型,
9、即“TC add(TC s1,TC s2)”。“thisn=s1.n+s2.n;”语句中的this 变量为指针变量,所以第 2 处的“return(this);”返回语句中的 this 变量,应该返回指针型,所以修改为“return(*this);”。C+中类的定义格式应为“class 类名;”,以分号为结尾,所以在第 3 处的类结尾处补充分号“;”,即修改为“;”二、2简单应用题(总题数:1,分数:40.00)1.使用 VC+6.0 打开考生文件夹下的源程序文件 2.cpp。完成 fun 函数,使其功能为将两个按小到大排序的数组 a 和 b,复制合并成一个有序整数序列 c,其中形参 n 和
10、m 分别是数组 a 和 b 的元素个数。注意:不能修改程序的其他部分,只能修改 fun 函数。试题程序:#includeiostream.hvoid fun(int a,int n,int b,int m,int *c)void main()int A=3,5,7,9,11,18,21;int s=6,15,19,21,39;int C25,i;for(i=0;i25;i+)Ci=0;cout“A=“;for(i=0;i7;i+)coutAi,;coutend1;cout“B=“;for(i=0;i5;i+)coutBi,;coutend1;fun(A,7,B,5,C);cout“C=“;fo
11、r(i=0;i12;i+)coutCi,;coutend1;return;(分数:40.00)_正确答案:(int i,j;for(i=j=0;injm;)*c+=ai(bj?ai+:bj+; /比较两个数组中元素大小while(in)*c+=ai+;while(j(m)*c+=bj+;)解析:解析 本题都指向数组的第一个元素。利用 for 循环对要合并的两个数组中的元素进行比较,直到两个数组结束。取比较结果小的元素,并将指向这个数组的位置向后移动一位。三、3综合应用题(总题数:1,分数:30.00)使用 VC+6.0 打开考生文件夹下的源程序文件 3.cpp。其中定义的类不完整,按要求完成下
12、列操作,将类的定义补充完整。(1)将文件以追加的方式打开。请在注释 1 后添加适当的语句。(2)定义 m、n 为类 TC 的公有 int 型数据成员。请在注释 2 后添加适当的语句。(3)定义 p 为类 TC 的数据成员指针,并指向类 TC 的数据成员 m。请在注释 3 后添加适当的语句。(4)定义 p 指向类 TC 的数据成员 n。请在注释 4 后添加适当的语句。注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。试题程序:#includeiostream.h#includefstream#includeiomanip#includecmathusing namespa
13、ce std;void WriteFile(int x)ofstream out1;/*1*out1.open(“3.txt“,);out1x;out1.close();void ClearFile()ofstream out1;out1.open(“3.txt“);out1.close();class TCpublic:void disp()cout“m=“mend1;WriteFile(m);cout“n=“nend1;WriteFile(n);/*2*;void main()/*3*ClearFile();TC a;a. *p=30;/*4*a. *p=45;a.disp();(分数:3
14、0.00)填空项 1:_ (正确答案:将“out1.open(“3.txt“,);”补充完整为“out1.open(“3.txt“,ios_base:app);”。)解析:填空项 1:_ (正确答案:应添加“int m,n;”。)解析:填空项 1:_ (正确答案:应添加“int TC:*p=(TC:m);”。)解析:填空项 1:_ (正确答案:应添加“p=(TC:n);”。)解析:解析 本题第 1 处要求“对文件以追加的方式打开”。文件输入输出方式的设置值,ios:app是以输出方式打开文件,写入的数据添加在文件末尾,即第 1 处的语句补全为“out1.open(“3.txt“,ios_bas
15、e:app);”。第 2 处要求“定义 m、n 为类 TC 的公有 int 型数据成员”。只需在程序中的 TC 类中的 public 区域添加 m、n 的定义即可。即在第 2 处添加“int m,n;”。第 3处要求“定义 p 为类 TC 的数据成员指针,并指向类 TC 数据成员 m”。程序中类 TC 数据成员 m 为“TC:in”定义 p 为类 TC 的数据成员指针语句为“TC:*p”,将其指向前面的数据成员 m,即为“int TC:*p=(TC:m);”。第 4 处要求“定义 p 指向类 TC 数据成员 n”。定义类 TC 数据成员 n的语句为“TC:n”,用 p 指向类 TC 数据成员 n,添加的语句即“p=(TC:n);”。