1、国家二级 C+机试(操作题)模拟试卷 361及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6打开考生文件夹下的源程序文件 modilcpp,该程序运行时有错误,请改正程序中的错误,使得程序运行后没有内存遗漏。可以在修改处增加或者删除一条语句。本程序完成输入两个字符串,分别存储到 s1,s2 中。 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include Void main() char*s1; char s2102 4; cout_二、简单应用题(总题数:1,分数:2
2、.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,完成空出部分程序。该程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。程序一边读入整数,一边构造一个以大到小顺序链接的链表,直至输入 0时结束。然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数 fun(),函数 fun()将还未出现在链表上的整数按从大到小的顺序插入到链表中。为了插入方便,链表在表首有一个辅助表元。 注意:不能修改程序的其他部分,只能修改 fun()函数。#includeiosrreamclass NODEpublic: int data; N
3、ODE*nexl;void fun(NODE*list,int x)void main() int x; NODE*head,*P;*首先建立只有辅助表元的空链表* head=new NODE; head-next=NULL; std:couL“Enter integers,end with 0”std:endl; while(1) std:cinx; if( x=0) break; fun(head,x); for(P=head 一next;P!=NULL;p=p 一next) std:coutp 一data; std:coutstd:end1; do p=head 一next; deler
4、e head; head=P; while(P);(分数:2.00)_三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)完成构造函数,设置数组元素的个数为 0,请在注释*1*之后添加语句。 (2)完成函数 AddMember(int n),如果参数 n包含在类的数据成员数组中,则返回 0,否则把数据写入数组,然后返回 1,请在注释*2*之后添加语句。 (3)完成函数 DelMember(int n),如果变量在数据中,则删除该变量,并且返回 1,如果不存
5、在则返回0,请在注释*3*之后添加语句。 (4)完成成员函数 isInclude(int n)的定义,该函数检查参数 n是否在类的数据成员数组 elems中,如果在返回 1,否则返回 0。请在注释*4*之后添加语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeiOStreamh#define MAX LENGTH 500clas s CArraypublic: CArray() *1* int AddMember(int n) for(int i=0;ilength;i+) *2* if(Arrayi=n) return 0; Arraylength+=n;
6、return 1; int DeiMember(int n) int i; for(i=0;ilength;i+) if(Arrayi=n) break; *3* if() for(;ilength 一 1;i+) Arrayi=Arrayi+1; length 一一; return 1; return 0; int isInclude(int n) for(int i=0;ilength;i+) *4* if() return 1; return 0; private: int ArrayMAX LENGTH; int length;用来记录数组的个数;int main() CArray o
7、bj; objAddMember(1); objAddMember(3); objAddMember(8); objAddMember(23); coutobjiSInclude(8)endl; coutobjiSInclude(1 1)endl; objDeIMember(3); objDeiMember(8); coutobjiSInclude(2)end1; coutobjiSInclude(1)end1; return 0;(分数:2.00)_国家二级 C+机试(操作题)模拟试卷 361答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用
8、 VC6打开考生文件夹下的源程序文件 modilcpp,该程序运行时有错误,请改正程序中的错误,使得程序运行后没有内存遗漏。可以在修改处增加或者删除一条语句。本程序完成输入两个字符串,分别存储到 s1,s2 中。 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include Void main() char*s1; char s2102 4; cout_正确答案:(正确答案:(1)S1=new char1 02 4; (2)deletes1; (3)删除“defete s2;”语句)解析:解析:本题是主要是处理程序运行后是否有内存遗
9、漏的问题。对于这类问题主要是根据调试环境中的错误提示以及警告提示进行处理。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,完成空出部分程序。该程序从键盘读入整数,并按从大到小的顺序输出输入整数中互不相等的那些整数。程序一边读入整数,一边构造一个以大到小顺序链接的链表,直至输入 0时结束。然后顺序输出链表上各表元的整数值。主函数每读入一个整数,就调用函数 fun(),函数 fun()将还未出现在链表上的整数按从大到小的顺序插入到链表中。为了插入方便,链表在表首有一个辅助表元。 注意:不能修改程序的其他部分,只能修
10、改 fun()函数。#includeiosrreamclass NODEpublic: int data; NODE*nexl;void fun(NODE*list,int x)void main() int x; NODE*head,*P;*首先建立只有辅助表元的空链表* head=new NODE; head-next=NULL; std:couL“Enter integers,end with 0”std:endl; while(1) std:cinx; if( x=0) break; fun(head,x); for(P=head 一next;P!=NULL;p=p 一next) st
11、d:coutp 一data; std:coutstd:end1; do p=head 一next; delere head; head=P; while(P);(分数:2.00)_正确答案:(正确答案:NODE*u,*v,*p; u=list; v=u 一next; while(v!=NULLXV-data) 寻找插入的位置 u=v; v=v-next; if(v=NULL Xv 一data) 判断是否为新的元素 p=new NODE; P 一data=x; 生成新的元素 P 一next=v: u-next=p; 插入新的元素 )解析:解析:(1)该程序功能是构造一个以大到小顺序链接的链表。它
12、的解题思路,首先寻找插入的位置,然后判断是否为新元素,最后插入。 (2)从己给部分源程序的 main主函数开始入手核心函数 void fun(NODE*list,int x)中的 list参数为单链表,x 为要插入的数据。三、综合应用题(总题数:1,分数:2.00)3.使用 VC6打开考生文件夹下的源程序文件 modi3cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)完成构造函数,设置数组元素的个数为 0,请在注释*1*之后添加语句。 (2)完成函数 AddMember(int n),如果参数 n包含在类的数据成员数组中,则返回 0,否则把数据写入数
13、组,然后返回 1,请在注释*2*之后添加语句。 (3)完成函数 DelMember(int n),如果变量在数据中,则删除该变量,并且返回 1,如果不存在则返回0,请在注释*3*之后添加语句。 (4)完成成员函数 isInclude(int n)的定义,该函数检查参数 n是否在类的数据成员数组 elems中,如果在返回 1,否则返回 0。请在注释*4*之后添加语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。#includeiOStreamh#define MAX LENGTH 500clas s CArraypublic: CArray() *1* int AddMembe
14、r(int n) for(int i=0;ilength;i+) *2* if(Arrayi=n) return 0; Arraylength+=n; return 1; int DeiMember(int n) int i; for(i=0;ilength;i+) if(Arrayi=n) break; *3* if() for(;ilength 一 1;i+) Arrayi=Arrayi+1; length 一一; return 1; return 0; int isInclude(int n) for(int i=0;ilength;i+) *4* if() return 1; retu
15、rn 0; private: int ArrayMAX LENGTH; int length;用来记录数组的个数;int main() CArray obj; objAddMember(1); objAddMember(3); objAddMember(8); objAddMember(23); coutobjiSInclude(8)endl; coutobjiSInclude(1 1)endl; objDeIMember(3); objDeiMember(8); coutobjiSInclude(2)end1; coutobjiSInclude(1)end1; return 0;(分数:2.00)_正确答案:(正确答案:(1)添加语句:length=0; (2)将“if(Arrayi=n)”补充完整为:if(Arrayi=n)或 if(n=:Arrayi) (3)将“if()”补充完整为:if(i解析:解析:程序中定义了类 CArray,有两个数据成员和多个成员函数。变量为 length用来记录数组元素的个数,数组 ArrayMAXLENGTH用来存放数组元素。成员函数 AddMember0和 DelMember()分别表示添加和删除元素,函数 islnclude(int n)检查数组当中是否存在值为 n的元素。