[计算机类试卷]国家二级C++机试(操作题)模拟试卷498及答案与解析.doc

上传人:bonesoil321 文档编号:497596 上传时间:2018-11-28 格式:DOC 页数:7 大小:34.50KB
下载 相关 举报
[计算机类试卷]国家二级C++机试(操作题)模拟试卷498及答案与解析.doc_第1页
第1页 / 共7页
[计算机类试卷]国家二级C++机试(操作题)模拟试卷498及答案与解析.doc_第2页
第2页 / 共7页
[计算机类试卷]国家二级C++机试(操作题)模拟试卷498及答案与解析.doc_第3页
第3页 / 共7页
[计算机类试卷]国家二级C++机试(操作题)模拟试卷498及答案与解析.doc_第4页
第4页 / 共7页
[计算机类试卷]国家二级C++机试(操作题)模拟试卷498及答案与解析.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、国家二级 C+机试(操作题)模拟试卷 498及答案与解析 一、基本操作题 1 请打开考生文件夹下的解决方案文件 proj1,该工程中包含程序文件main cpp,其中有 Salary(“工资 ”)类和主函数 main的定义。程序中位于每个 “ERROR*found*”之后的一行语句行有错误,请加以改正。改正后程序的输出结果应为: 应发合计: 3500应扣合计: 67 5实发工资: 3432 5 注意:只修改每个 “ ERROR*found*下的那一行,不要改动程序中的其他内容。 #include iostream using namespace std; class Salary public

2、: Salary(const char*id, double the_base, double the_bonus, double the_tax) ERROR*found* : the_base(base), the_bonus(bonus), the_tax(tax) Staff_id=new charstrlen(id)+1; strcpy(staff_id, id); *found* Salary( )delete*staff_id; double getGrosSPay( )constreturn base+bonus; 返回应发项合计 double getNetPay( )cons

3、treturn getGrossPay( )-tax; 返回实发工资额 private: char*staff id;职工号 double base;基本 i焱 double bonus;奖金 double tax;代扣个人所得税 ; int main( ) Salary pay(“888888“, 3000 0, 500 0, 67 50); cout “应发合计: “ pay getGrossPay( ) “ “; cout “应扣合计: “ pay getGrossPay( )-pay getNetPay( ) “ “; ERROR*found* cout “实发工资: “ pay: g

4、etNetPay( ) endl; return0; 二、简单应用题 2 请打开考生文件夹下的解 决方案文件 proj2,该工程中含有一个源程序文件proj2 cpp。其中定义了类 Set和用于测试该类的主函数 main。类 Set是一个用于描述字符集合的类,在该字符集合中,元素不能重复 (将 “a”和 “A”视为不同元素 ),元素最大个数为 100。为该类实现一个构造函数 Set(char*s),它用一个字符串来构造一个集合对象,当字符串中出现重复字符时,只放入一个字符。此外,还要为该类实现另一个成员函数 InSet(char c),用于测试一个字符 c是否在一个集合中,若在,则返回 tru

5、e;否则返回 false。 构造函数 Set和成员函数 InSet的部分实现代码已在文件 proj2 cpp中给出,请在标有注释 “ TODO: ”的行中添加适当的代码,将这两个函数补充完整,以实现其功能。 提示:在实现构造函数时,可以调用 InSet函数来判断一个字符是否已经在集合中。 注意:只在指定位置编写适当代码,不要改动程序中的其他内容,也不要删除或移动 “ *found*”。 proj2 cpp #include iostream using namespace std; const int NAXNUN=100; class Set: private: int hum;元素个数 c

6、har setdataNAXNUN;字符数组,用于存储集合元素 public: Set(char*s);构造函数,用字符串 s构造一个集合对象 bool InSet(char c); 判断一个字符 c是否在集合中,若在,返回 true,否则返回 false void Print( )const;输出集合中所有元素 ; Set: Set(char*s) num=0; while(*s) *found* if(_) TODO:添加代码,测试元素在集合中不存在 *found* _; TODO:添加一条语句,加入元素至集合中 s+; bool Set: InSet(char c) for(inti=0

7、; i num; i+) *found* if(_) TODO:添加代码,测试元素 c是否与集合 中某元素相同 *found* _; TODO:添加一条语句,进行 相应处理 return false; void Set: Print( )const cout “Set elements: “ endl; for(int i=0; i num; i+) cout setdatai ; cout endl; int main( ) char sMAXNUM; cin getline(s, MAXNUM-1); 从标准输入中读入一行 Set setobj(s);构造对象 setobj setobj

