1、国家二级 C+机试(操作题)模拟试卷 244及答案与解析 一、基本操作题 1 使用 VC6打开考生文件夹下的源程序文件 modi1 cpp,该程序运行时有错,请改正其中的错误,使得程序正常运行,并使程序输出的结果为: Hello 注意:不要改动 main函数,不能增行或删行,也不能更改程序的结构,错误的语句在 *error*的下面。 #include iostream h void main() *error* typedef BOOL bool; *error* BOOL a=FALSE; int i=0X80000000; *error* a=!i; if(a) cout “Hello“
2、endl; return; 二、简单应用题 2 使用 VC6打开考生文件夹下的源程序文件 modi2 cpp。阅读下列函数说明和 C代码,完成空出部分的程序,实现函数 fun(char*s1, char*s2)将字符串 s2连接在字符串 s1之后,构成一个首指针为 s1的字符串。 注意:不能修改 函数的其他部分。 #include iostream h #define MAXLINE1000 void fun(char*s1, char*s2) void main() char s1NAXLINE; char s2256; cout “please input a string: “ endl
3、; cin getline(s1, NAXLINE); Cout “please input otherstring: “ endl; cin getline(s2, 256); fun(s1, s2); cout s1 endl; return; 三、综合应用题 3 使用 VC6打开考生文件夹下的源程序文件 modi3 cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。 (1)完成构造函数的定义,请在注释 *1*后添加适当的语句。 (2)定义类的友元函数 fun(),请在注释 *2*后添加适当的语句。 (3)定义类的友元函数 main(),请在注释 *3*后添加适当的语句
4、。 (4)补充语句,释放内存。请在注释 *4*后添加适当的语句。 注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。 #include iostream h class TestClass public: *1* data=d; next=NULL; void SetNext(TestClass* p) next=p; private: int data; TestClass* next; *2* *3* ; TestClass* fun(TestClass* h) TestClasS *t, *s, *u, *v; s=h- next; h- next=NULL; while(s!
5、=NULL) for(t=s, v=h; v!=NULL &v- data t- data; u=v, v=v- next); s=s- next; if(v=h) h=t; else u- next=v; t- next=v; return h; void main() TestClass* h=NULL; TestClass* q=NULL; do int data; cout “please input a number, and end with0“ endl; cin data; if(data=0)break; TestClass* p=newTestClass(data); if
6、(h=NULL) h=q=p; else q- SetNext(p); q=p; while(1); h=fun(h); for(; h!=NULL; ) q=h- next; cout h- data “ “ endl; delete h; *4* return; 国家二级 C+机试(操作题)模拟试卷 244答案与解析 一、基本操作题 1 【正确答案】 (1)typedef bool BOOL; (2)BOOL a=false; (3)a=(i!=0); 【试题解析】 (1)第 1个标识下的 “typedef BOOL bool; ”。 typedef为 C语言的关键字,作用是为一种数据类型
7、定义一个新名字。一 般形式应该是: typedef标准数据类型新的数据类型名,所以第 1个标识下应该是 “typedefbool BOOL; ”。 (2)C+中逻辑假的值应该是 false而不是 FALSE,所以这里修改为“BOOLa=fatse; ”。 (3)题目要求输出 Hello,它要在 “if(a)”为真的时候输出 “Hello”。 i的值为0X80000000,第 3个标识下 a=!i;语句中 a的值为假。 i!=0为真,所以修改为“a=(if=0); ”。 二、简单应用题 2 【正确答案】 int i=0; for(i=0; s1i!=0; i+);指向第一个串尾 for(int
8、j=0; s2j!=0; j+)利用循环将第二个串拷贝到第一个串尾 s1i+=s2j; s1i=0,加尾符 【试题解析】 (1)首先利用循环指向第一个串尾。 (2)然后利用 for循环将第二个串连接到第一个串尾。 (3)最后在新生成的串尾加尾符号。 三、综合应用题 3 【正确答案】 (1)添加语句: TestClass(int d) (2)添加语句: friend TestClass* fun(TestClass*); (3)添加语句: friend void main(); (4)添加语句: h=q; 【试题解析】 (1)题目 1要求 “完成构造函数的定义 ”。构造函数是一种特殊的成员函数,
9、它的名字必须与类同名,所以这里的构造函数名字是 TestClass。根据构造函数内的 “data=d; ”语句,知道构造函数 TestClass中参数 d为 int型,即这里补全 “TestClass(int d)”。 (2)题目 2要求 “定义类的友元函数 fun()”。在 C+中,如果在本类以外的其它地方定义了一个函数,在类体中是用 friend对该函数 进行声明的,此函数称为本类的友元函数,并且能够调用本类中的成员变量。程序中 fun()在类 TestClass以外的地方定义的,为了其实现对类 TestClass中程序变量的调用,在类 TestClass中补全 “friend TestClass*fun(TestClass*); ”。 (3)题目 3要求 “定义类的友元函数 main()。 ”同 (2),这里补全 “friend void main(); ”。 (4)题目 4要求 “补充语句,释放内存。 ”为了防止内存泄漏,在指针使用后要将其释放。第四个标识前面的 “delete h; ”语 句已经将指针 h释放了,所以要释放指针q,只要将其指向 h就可以了,即 “h=q; ”。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1