1、国家二级 C+机试(操作题)-试卷 79 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modicpp,该程序运行时有错,请改正其中错误,使得程序正常运行,并使程序输出的结果为: c Test 注意:不要改动 main 函数,不能增行或删行,也不能更改程序的结构,错误的语句在*error*的下面。 #include void main() *error* char C=“C”; coutID:ID_umber; *1* ; ClasS CBooks private: class Node publi
2、c: Node*next; CBook*book ; *m_pBook; public: CBooks() m_pBook=NULL; 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
3、) P=new Node, P 一next=NULL, P 一book =new CBook(nID,Author); if(q=NULL) m_pBook=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 booksl ; books 1AddBookMenbe r (1,“Tom”); books
4、lAddBookMenber (3,“Lee”); books 1AddBookMenbe r (4,“Lily”); books 1AddBookMenber (5,“Harry”);coutID:ID_umber; *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 ; delete m_pBook 一book; delete m_pB
5、ook; 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) m_pBook=p; else q 一next=P; return 1 ; char*GetBookAuthor (int nID) Node*P=m
6、 pBook; *4* while() if(p 一book 一ID =nID) return P 一 book-Author ; P=p 一next; return 0 ; ;int main() CBooks booksl ; books 1AddBookMenbe r (1,“Tom”); bookslAddBookMenber (3,“Lee”); books 1AddBookMenbe r (4,“Lily”); books 1AddBookMenber (5,“Harry”);cout_正确答案:(正确答案:(1)添加语句:strcpy(Author,Author_Name); (
7、2)将“while()”补充完整为:while(m pBook!=NULL) (3)将“while()”补充完整为:while(P!=NULL) (4)将“while()”补充完整为:while(p!=NULL)解析:解析:(1)第 1 个标识下完成 CBook 类的构造函数,对成员变量整 ID 和作者 Auor 进行初始化,因此第 1 个标识下应添加“strcpy(Author,Author_Name);”,利用 strcpy 函数,将 Author Name 数组内容拷贝到 Author 数组中。 (2)CBooks0 为 CBooks 类的析构函数,由于 CBooks 类在运行过程中会动
8、态申请内存空间,因此在析构函数中必须将这些内存释放。CBooks 类是由 Node 对象组成的链表,因此可利用循环逐个搜索这个链表,逐个释放内存空间,故第 2 个标识下应改为 while(m pBook!=NULL),在 while循环体不断的搜索下一个节点直到 m pBook 为空为止,删除所以节点。 (3)AddBookMenber(int nlDchar*Author)数在链表的最后添加一个新的节点,因此必须先找到最后一个节点,同样利用循环寻找最后一个节点,故第 3 个标识下为 while(P!=NULL。 (4)GetBookAuthor(int nID)返回某个 Node 节点的 CBook 对象的 ID 为 nlD 的 CBook 对象的 Author 数组名,同样需要利用循环来查找各个节点 CBook 对象的 ID 是否为 nlD,故第 4 个标识下应为 while(p!=NULL)。