1、国家二级 C+机试(操作题)-试卷 177 及答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modi lcpp,该程序运行时有错,请改正其中的错误,使程序正确运行,并且使程序输出的结果为: 30 130 注意:错误的语句在*error*的下面,修改该语句即可。 #include int a=10; class cobj public: cobj() a=b=0; void display() *error* coutab_二、简单应用题(总题数:1,分数:2.00)2.使用 VC6 打开考生文件夹下的
2、源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。函数 convert(char*des,char*st0 实现的功能是,如果字符串 stI“里面有空格或者不可打印字符,则全部去掉,将转化后的字符串放在字符串 des 里,然后返回该字符串。 注意:不能修改程序的其他部分,只能补充 convert 0 函数。 #include #include #define MAXLEN 1 024 char*convert(char*des,char* str) void main() char destMAXLEN; char*str:” Ab cDeF hJ K”; cout_三、综
3、合应用题(总题数:1,分数:2.00)3.使用 VC6 打开考生文件夹下的源程序文件 modi3cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能: (1)声明类 objAl,请在注释*1*后添加适当的语句。 (2)为类 0bjA0 增加友元函数 rune(),请在注释*2*后添力口适当的语句。 (3)为类 objAl 增加友元函数 func(),请在注释*3*后添加适当的语句。 (4)函数 rune0 返回 objAl 对象中的变量和 0bjA0 的静态变量的乘积,请在注释*4*后添加适当的语句。 注意:增加代码,或者修改代码的位置已经用符号表示出来。请不要修
4、改其他的程序代码。 include *1* class objA0 private: static int m A0 ; *2* ; int objA0:mA0=1 0; class objAl private: int m A1; *3* public: objAl(int i) m A1=i; ; int func(ohjAl cout_国家二级 C+机试(操作题)-试卷 177 答案解析(总分:6.00,做题时间:90 分钟)一、基本操作题(总题数:1,分数:2.00)1.使用 VC6 打开考生文件夹下的源程序文件 modi lcpp,该程序运行时有错,请改正其中的错误,使程序正确运行,
5、并且使程序输出的结果为: 30 130 注意:错误的语句在*error*的下面,修改该语句即可。 #include int a=10; class cobj public: cobj() a=b=0; void display() *error* coutab_正确答案:(正确答案: (1)coutaba+=a; (3)a+=:a;)解析:解析:(1)成员函数 display()打印变量 a 和 b 的值,即 cout 输出 a 和 b 的值,cout 流中的数据是用流插入运算符“”顺序加入的,因此“”不正确,因此第 1 个标识下应改成 coutaba+=a:”0 (3)func20 函数虽然
6、没有参数,但是成员变量 a 和全局变量 a 重名,第 3 个标识下“a+=a”也会有歧义,分不清楚是全局变量加倍还是类成员变量加倍或者其他情况,调用 func20 函数后,输出“130”,说明 a为 13,b 为 0,因此是成员变量与全局变量 a 的和赋给成员变量 a,正确的写法是“a+=:a,“:a”表示是全局变量 a。二、简单应用题(总题数:1,分数:2.00)2.使用 VC6 打开考生文件夹下的源程序文件 modi2cpp。阅读下列函数说明和代码,补充空出的代码。函数 convert(char*des,char*st0 实现的功能是,如果字符串 stI“里面有空格或者不可打印字符,则全部
7、去掉,将转化后的字符串放在字符串 des 里,然后返回该字符串。 注意:不能修改程序的其他部分,只能补充 convert 0 函数。 #include #include #define MAXLEN 1 024 char*convert(char*des,char* str) void main() char destMAXLEN; char*str:” Ab cDeF hJ K”; cout_正确答案:(正确答案:int j=0; for(int i=0;stri!=NULL;i+) if(stri!= *2* ; int objA0:mA0=1 0; class objAl private
8、: int m A1; *3* public: objAl(int i) m A1=i; ; int func(ohjAl cout_正确答案:(正确答案:(1)添加语句:class objAl; (2)添加语句:friend int func(objAl&obj); (3)添加语句:friend int func(objAl&obj); (4)添加语句:return objm A1*objA0:m A0;)解析:解析:(1)类的声明格式为:“class:”,因此第 1 个标识下应添加“class objAl;”。 (2)按照友元的定义格式,友元函数是在类声明中由关键字 friend 修饰的非
9、成员函数,func 函数在类外部给出了具体的实现形式,即“int func(objAl&obj)”,因此第 2 个标识下应添加“friend int func(objAlobj);”,这里参数是 objAl 类对象 obj。 (3)第 3 个标识下和题目 2 要求一样,均是声明友元函数,因此第 2 标识下应添加“friend int func(objAl&obj);”。 (4)通过参数 obj 对象可以直接访问 objm_Al,objA0 的静态变量 m A0 是所有对象的共享成员,其访问形式为:obiA0:m A0,因此第 4 个标识下应添加“return objm A1*0bjA0:mA0;”。