1、国家二级 C+机试(操作题)模拟试卷 258及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并且使程序输出的结果为: a=7, b=0 a=8, b=10 注意:错误的语句在 *error*的下面,修改该语句即可。 #include iostream h Class CObj public: *error* friend void func(CObj&, int, int); void display() *error* cout “a=“ a “, b=“ b endl; private: i
2、nt a, b; ; void func(CObj& obj, int t) obj a=t; obj b=0; void func(CObj& obj, int t, int j) obj a=t, obj b=j, void main() *error* CObj obj1 func(obj1, 7); obj1 display(); func(obj1, 8, 10); obj1 display(); 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。阅读下列函数说明和代码。函数 show()的功能是将 1、 2、 3、 4四个数字,组成互不相同且无重复数
3、字的四位数,并将这些数输出到屏幕,输出的内容如下: 1234 1243 1324 1342 1423 1432 2134 2143 2314 2341 2413 2431 3124 3142 3214 3241 3412 3421 4123 4132 4213 4231 4312 4321 将函数 show() b充完整。 注意:请勿改动主函数。 #include iostream h void show() int main() show(); return0; 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。其中定义的类并不完整,按要求完成列操作,将类的定
4、义补充完整,实现以下功能: (1)完成 CBook类构造函数,对整型变量 ID和作者 Author进行赋值,请在注释 *1*后添加适当的语句。 (2)完成类 CBooks的析构函数,释放申请的内存,请在注释*2*后添加适当的语句。 (3)完成类 CBooks的 AddBookMember函数,请在注释 *3*后添加适当的语句。 (4)完成 CBooks类,用于由书的 ID检索到作者的函数char*GetBookAuthor(intnID),请在注释 *4*后添加适当的语句。 (5)程序的输 出结果为: Tom Harry 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #incl
5、ude iostream h #include cstring clasS CBook public: int ID; char Author32; public: CBook(int ID_Number, char*Author_Name) this- ID=ID_Number; *1* ; class CBooks private: class Node public: Node* next; CBook*book; *m_pBook; public: CBooks() m_pBook=NULL; CBooks() *2* while() Node*p=m_pBook- next; del
6、etem_pBook- book; delete m_pBook; m_pBook=p; int AddBookMenber(intnID, char* Author) Node*P=m_pBook; Node*q=NULL; *3* while() if(nID=P- book- ID) return0j; q=p; p=p- next; if(p=NULL) p=newNode; p- next=NULL; p- book=new CBook(nID, Author); if(q=NULL) m_pBook=p; else q- next=p; return1, char* GetBook
7、Author (int nID) Node*p=m_pBook; *4* while() if(Pp- book- ID=nID) return p- book- Author; p=p- next; return0; ; int main() CBooks books1; books1 AddBookMenber(1, “Tom“); books1 AddBookMenber(3, “Lee“); books1 AddBookMenber(4, “Lily“); books1 AddBookMenber(5, “Harry“); cout books1 GetBookAuthor(1) en
8、dl; cout books1 GetBookAuthor(5) endl; return0; 国家二级 C+机试(操作题)模拟试卷 258答案与解析 一、基本操作题 1 【正确答案】 (1)添加语句: friend void func(CObj&, int); (2)cout “a=“ a “, b=“ b endl; (3)CObj obj1; 【试题解析】 (1)标识 1处是声明一个友元函数,友元函数是在类声明中由关键字 friend修饰的非成员函数,由 friend void func(CObj&, int, int)可知,函数func()是 CObj类的友元,由程序后面的具体实现可知
9、该函数重载了,已经声明了友元函数 friend void func(CObj&, int, int),另外一个友元函数func(CObj&obj, int t)没有声明,因此第 1个标识下应添加 “friend void func(CObj&, int); ”。 (2)display()函数打印类成员变 量 a和 b的值, cout流中的数据是用流插入运算符“ ”顺序加入的,因此 “ ”不正确,第 2个标识下应改为 “cout “a=“ a “, b=“ b endl; ”。 (3)标识 3处是声明类对象,对象声明格式为:类名对象名 (参数表 );,对象声明语句是一个完整的语句,应该以 “;
10、”结尾,因此第 3个标识下应改为 “CObj obj1; ”。 二、简单应用题 2 【正确答案】 for(int i=1; i 5; i+) for(int j=1; j 5; j+) for(int 1=1, 1 5; 1+) for(int k=1; k 5; k+) if(i!=j&j!=k&i!=k&i!=l&J!=l&k!=1)条件判断 cout i j 1 k ;输出显示 cout endl; 【试题解析】 (1)四重循环变量分别为 i、 j、 1和 k,分别从 1变化至 4,分别表示四位数的第一、第二、第三和第四位数。 (2)在最内层循环内,如果 i、 J、 k和 1互不相同则
11、i、 j、 k和 1表示的四位数互不相同,把 i、 j、 k和 1打印在屏幕上。 三、综合应用题 3 【正确答案】 (1)添加语句: strcpy(Author, Author_Name); (2)将 “while()”补充完整为: while(m_pBook!=NULL) (3)将 “while()”补充完整为: while(p!=NULL) (4)将 “while()”补充完整为: while(p!=NULL) 【试题解析】 (1)第 1个标识下完成 CBook类的构造函数,对成员变量整 ID和作者 Author进行初始化,因此第 1个标识下应添加 “strcpy(Author, Auth
12、or Name); ”,利用 strcpy函数,将 Author Name数组内容拷贝到 Author数组中。 (2) CBooks()为 CBooks类的析构函数,由于 CBooks类在运行过程中会动态申请内存空间,因此在析构函数中必须将这些内存释放。 CBooks类是由 Node对象组成的链表,因此可利用循环逐个搜索这个链表,逐个释放内存空间,故第 2个标识下应改为 while(m_pBook!= NULL在 while循环体不断的搜索下一个节点直到 m_pBook为空为止,删除所以节点。 (3)AddBookMenber(intnID, char*Author)函数在链表的最 后添加一个新的节点,因此必须先找到最后一个节点,同样利用循环寻找最后一个节点,故第 3个标识下为 while(p!=NULL)。 (4)GetBookAuthor(int nID)返回某个 Node节点的 CBook对象的 ID为 nID的CBook对象的 Author数组名,同样需要利用循环来查找各个节点 CBook对象的ID是否为 nID,故第 4个标识下应为 while(p!=NULL)。