8、Print( );显示对象 setobj中内容 return0; 三、综合应用题 3 请打开考生文件夹下的解决方案文件 proj3,其中声明的是一个人员信息类,补充编制程序,使其功能完整。在 main函数中给出了一组测试数据,此种情况下程序的输出应该是: Zhang20Tsinghua。 注意:只能在函数 address_change的 “ *333*”和 “*666*”之间填入 若干语句,不要改动程序中的其他内容。 程序最后将结果输出到文件 out dat中。输出函数 writeToFile已经编译为 obj文件,并且在本程序中调用。 proj3 h #include iostream #i

9、nclude string using namespace std; class Person char name20; int age; char*address; public: Person( )age=0; address=0; VOid name change(char*name); 名字修改函数 void age_change(int_age); 年龄修改函数 void address_change(char*add); 地址修改函数 void info_display( ); 人员信息显示 Person( ); 析构函数 ; void writeToFile(const char

10、*path); proj3 cpp #include iostream #include string #include“proj3 h“ using namespace std; void Person: name_change(char*_name) strcpy(name, _name); void Person: age_change(int_age) age=_age; void Person: address_change(char*_add) if(address!=NULL)delete address; *333* *666* void Person: info_displa

11、y( ) cout name t age t; if(address!=NULL) cout addreSS endl; cout endl; Person: Person( ) if(address!=NULL) delete address; void main( ) Person p1; p1 name_change(“Zhang“); p1 age_change(20); p1 address_change(“Tsinghua University“); p1 address_change(“Tsinghua“); p1 info_display( ); writeToFile(“ “

12、); 国家二级 C+机试(操作题)模拟试卷 498答案与解析 一、基本操作题 1 【正确答案】 (1): base(the_base), bonus(the_bonus), tax(the_tax) (2) Salary( )delete staff_id; (3)cout “实发工资: “ pay get, NetPay( ) endl: 【试题解析】 (1)主要考查考生对构造函数的 掌握情况,构造函数的成员初始列表要把形参放在括号内。 (2)主要考查考生对析构函数的掌握情况,析构函数使用 delete释放指针, delete后要跟标识符 “ ”。 (3)主要考查考生对成员函数调用的掌握情况

13、,调用类的成员函数使用标识符“ ”,而不是作用域符 “: ”。 二、简单应用题 2 【正确答案】 (1)!InSet(*s) (2)setdatanum+=*s (3)c=setdatai (4)return true 【试题解析】 (1)主要考查考生对成员函数的掌握,题目要求:添 加代码,测试元素在集合中不存在,由类的定义可知函数 bool InSet(char c)可以测试字符 c是否在集合中,因此这里直接调用函数 bool InSet(char c)即可。 (2)题目要求:添加一条语句,加入元素至集合中,集合用数组 setdata表示,直接把元素添加到数组中即可。 (3)主要考查考生对

14、if语句的掌握,题目要求:测试元素 c是否与集合中某元素相同。前一条语句是个 for循环,利用下标 i遍历整个集合,通过 if语句中的判断条件判断 c是否在集合中,用 “=”判断。 (4)主要考查考生对成员函数的掌握 ,先看函数的注释:判断一个字符 c是否在集合中,若在,返回 true,否则返回 false。 if语句成立时,说明字符 c存在于集合中,因此应该返回 true。 三、综合应用题 3 【正确答案】 address=new charstrlen(_add)+1;给类成员变量动态分配空间 strcpy(address, _add);把字符串 _add复制给 address 【试题解析】 函数 address_change(char*_add)的功能是地址修改,也就是说通过该函数把类的地址修改为 add字符串。类 的私有成员 address是字符指针,因此首先要给 address分配空间,通过 new语句来实现:address=newcharstrlen(_add)+1;。接下来就是要复制字符串,使用系统函数strcpy,其用法为 strcpy(参数 1,参数 2),将参数 2的内容复制到参数 1中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1