1、国家二级 C+机试(操作题)模拟试卷 431及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modil cpp,该程序运行时有错,请改正其中的错误,使程序正常运行,并且使程序输出的结果为: a=7, b=0 a=8, b=10 注意:错误的语句在 *error*的下面,修改该语句即可。 #include class CObj public: *error* friend void func(CObj&, int, int); void display() *error* cout void show() int main() show(); return 0; 三、
2、综合应用题 3 使用 VC6打开考生文件夹下的源 程序文件 modi3 cpp。其中定义的类并不完整,按要求完成列操作,将类的定义补充完整,实现以下功能: (1)完成 CBook类构造函数,对整型变量 ID和作者 Author进行赋值,请在注释 *1*后添加适当的语句。 (2)完成类 CBooks的析构函数,释放申请的内存,请在注释*2*后添加适当的语句。 (3)完成类 CBooks的 AddBookMember函数,请在注释 *3*后添加适当的语句。 (4)完成 CBooks类,用于由书的 ID检索到作者的函数 char*GetBookAuthor(int nID),请在注释 *4*后添加适
3、当的语句。 (5)程序的输出结果为: Tom Harry 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include #include 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;
4、 CBooks() *2* while() Node* p = m_pBook-next; delete m_pBook-book; delete m_pBook; m_pBook=p; int AddBookMenber(int nID, char* Author) Node* p=m_pBook; Node *q=NULL; *3* while() if(nID=p- book-ID) return 0; q=p; p=p-next; if(p=NULL) p=new Node; p-next=NULL; p-book= new CBook(nID, Author); if(q=NULL)
5、 m_Book=p; else q-next=p; return 1; Char* GetBookAuthor (int nID) Node *p=m_pBook; *4* while() if(p-book-ID =nID return p-book-Author; p=p-next; return 0; ; int main() CBooks books1; books1 AddBookMenber (1, “Tom“); books 1 AddBookMenber (3, “Lee“); books 1 AddBookMenber (4, “Lily“); bookS AddBOOkMe
6、nber (5, ”Harry”); cout();,对象声明语句是一个完整的语句,应该以 “; ”结尾,因此第 3个标识下应改为 “CObj obj1; ”。 二、简单应用题 2 【正确答案】 for(int i=1; i5; i+) for(int j=1; j5; j+) for(int 1=1; 15; 1+) for(int k=1; k5; k+) if(i! =j&j! =k&i! =k &i! =1&j! =1&k! =1)条件判断 coutij1k ; 输出显示 coutend1; 【试题解析】 (1)四重循环变量分别为 i、 i、 l和 k,分别从 1变化至 4,分别表示四
7、位数的第一、第二、第三和第四位数。 (2)在最内层循环内,如果 i、 J、 k和 1互不相同则 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类的构造函数,对成员变量整
8、ID和作者 Author进行初始化,因此第 1个标识下应添加“strcpy(Author,Author_Name); ”,利用 strcpy函数,将 Author Name数组内容拷贝 到 Author数组中。 (2) CBooks()为 CBooks类的析构函数,由于 CBooks类在运行过程中会动态申请内存空间,因此在析构函数中必须将这些内存释放。 CBooks类是由 Node对象组成的链表,因此可利用循环逐个搜索这个链表,逐个释放内存空间,故第 2个标识下应改为 while(m pBook ! =NULL),在 while循环体不断的搜索下一个节点直到 m_pBook为空为止,删除所以节点。 (3)AddBookMenber(int nID, char*Author)函数在链表的最后添加一个新的节点,因此 必须先找到最后一个节点,同样利用循环寻找最后一个节点,故第 3个标识下为 while(P! =NULL)。 (4)GetBookAuthor(int nID)返回某个 Node节点的 CBook对象的 ID为 nID的CBook对象的 Author数组名,同样需要利用循环来查找各个节点 CBook对象的ID是否为 nID,故第 4个标识下应为 while(p! =NULL)。