1、二级 C+机试-136 及答案解析(总分:99.99,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)试题源程序文件清单如下:/proj1. cpp#includeiostreamusing namespace std;class MyClasspublic:MyClass():count(0) cout“This object is“;/ERROR*found*void Inc() const (1)cout“no.“+countendl;(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、2填空题(总题数:1,分数:40.00)试题源程序文件清单如下:/pr
2、oj2. cpp#includeiostreamusing namespace std;char*GetNum(char*src,char*buf)while(*src!=/0)if(isdigit(*src) break;src+;if(*src=/0)/*found*(1) ;while(*src!=/0cin. getline( str,100);char*p=str;int i=1:While(p=GetNum( p,digits)!=NULL)cout“Digit string“i“is“digitsendl;/*found*(3) ;return 0:(分数:39.99)填空项 1
3、:_填空项 1:_填空项 1:_三、3综合应用题(总题数:1,分数:30.00)(分数:30.00)_二级 C+机试-136 答案解析(总分:99.99,做题时间:90 分钟)一、1改错题(总题数:1,分数:30.00)试题源程序文件清单如下:/proj1. cpp#includeiostreamusing namespace std;class MyClasspublic:MyClass():count(0) cout“This object is“;/ERROR*found*void Inc() const (1)cout“no.“+countendl;(分数:30.00)填空项 1:_
4、(正确答案:void Inc())解析:解析 常函数不能改变数据成员 count 的值。按照题目要求的输出,函数体确实需要在此改变count 的值,所以应该去掉 const 关键字。填空项 1:_ (正确答案:int count;)解析:解析 在类体内不能对数据初始化,数据的初始化由构造函数完成。填空项 1:_ (正确答案:obj-Inc();或(*obj).Inc();)解析:解析 obj 为 MyClass 类的指针,应采用指针调用成员函数的方式。二、2填空题(总题数:1,分数:40.00)试题源程序文件清单如下:/proj2. cpp#includeiostreamusing names
5、pace std;char*GetNum(char*src,char*buf)while(*src!=/0)if(isdigit(*src) break;src+;if(*src=/0)/*found*(1) ;while(*src!=/0cin. getline( str,100);char*p=str;int i=1:While(p=GetNum( p,digits)!=NULL)cout“Digit string“i“is“digitsendl;/*found*(3) ;return 0:(分数:39.99)填空项 1:_ (正确答案:return NULL)解析:解析 函数 char*
6、GetNum()的第一个循环用来顺序查找输入字符串的第一个数字,如果遇到数字则退出循环,进入第二个 while 循环,将这一段数字字符依次存储到空间 buf 中;如果遇到字符串结束符也退出循环,转而执行 if 中的内容。依题意,如果没有扫描到数字字符序列则返回 NULL,所以横线一处应该填写 return NULL。填空项 1:_ (正确答案:* buf=* src)解析:解析 为了将字符串指针中的字符依次存储到 buf 中,应该采用指针运算符“*”,横线二处应该填写* buf=*src。填空项 1:_ (正确答案:i+分析 函数 char*GetNum()的第一个循环用来顺序查找输入字符串的
7、第一个数字,如果遇到数字则退出循环,进入第二个 while 循环,将这一段数字字符依次存储到空间 buf 中;如果遇到字符串结束符也退出循环,转而执行 if 中的内容。依题意,如果没有扫描到数字字符序列则返回 NULL,所以横线一处应该填写 return NULL。分析 为了将字符串指针中的字符依次存储到 buf 中,应该采用指针运算符“*”,横线二处应该填写* buf=*src。分析 从主函数 while 循环的输出语句和题目要求的输出结果可以判断,横线三处应使 i 的值加 1,可填入 i+。)解析:i+三、3综合应用题(总题数:1,分数:30.00)(分数:30.00)_正确答案:(del
8、eteidcardno;deletename;)解析:解析 在“/*1*found*”的下方是析构函数定义的语句,它释放指针成员 idcardno 和 name 所指向的动态空间。_正确答案:(deleteidcardno; deletename;)解析:解析 在“/*2*found*”的下方是 rename()函数中的一个语句,它使指针 name 指向申请到的足够容纳字符串 new_name 的空间。_正确答案:(Person(id_card_no ,p_name ,is_male)解析:解析 在“/*3*found*”的下方是构造函数定义的一个组成部分,其作用是利用参数表中的前几个参数对基类 Person 进行初始化。