1、国家二级 C+机试(操作题)模拟试卷 327及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 zpp,但该程序运行时有错,请改正程序中的错误,使程序输出的结果为: number1=a number2=a number1=a number2=b 注意:错误的语句在 *error*的下面,修改该语句即可。 #include class CMyClass public: *error* friend void SetValue(CMyClass obj, char c) obj numberl=c; obj number2, =c; *error* void S
2、etValue(CMyClass obj, char c1, char c2) obj numberl=c1; obj number2=c2; void display() cout void fun(int n) void main() int n; coutn; if(n #include Class CBook public: int ID; char Author32; public: CBook(int ID Number, char* Author Name) this-ID=ID Number; *1* ; clas s CBooks private: Class Node pu
3、blic: 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 f nID=p- book-ID) return 0; q=p; p=p-next; if(P=NULL)
4、 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 1 AddBookMenber (1, “Tom“); books 1 AddBo
5、okMenber (3, “Lee“); books 1 AddBookMenber (4, “Lily“); books 1 AddBookMenber (5, “Harry“); coutbooks1 GetBookAUthor (1)endl; coutbooks1 GetBookAUthor (5)endl; return 0; 国家二级 C+机试(操作题)模拟试卷 327答 案与解析 一、基本操作题 1 【正确答案】 (1)friend void SetValue(CMyClass obj, char c) (2)void SetValue(CMyClass obj, charc1,
6、 char c2) (3)t SetValue(t, a, b); 【试题解析】 (1)根据程序的输出结果,函数 SetValue(t, a)执行后,输出number1和 number2的值均为 a,在 SetValue(t, a)执行中改变了对象 t的成员number1和 number2的值,故 SetValue(t, a)的第一个参数传递的是引用,因此第 1个标识下应改为 “friendvoid SetValue(CMyC lass obj, char C)”。 (2)主函数中 t SetValue(t, a, b)后调用 t的 display()函数,在屏幕上打印,“number1=a
7、number2=b”,可知在 SetValue(CMyClass obj, char c1, char c2)中改变了对象 t的成员 numberl和 number2的值,因此第一个参数传递为引用方式,故第 2个标识下应改为 “voidSetValue(CMyClass obj, char c1, char c2)”。 (3)由 2可知,第 3个标识下是调用函数 SetValue(CMyClass oN, char c1,char c2)函数,函数的第一个参数为引用,直接使用变量名即可,因此第 3标识下的引用使用错误,应改为 “t SetValue(t, a, b); ”。 二、简单应用题 2
8、 【正确答案】 int i; for(i=0; in; i+) 外层循环,要打印的行数 int j; for(j=0; jn-i-1; j+) 循环打印空格 cout ; for(; jn; j+) 循环打印 # cout“#“; coutendl j 打印每一行的回车 【试题解析】 (1)外层循环打印每一行。 (2)内层循环,分为打印空格和打印 #。打印空格由第一个位置到第 n-i-1。打印#,是由打印完空格开始一直到行结束。 (3)最后在外循环中打印每一行的结束。 三、综合应用题 3 【正确答案】 (1)添加语句 : strcpy(Author, Author_Name); (2)将 “w
9、hile()”补充完整为: while(m_pBook!=NULL) (3)将 “while()”补充完整为: while(p!=NULL) (4)将 “while()”补充完整为: while(p!=NULL) 【试题解析】 (1)第 1个标识下完成 CBook类的构造函数,对成员变量整 ID和作者 Author进行初始化,因此第 1个标识下应添加 “strcpy(Author,Author_Name); ”,利用 strcpy函数 ,将 Author Name数组内容拷贝到 Author数组中。 (2) CBooks()为 CBooks类的析构函数,由于 CBooks类在运行过程中会动态申
10、请内存空间,因此在析构函数中必须将这些内存释放。 CBooks类是由 Node对象组成的链表,因此可利用循环逐个搜索这个链表,逐个释放内存空间,故第 2个标识下应改为 while(m_pBook!=NULL),在 while循环体不断的搜索下一个节点直到 m pBook为空为止,删除所以节点。 (3)AddBookMenber(int nIlD, char*Author)函数在链表的最后添加一个新的节点,因此必须先找到最后一个节点,同样利用循环寻找最后一个节点,故第 3个标识下为 while(p!=NULL)。 (4)GetBookAuthor(int nID)返回某个 Node节点的 CBook对象的 ID为 nID的CBook对象的 Author数组名,同样需要利用循环来查找各个节点 CBook对象的ID是否为 nID,故第 4个标识下应为 while(p!=NULL)。