c++机考题目加答案(共30页)_第1页
c++机考题目加答案(共30页)_第2页
c++机考题目加答案(共30页)_第3页
c++机考题目加答案(共30页)_第4页
c++机考题目加答案(共30页)_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上1. 实现一个大小固定的整型数据元素集合及其相应操作(元素的添加、删除;判断两个集合是否相等;判断一个数是否为集合中的元素;交集;并集)。P76.列3.24#include const maxCard = 16; / 集合中元素个数的最大值,默认为int型enum ErrCode noErr, overflow; / 错误代码enum Bool False, True; / Bool类型定义class Set / 定义集合类 int elemsmaxCard; / 存储元素的数组 int card; / 集合中元素的个数public: void EmptySet( )

2、card = 0; Bool Member(int); / 判断一个数是否为集合中的元素 ErrCode AddElem(int); / 向集合中添加元素 void RmvElem(int); / 删除集合中的元素 void Copy(Set *); / 把当前集合拷贝到形参指针指向的集合中 Bool Equal(Set *); / 判断两个集合是否相等 void Print( ); void Intersect(Set *, Set *); / 交集 ErrCode Union(Set *, Set *); / 并集;Bool Set:Member(int elem)for(int i=0;

3、icard;+i)if(elemsi = elem)return True;return False;ErrCode Set:AddElem(int elem)if(Member(elem)return noErr;if(card maxCard)elemscard+ = elem;return noErr; return overflow;void Set:RmvElem(int elem)for(int i = 0; icard; +i)if(elemsi = elem)for(;icard-1;+i)elemsi = elemsi+1;-card; return;void Set:Cop

4、y(Set *set)for(int i = 0; i elemsi = elemsi;set-card = card;Bool Set:Equal(Set *set)if(card != set-card)return False; for(int i = 0; i Member(elemsi) return False;return True;void Set:Print( )cout;for(int i = 0; i card; +i)cout elemsi ;cout*resres-card = 0;for(int i = 0; i card; +i)for(int j = 0; j

5、card; +j)if(elemsi = set-elemsj)res-elemsres-card+ = elemsi;break;ErrCode Set:Union(Set *set,Set *res) / 并集:*set*this-*resset-Copy(res);for(int i = 0; i AddElem(elemsi) = overflow)return overflow; return noErr;/ 下面是测试用的主程序void main( )Set s1, s2, s3;s1.EmptySet( );s2.EmptySet( );s3.EmptySet( );s1.Add

6、Elem(10);s1.AddElem(20);s1.AddElem(30); s1.AddElem(40);s2.AddElem(30);s2.AddElem(50);s2.AddElem(10); s2.AddElem(60);couts1=; s1.Print( );couts2=;s2.Print( );s2.RmvElem(50);couts2-50=;s2.Print( );if(s1.Member(20)cout20 is in s1n;s1.Intersect(&s2,&s3);couts1 intsec s2 =;s3.Print( );s1.Union(&s2,&s3);c

7、outs1 union s2 =;s3.Print( );if(!s1.Equal(&s2)couts1!=s2n;2. 实现一个大小可变的整型数据元素集合,集合可存储的数据元素个数在对象构造时给定,由构造函数为数据元素分配存储空间,在对象被释放时由析构函数释放存储空间。P78 .3.25#include const maxCard=16; / 集合中元素个数的缺省最大值enum ErrCode noErr, overflow; / 错误代码enum Bool False, True; / Bool类型定义class Set int size; / 元素的最大个数 int *elems; /

8、存储元素的数组 int card; / 集合中元素的个数 public:Set(int sz=maxCard)card=0;size=sz;elems=new intsize;Set( )delete elems;Bool Member(int);ErrCode AddElem(int);void RmvElem(int);void Copy(Set *);Bool Equal(Set *);void Print( );void Intersect(Set *, Set *);ErrCode Union(Set *, Set *);Bool Set:Member(int elem)for(in

9、t i=0;icard;+i)if(elemsi=elem)return True;return False;ErrCode Set:AddElem(int elem)if(Member(elem)return noErr;if(cardsize)elemscard+=elem; return noErr; return overflow;void Set:RmvElem(int elem)for(int i=0;icard;+i)if(elemsi=elem)for(;isizeelems;set-elems = new intsize;set-size = size;for(int i=0

10、;ielemsi=elemsi;set-card=card;Bool Set:Equal(Set *set)if(card!=set-card)return False; for(int i=0;iMember(elemsi)return False;return True;void Set:Print( )cout;for(int i=0;icard-1;+i)coutelemsi0)coutelemscard-1;coutsizeelems; res-elems = new intsize; res-size = size;res-card=0;for(int i=0;icard;+i)f

11、or(int j=0;jcard;+j)if(elemsi=set-elemsj)res-elemsres-card+=elemsi;break;ErrCode Set:Union(Set *set, Set *res)if(res-sizesize)delete res-elems;res-elems = new intsize+set-size;res-size = size+set-size;set-Copy(res);for(int i=0;iAddElem(elemsi)=overflow)return overflow;return noErr;void main( )Set s1

12、, s2, s3;s1.AddElem(10);s1.AddElem(20);s1.AddElem(30); s1.AddElem(40);s2.AddElem(30);s2.AddElem(50);s2.AddElem(10); s2.AddElem(60);couts1=; s1.Print( );couts2=;s2.Print( );s2.RmvElem(50);couts2-50=;s2.Print( );if(s1.Member(20)cout20 is in s1n;s1.Intersect(&s2,&s3);couts1 intsec s2 =;s3.Print( );s1.U

13、nion(&s2,&s3);couts1 union s2 =;s3.Print( );if(!s1.Equal(&s2)couts1!=s2n;3. 设计一个学生类student,它具有的私有数据成员是:注册号、姓名、数学成绩、英语成绩、计算机成绩;具有的公有成员函数是:求三门课程总成绩的函数sum();求三门课平均成绩average();显示学生数据信息的函数print();获取学生注册号的函数get_reg_num;设置学生数据信息的函数set_stu_inf()。P81。6编制主函数,说明一个student类对象的数组并进行全班学生信息的输入与设置,而后求出每一个学生的总成绩、平均成绩

14、、全班学生总成绩最高分、全班学生总平均分,并在输入一个注册号后,输出该学生有关的全部数据信息。#include#includeusing namespace std;class Student private: int num; char name10; float math; float english; float computer;public:void set_stu_inf(int n,char *ch,float m,float e,float c)num=n; strcpy(name,ch); math=m; english=e; computer=c; float sum()r

15、eturn (math+english+computer);float average()return (math+english+computer)/3;int get_reg_num()return num;void print()cout学号:numendl姓名:nameendl数学:mathendl英语:englishendl计算机:computerendl总分:sum()endl平均分:average()endl; int main() Student stu50;int i,q,a,z,x,max=0,aver=0; / i为循环变量,q:学号;a:数学成绩;/ z:英语成绩;x:

16、计算机成绩int count = 0; /表示学生人数char* we=new char10;/ 输入学生信息for(;)cout请输入学生的学号、姓名、数学成绩、英语成绩、计算机成绩:(若输入的学号为0则表示退出) qweazx;if (q =0 )break;stucount+.set_stu_inf(q,we,a,z,x);if(maxa+z+x);else max=a+z+x;aver+=(a+z+x);/ 输出所有学生信息cout学生信息为:endlendl;for( i = 0; i count; i+)stui.print();coutendl;cout全班学生总成绩最高分为ma

17、xendl全班学生总平均分为aver/3endlendl;cout请输入要查的学生的学号:q;for( i = 0; i count; i+)if (q=stui.get_reg_num()cout此学生信息为:endl;stui.print();break;if (i=count)cout查无此人endl;return 0;4. 定义复数类complex,使用友元函数,完成复数的加法、减法、乘数运算,以及复数的输出。P95. 4.8#includeclass Complexdouble real;double image;public:Complex(double r = 0, double

18、 i = 0)real = r; image = i;friend void inputcomplex(Complex &comp);friend Complex addcomplex(Complex &c1, Complex &c2); friend Complex subcomplex(Complex &c1, Complex &c2);friend Complex mulcomplex(Complex &c1, Complex &c2);friend void outputcomplex(Complex &comp);void inputcomplex(Complex &comp)cin

19、 comp.real comp.image;Complex addcomplex(Complex &c1, Complex &c2)Complex c;c.real = c1.real + c2.real;c.image = c1.image + c2.image;return c;Complex subcomplex(Complex &c1, Complex &c2)Complex c;c.real = c1.real - c2.real;c.image = c1.image - c2.image;return c;Complex mulcomplex(Complex &c1, Comple

20、x &c2)Complex c;c.real = c1.real * c2.real - c1.image * c2.image;c.image = c1.real * c2.image + c1.image * c2.real;return c;void outputcomplex(Complex &comp)cout ( comp.real , comp.image );void main()Complex c1,c2,result;cout请输入第一个复数的实部和虚部:endl;inputcomplex(c1);cout请输入第二个复数的实部和虚部:endl;inputcomplex(c

21、2);result=addcomplex(c1,c2);outputcomplex(c1);cout+;outputcomplex(c2);cout=;outputcomplex(result);coutn-endl;result=subcomplex(c1,c2);outputcomplex(c1);cout-;outputcomplex(c2);cout=;outputcomplex(result);coutn-endl;result=mulcomplex(c1,c2);outputcomplex(c1);cout*;outputcomplex(c2);cout=;outputcomple

22、x(result);coutendl;5. 某单位所有员工根据领取薪金的方式分为如下几类:时薪工(hourlyworker)、计件工(pieceworker)、经理(manager)、佣金工(commissionworker)。时薪工按工作的小时支付工资,对于每周超过50小时的加班时间,按照附加50%薪水支付工资。按生产的每件产品给计件工支付固定工资,假定该工人仅制造一种产品。经理每周得到固定的工资。佣金工每周得到少许的固定保底工资,加上该工人在一周内总销售的固定百分比。试编制一个程序来实现该单位的所有员工类,并加以测试。P125 5.15#include#include class empl

23、oyee / 雇员类protected:char name10; / 姓名char emp_id8; / 职工号double salary; / 薪金数public: void setinfo(char *empname,int empsex,char*empid) / 设置雇员的基本信息strcpy(name,empname);strcpy(emp_id,empid);void getinfo(char*empname,char*empid) / 取得雇员的基本信息strcpy(empname,name);strcpy(empid,emp_id);double getsalary() / 取

24、得所应得的总薪金数return salary;class hourlyworker:public employee / 时薪工protected:int hours; / 工作的小时数double perhourpay; / 每小时应得的报酬public:hourlyworker()hours=0;perhourpay=15.6;int gethours() / 取得某人工作的小时数return hours;void sethours(int h) / 设置某人工作的小时数hours=h;double getperhourpay() / 取得每小时应得的报酬return perhourpay;

25、void setperhourpay(double pay) / 设置每小时应得的报酬perhourpay=pay;void computepay() / 计算工资if(hours=40) salary=perhourpay*hours;elsesalary=perhourpay*40+(hours-40)*1.5*perhourpay;class pieceworker:public employee / 计件工protected:int pieces; / 每周所生产的工件数double perpiecepay; / 每个工件所应得的工资数public:pieceworker()piece

26、s=0;perpiecepay=26.8;int getpieces()return pieces;void setpieces(int p) / 设置生产的工件总数pieces=p;double getperpiecepay()return perpiecepay;void setperpiecepay(double ppp) perpiecepay=ppp;void computepay() salary=pieces*perpiecepay;class manager:public employee / 经理类public:void setsalary(double s) / 设置经理的

27、工资数salary=s;class commissionworker:public employee / 佣金工类protected:double basesalary; / 保底工资double total; / 一周内的总销售额double percent; / 提成的额度public:commissionworker()basesalary=500;total=0;percent=0.01;double getbase() return basesalary;void setbase(double base) basesalary=base;double gettotal() retur

28、n total;void settotal(double t) total =t;double getpercent() return percent;double setpercent(double p) percent=p;void computepay() salary=basesalary+total*percent;void main()char name10,emp_id9;hourlyworker hworker; / 小时工hworker.setinfo(John,0,001);hworker.sethours(65);hworker.getinfo(name,emp_id);

29、putepay();couthourlyworker names id is: emp_id and salary is:hworker.getsalary()endl;pieceworker pworker; / 计件工pworker.setinfo(Mark,0,002);pworker.setpieces(100);putepay();pworker.getinfo(name,emp_id);coutpieceworker names id is: emp_id and salary is:pworker.getsalary()endl;commissionworker cworker;

30、 / 佣金工cworker.settotal(234.6);cworker.setinfo(Jane,0,003);putepay();cworker.getinfo(name,emp_id);coutcommissionworker names id is: emp_id and salary is:cworker.getsalary()endl;manager mana;mana.setinfo(Mike,1,004);mana.setsalary(3500);mana.getinfo(name,emp_id);coutmanager names id is: emp_id and sal

31、ary is:mana.getsalary()endl;6. 考虑大学的学生情况,试利用单一继承来实现学生和毕业生两个类,设计相关的数据成员及函数,编写程序对继承情况进行测试。P133. 11 实P57提示:作为学生一定有学号、姓名、性别、学校名称及入学时间等基本信息,而毕业生除了这些信息外,还应有毕业时间、所获学位的信息,可根据这些内容设计类的数据成员,也可加入一些其他信息,除了设计对数据进行相应操作的成员函数外,还要考虑到成员类型、继承模式,并在main()函数中进行相应测试。可设计多种继承模式来测试继承的属性。#include#includeusing namespace std;cla

32、ss Student/ 定义基类Studentpublic: / 公有函数成员Student(int n,char *na,int g):number(n),grade(g)strcpy(name,na);int getNumber()return number;char * getName()return name;int getGrade()return grade;void display()cout学号:numberendl姓名:nameendl年级:gradeendl;private:/ 私有数据成员 int number;/ 学号 char name20;/ 姓名 int grad

33、e;/ 年级;class Graduate:public Student /定义毕业生类char designSubject20;public:Graduate(int n,char *na,char * deSub,int g=4):Student(n,na,g) strcpy(designSubject,deSub);void display()Student:display();cout设计题目:designSubjectendl;int main()/创建对象Student li(2,Li Ming,3);Graduate zhang(3,Zhang Gang,学生成绩管理系统);/

34、显示对象的相关信息li.display();cout endl- endl;zhang.display();return 0;7 定义一个哺乳动物类,再由此派生出人类、狗类和猫类,这些类中均有speak()函数,观察在调用过程中,到底使用了哪一个类的speak()函数。P133. 12#include#includeusing namespace std;class Animalfloat weight;public:void speak()void setWeight(float wt)weight = wt;float getWeight()return weight;class Huma

35、n:public Animalpublic:void speak()cout说话endl;class Cat:public Animalpublic:void speak()cout喵喵endl;class Dog:public Animalpublic:void speak()cout汪汪endl;int main()/ 定义三个对象Human hm;Cat cat;Dog dog;/ 调用不同类的speak函数cout人:;hm.speak();cout猫:;cat.speak();cout狗:;dog.speak();return 0;8 设计一个能细分为矩形、三角形、圆形和椭圆形的图形

36、类。使用继承将这些图形分类,找出能作为基类部分的共同特征(如宽、高、中心点等)和方法(如初始法、求面积等),并看看这些图形能否进一步划分为子类。P133. 10#includeusing namespace std;class Figure/ 定义基类图形类public:/ 公有函数成员 Figure(int wid)width = wid; float area() int getWidth()return width;private:/ 私有数据成员 int width;/ 宽度或半径;class Rectangle:public Figure / 定义矩形类int height;publ

37、ic:Rectangle(int wid, int hei):Figure(wid)height = hei; float area()return getWidth() * height;class Triangle:public Figure / 定义三角形类int height;public:Triangle(int wid, int hei):Figure(wid)height = hei;float area()return 1.0/2* getWidth() * height;class Circle:public Figure / 定义圆类public:Circle(int wi

38、d):Figure(wid)float area()return 3.14 * getWidth() * getWidth();int main()Rectangle rect(5,4);Triangle tri(5,4);Circle cir(5);cout矩形的面积是:rect.area()endl三角形的面积是:tri.area()endl圆的面积是:cir.area()endl;return 0;9.设计一个基类animal和它的派生类tiger、sheep,实现虚函数。提示:可自行定义这些类的成员变量,但animal基类中应有动物性别的成员变量,但要说明每种动物的叫soar()及吃e

39、at()的成员函数,可用cout输出来表示。要求每个派生类生成两个对象,打乱次序存于一个数组中,然后用循环程序访问其叫与吃的成员函数,必须用到虚函数。P173 .9#includeusing namespace std;class animalprotected:char sex;public:virtual void soar()=0;virtual void eat()=0;class tiger:public animalpublic:tiger(char s=f)sex = s;void soar()couttiger 吼endl;void eat()couttiger吃肉endl;c

40、lass sheep:public animalpublic:sheep(char s=f)sex = s;void soar()coutsheep: 咩endl;void eat()coutsheep吃草endl;int main()tiger t1,t2;sheep s1,s2;animal *array4 =&t1,&s1,&t2, &s2;for(int i = 0; i eat();arrayi-soar();return 0;10.有三角形、正方形和圆形三种图形,求它们各自的面积。可以从中抽象出一个基类,在基类中声明一个虚函数,用来求面积,并利用单界面、多实现版本设计各个图形求面积

41、的方法。P173. 10#includeusing namespace std;class shape / 抽象类的定义public:virtual float area()=0;class triangle:public shape / 三角形类protected: float h,w;public:triangle(float hh,float ww)h=hh;w=ww;float area()return h*w*0.5;class rectangle:public triangle / 矩形类public:rectangle(float h,float w):triangle(h,w)

42、float area()return h*w;class circle:public shape / 圆类private: float radius;public:circle(float r)radius=r;float area()return radius*radius*3.14;int main()shape*s4; / 指针数组s0=new triangle(3,4);s1=new rectangle(2,4);s2=new circle(5);cout三角形、矩形和圆的面积分别为:endl;for (int i=0;i3;i+)coutarea()t;coutendl;return 0;1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论