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

下载本文档

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

文档简介

1.实现一个大小固定的整型数据元素会合及其相应操作(元素的增添、删除;判断两个会合能否相等;判断一个数能否为会合中的元素;交集;并集)。会合中的元素;交集;并集)。P76.列#include<iostream.h>constmaxCard=16;enumErrCode{noErr,overflow};enumBool{False,True};classSet{intelems[maxCard];intcard;public:voidEmptySet(){card=0;}BoolMember(int);ErrCodeAddElem(int);voidRmvElem(int);voidCopy(Set*);BoolEqual(Set*);voidPrint();voidIntersect(Set*,Set*);ErrCodeUnion(Set*,Set*);};BoolSet::Member(intelem){for(inti=0;i<card;++i)if(elems[i]==elem)returnTrue;returnFalse;}ErrCodeSet::AddElem(intelem){if(Member(elem))returnnoErr;//会合中元素个数的最大值,默以为int型//错误代码//Bool种类定义//定义会合类//储存元素的数组//会合中元素的个数//判断一个数能否为会合中的元素//向会合中增添元素//删除会合中的元素//把目前会合拷贝到形参指针指向的会合中//判断两个会合能否相等//交集//并集if(card<maxCard){elems[card++]=elem;returnnoErr;}returnoverflow;}voidSet::RmvElem(intelem){for(inti=0;i<card;++i)if(elems[i]==elem){for(;i<card-1;++i)elems[i]=elems[i+1];--card;return;}}voidSet::Copy(Set*set){for(inti=0;i<card;++i)set->elems[i]=elems[i];set->card=card;}BoolSet::Equal(Set*set){if(card!=set->card)returnFalse;for(inti=0;i<card;++i)//判断目前会合的某元素是不是set所指会合中的元素if(!set->Member(elems[i]))returnFalse;returnTrue;}voidSet::Print(){cout<<"{";for(inti=0;i<card;++i)cout<<elems[i]<<";";cout<<"}\n";}voidSet::Intersect(Set*set,Set*res)〃 交集:*thisA*set->*res{res->card=0;for(inti=0;i<card;++i)for(intj=0;j<set->card;++j)if(elems[i]==set->elems[j]){res->elems[res->card++]=elems[i];break;}}ErrCodeSet::Union(Set*set,Set*res)〃 并集:*setU*this->*res{set->Copy(res);for(inti=0;i<card;++i)if(res->AddElem(elems[i])==overflow)returnoverflow;returnnoErr;}//下边是测试用的主程序voidmain(){Sets1,s2,s3;.EmptySet();.EmptySet();s3.EmptySet();s1.AddElem(10);s1.AddElem(20);s1.AddElem(30);s1.AddElem(40);s2.AddElem(30);s2.AddElem(50);s2.AddElem(10);s2.AddElem(60);cout<<"s1="; s1.Print();cout<<"s2="; s2.Print();s2.RmvElem(50);cout<<"s2-{50}=";s2.Print();if(s1.Member(20))cout<<"20isins1\n";s1.Intersect(&s2,&s3);cout<<"s1intsecs2=";s3.Print();s1.Union(&s2,&s3);cout<<"s1unions2=";s3.Print();if(!s1.Equal(&s2))cout<<"s1!=s2\n";}实现一个大小可变的整型数据元素会合,会合可储存的数据元素个数在对象结构时给定,由结构函数为数据元素分派存储空间,在对象被开释时由析构函数开释储存空间。//会合中元素个数的缺省最大值//会合中元素个数的缺省最大值//错误代码//Bool种类定义//元素的最大个数//储存元素的数组//会合中元素的个数constmaxCard=16;enumErrCode{noErr,overflow};enumBool{False,True};classSet{intsize;int*elems;intcard;public:Set(intsz=maxCard){card=0;size=sz;elems=newint[size];}~Set(){delete[]elems;}BoolMember(int);ErrCodeAddElem(int);voidRmvElem(int);voidCopy(Set*);BoolEqual(Set*);voidPrint();voidIntersect(Set*,Set*);ErrCodeUnion(Set*,Set*);};BoolSet::Member(intelem){for(inti=0;i<card;++i)if(elems[i]==elem)returnTrue;returnFalse;}ErrCodeSet::AddElem(intelem){if(Member(elem))returnnoErr;if(card<size){elems[card++]=elem;returnnoErr;}returnoverflow;}voidSet::RmvElem(intelem){for(inti=0;i<card;++i)if(elems[i]==elem){for(;i<card-1;++i)elems[i]=elems[i+1];--card;}}return;}voidSet::Copy(Set*set){if(set->size<size){delete[]set->elems;set->elems=newint[size];set->size=size;}for(inti=0;i<card;++i)set->elems[i]=elems[i];set->card=card;}BoolSet::Equal(Set*set){if(card!=set->card)returnFalse;for(inti=0;i<card;++i)if(!set->Member(elems[i]))returnFalse;returnTrue;}voidSet::Print(){cout<<"{";for(inti=0;i<card-1;++i)cout<<elems[i]<<";";if(card>0)cout<<elems[card-1];cout<<"}\n";voidSet::Intersect(Set*set,Set*res){if(res->size<size){delete[]res->elems;res->elems=newint[size];res->size=size;}res->card=0;for(inti=0;i<card;++i)for(intj=0;j<set->card;++j)if(elems[i]==set->elems[j]){res->elems[res->card++]=elems[i];break;}}ErrCodeSet::Union(Set*set,Set*res){if(res->size<size+set->size){delete[]res->elems;res->elems=newint[size+set->size];res->size=size+set->size;}set->Copy(res);for(inti=0;i<card;++i)if(res->AddElem(elems[i])==overflow)returnoverflow;returnnoErr;}voidmain(){Sets1,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);cout<<"s1="; s1.Print();cout<<"s2="; s2.Print();s2.RmvElem(50);cout<<"s2-{50}=";s2.Print();if(s1.Member(20))cout<<"20isins1\n";s1.Intersect(&s2,&s3);cout<<"s1intsecs2=";s3.Print();s1.Union(&s2,&s3);cout<<"s1unions2="; s3.Print();if(!s1.Equal(&s2))cout<<"s1!=s2\n";}设计一个学生类student,它拥有的私有数据成员是:注册号、姓名、数学成绩、英语成绩、计算机成绩;拥有的公有成员函数是:求三门课程总成绩的函数 sum();求三门课均匀成绩 average();显示学生数据信息的函数 print();获得学生注册号的函数get_reg_num;设置学生数据信息的函数set_stu_inf()。P81。6编制主函数,说明一个student类对象的数组并进行全班学生信息的输入与设置,尔后求出每一个学生的总成绩、 均匀成绩、全班学生总成绩最高分、全班学生总均匀分,并在输入一个注册号后,输出该学生有关的所有数据信息。#include<iostream>#include<string>usingnamespacestd;classStudent{private:intnum;charname[10];floatmath;floatenglish;floatcomputer;public:voidset_stu_inf(intn,char*ch,floatm,floate,floatc){num=n;strcpy(name,ch);math=m;english=e;computer=c;}floatsum(){return(math+english+computer);}floataverage(){return(math+english+computer)/3;}intget_reg_num(){returnnum;}voidprint(){cout<<"学号:"<<num<<endl<<"姓名:"<<name<<endl<<"数学:"<<math<<endl<<"英语:"<<english<<endl<<"计算机:"<<computer<<endl<<"总分:"<<sum()<<endl<<"均匀分:"<<average()<<endl;};intmain()Studentstu[50];inti,q,a,z,x,max=0,aver=0;//i 为循环变量,q:学号;a:数学成绩;//z:英语成绩;x:计算机成绩intcount=0;//表示学生人数char*we=newchar[10];//输入学生信息for(;;)(若输入的学号为 0(若输入的学号为 0则表示退出)"<<endl;cin>>q>>we>>a>>z>>x;if(q==0)break;stu[count++].set_stu_inf(q,we,a,z,x);if(max>a+z+x);elsemax=a+z+x;aver+=(a+z+x);//输出所有学生信息cout<<"学生信息为:"<<endl<<endl;for(i=0;i<count;i++){stu[i].print();cout<<endl;cout<<"全班学生总成绩最高分为"<<max<<endl<<"全班学生总均匀分为"<<aver/3<<endl<<endl;cout<<"请输入要查的学生的学号:"<<endl;cin>>q;for(i=0;i<count;i++){if(q==stu[i].get_reg_num()){cout<<"此学生信息为:"<<endl;stu[i].print();break;}}if(i==count)cout<<"查无这人"<<endl;return0;}4.定义复数类complex,使用友元函数,达成复数的加法、减法、乘数运算,以及复数的输出。#include<iostream.h>classComplex{doublereal;doubleimage;public:Complex(doubler=0,doublei=0){real=r;image=i;}friendvoidinputcomplex(Complex&comp);friendComplexaddcomplex(Complex&c1,Complex&c2);}}friendComplexsubcomplex(Complex&c1,Complex&c2);friendComplexmulcomplex(Complex&c1,Complex&c2);friendvoidoutputcomplex(Complex&comp);};voidinputcomplex(Complex&comp){cin>>comp.real>>comp.image;}Complexaddcomplex(Complex&c1,Complex&c2){Complexc;c.real=c1.real+c2.real;c.image=c1.image+c2.image;returnc;}Complexsubcomplex(Complex&c1,Complex&c2){Complexc;c.real=c1.real-c2.real;c.image=c1.image-c2.image;returnc;}Complexmulcomplex(Complex&c1,Complex&c2){Complexc;c.real=c1.real*c2.real-c1.image*c2.image;c.image=c1.real*c2.image+c1.image*c2.real;returnc;voidoutputcomplex(Complex&comp){cout<<"("<<comp.real<<","<<comp.image<<")";}voidmain(){Complexc1,c2,result;cout<<"请输入第一个复数的实部和虚部 :"<<endl;inputcomplex(c1);cout<<"请输入第二个复数的实部和虚部 :"<<endl;inputcomplex(c2);result=addcomplex(c1,c2);outputcomplex(c1);cout<<"+";outputcomplex(c2);cout<<"=";outputcomplex(result);cout<<"\n "<<endl;result=subcomplex(c1,c2);outputcomplex(c1);cout<<"-";outputcomplex(c2);cout<<"=";outputcomplex(result);cout<<"\n "<<endl;result=mulcomplex(c1,c2);outputcomplex(c1);cout<<"*";outputcomplex(c2);cout<<"=";outputcomplex(result);cout<<endl;5.某单位所有员工依据领取薪金的方式分为以下几类:时薪工( hourlyworker)、计件工(pieceworker)、经理(manager)、佣金工(commissionworker)。时薪工按工作的小时支付薪资,关于每周超出50小时的加班时间,依据附带50%薪资支付薪资。按生产的每件产品给计件工支付固定薪资,假定该工人仅制造一种产品。经理每周获得固定的薪资。佣金工每周获得少量的固定保底薪资,加上该工人在一周内总销售的固定百分比。试编制一个程序来实现该单位的所有员工类,并加以测试。P125#include<iostream.h>#include<string.h>classemployee //雇员类{protected:charname[10]; //姓名charemp_id[8]; //员工号doublesalary; //薪金数public:voidsetinfo(char*empname,intempsex,char*empid){strcpy(name,empname);strcpy(emp_id,empid);}voidgetinfo(char*empname,char*empid){strcpy(empname,name);strcpy(empid,emp_id);}doublegetsalary(){returnsalary;}};//设置雇员的基本信息//获得雇员的基本信息//获得所应得的总薪金数classhourlyworker:publicemployee//时薪工protected:inthours;doubleperhourpay;public:hourlyworker(){hours=0;perhourpay=15.6;}intgethours(){returnhours;}voidsethours(inth){hours=h;}doublegetperhourpay(){returnperhourpay;}voidsetperhourpay(doublepay){perhourpay=pay;}voidcomputepay(){if(hours<=40)//工作的小时数//每小时应得的酬劳//获得某人工作的小时数//设置某人工作的小时数//获得每小时应得的酬劳//设置每小时应得的酬劳//计算薪资salary=perhourpay*hours;elsesalary=perhourpay*40+(hours-40)*1.5*perhourpay;};classpieceworker:publicemployee{protected:intpieces;doubleperpiecepay;public:pieceworker(){pieces=0;perpiecepay=26.8;}intgetpieces(){returnpieces;}voidsetpieces(intp){pieces=p;}doublegetperpiecepay(){returnperpiecepay;}voidsetperpiecepay(doubleppp){perpiecepay=ppp;}voidcomputepay(){salary=pieces*perpiecepay;}};classmanager:publicemployee{public:voidsetsalary(doubles){salary=s;}};classcommissionworker:publicemployee{protected:doublebasesalary;doubletotal;//计件工//每周所生产的工件数//每个工件所应得的薪资数//设置生产的工件总数//经理类//设置经理的薪资数//佣金工类//保底薪资//一周内的总销售额doublepercent;//提成的额度public:commissionworker(){basesalary=500;total=0;percent=0.01;}doublegetbase(){returnbasesalary;}voidsetbase(doublebase){basesalary=base;}doublegettotal(){returntotal;}voidsettotal(doublet){total=t;}doublegetpercent(){returnpercent;}doublesetpercent(doublep){percent=p;}voidcomputepay(){salary=basesalary+total*percent;}};voidmain(){//小时工<<emp_id//小时工<<emp_idhourlyworkerhworker;hworker.setinfo("John",0,"001");hworker.sethours(65);hworker.getinfo(name,emp_id);putepay();cout<<"hourlyworker"<<name<<"'sidis:<<"andsalaryis:"<<hworker.getsalary()<<endl;pieceworkerpworker; //计件工pworker.setinfo("Mark",0,"002");pworker.setpieces(100);putepay();pworker.getinfo(name,emp_id);cout<<"pieceworker"<<name<<"'sidis:"<<emp_id<"andsalaryis:"<<pworker.getsalary()<<endl;commissionworkercworker; //佣金工cworker.settotal(234.6);cworker.setinfo("Jane",0,"003");putepay();cworker.getinfo(name,emp_id);cout<<"commissionworker"<<name<<"'sidis:"<<emp_id<"andsalaryis:"<<cworker.getsalary()<<endl;managermana;mana.setinfo("Mike",1,"004");mana.setsalary(3500);mana.getinfo(name,emp_id);cout<<"manager"<<name<<"'sidis:"<<emp_id<"andsalaryis:"<<mana.getsalary()<<endl;}6.考虑大学的学生状况,试利用单调继承来实现学生和毕业生两个类,设计有关的数据成员及函数,编写程序对继承状况进行测试。P133.11实P57提示:作为学生必定有学号、姓名、性别、学校名称及入学时间等基本信息,而毕业生除了这些信息外,还应有毕业时间、所获学位的信息,可依据这些内容设计类的数据成员,也可加入一些其余信息,除了设计对数据进行相应操作的成员函数外,还要考虑到成员种类、继承模式,并在main()函数中进行相应测试。可设计多种继承模式来测试继承的属性。#include<iostream>#include<string>usingnamespacestd;classStudent//classStudent//定义基类Student{public: //公有函数成员Student(intn,char*na,intg):number(n),grade(g){strcpy(name,na);}intgetNumber(){returnnumber;}char*getName(){returnname;}intgetGrade(){returngrade;}"<<number<<endl"<<name<<endl"<<grade<<endl;//私有数据成员"<<number<<endl"<<name<<endl"<<grade<<endl;//私有数据成员//学号//姓名//年级学号:<<"姓名:<<"年级:cout<<}private:intnumber;charname[20];intgrade;};classGraduate:publicStudent{//定义毕业生类chardesignSubject[20];public:Graduate(intn,char*na,char*deSub,intg=4):Student(n,na,g){strcpy(designSubject,deSub);}voiddisplay(){Student::display();cout<<"设计题目:"<<designSubject<<endl;}};intmain(){//创立对象Studentli(2,"LiMing",3);Graduatezhang(3,"ZhangGang","学生成绩管理系统");//显示对象的有关信息li.display();cout<<endl<<" "<<endl;zhang.display();return0;}.定义一个哺乳动物类,再由此派生出人类、狗类和猫类,这些类中均有 speak()函数,察看在调用过程中,究竟使用了哪一个类的speak()函数。P133. 12#include<iostream>#include<string>usingnamespacestd;classAnimal{floatweight;public:voidspeak(){}voidsetWeight(floatwt){weight=wt;}floatgetWeight(){returnweight;}};classHuman:publicAnimal{public:voidspeak(){cout<<"说话"<<endl;}};classCat:publicAnimal{public:voidspeak(){cout<<"喵喵"<<endl;}};classDog:publicAnimal{public:voidspeak(){cout<<"汪汪"<<endl;}};intmain(){//定义三个对象Humanhm;Catcat;Dogdog;//调用不一样类的speak函数cout<<"人:";hm.speak();cout<<"猫:";cat.speak();cout<<"狗:";dog.speak();return0;}.设计一个能细分为矩形、三角形、圆形和椭圆形的图形类。使用继承将这些图形分类,找出能作为基类部分的共同特点(如宽、高、中心点等)和方法(如初始法、求面积等),并看看这些图形可否进一步区分为子类。P133.10#include<iostream>usingnamespacestd;classFigure //定义基类图形类{public: //公有函数成员Figure(intwid){width=wid;}floatarea(){}intgetWidth(){returnwidth;}private: //私有数据成员intwidth; //宽度或半径};classRectangle:publicFigure{//定义矩形类intheight;public:Rectangle(intwid,inthei):Figure(wid){height=hei;}floatarea(){returngetWidth()*height;}};classTriangle:publicFigure{//定义三角形类intheight;public:Triangle(intwid,inthei):Figure(wid){height=hei;floatarea(){return1.0/2*getWidth()*height;}};classCircle:publicFigure{//定义圆类public:Circle(intwid):Figure(wid){}floatarea(){return3.14*getWidth()*getWidth();}};intmain(){Rectanglerect(5,4);Triangletri(5,4);Circlecir(5);cout<<"矩形的面积是:"<<rect.area()<<endl<<"三角形的面积是:"<<tri.area()<<endl<<"圆的面积是:"<<cir.area()<<endl;return0;}eat9.设计一个基类animal和它的派生类 tiger、sheep,实现虚函数。eat提示:可自行定义这些类的成员变量,但 animal基类中应有动物性其余成员变量,但要说明每种动物的叫 soar()及吃()的成员函数,可用cout输出来表示。要求每个派生类生成两个对象,打乱序次存于一个数组中,而后用循环程序访问其叫与吃的成员函数,一定用到虚函数。P173.9#include<iostream>usingnamespacestd;classanimal{protected:charsex;public:virtualvoidsoar()=0;virtualvoideat()=0;};classtiger:publicanimal{public:tiger(chars='f'){sex=s;}voidsoar(){cout<<"tiger吼"<<endl;}voideat(){cout<<"tiger吃肉"<<endl;}};classsheep:publicanimal{public:sheep(chars='f'){sex=s;}voidsoar(){cout<<"sheep: 咩"<<endl;}voideat(){cout<<"sheep吃草"<<endl;}};intmain(){tigert1,t2;sheeps1,s2;animal*array[4]={&t1,&s1,&t2,&s2};for(inti=0;i<4;i++){array[i]->eat();array[i]->soar();}return0;}10.有三角形、正方形和圆形三种图形,求它们各自的面积。能够从中抽象出一个基类,在基类中申明一个虚函数,用来求面积,并利用单界面、多实现版本设计各个图形求面积的方法。P173.10#include<iostream>//抽象类的定义////抽象类的定义//三角形类classshape{public:virtualfloatarea()=0;};classtriangle:publicshape{protected:floath,w;public:triangle(floathh,floatww){h=hh;w=ww;}floatarea(){returnh*w*0.5;}};classrectangle:publictriangle//矩形类{public:rectangle(floath,floatw):triangle(h,w){}floatarea(){returnh*w;}};classcircle:publicshape //圆类{private:floatradius;floatradius;public:circle(floatr){radius=r;}floatarea(){returnradius*radius*3.14;}};intmain(){shape*s[4]; //指针数组s[0]=newtriangle(3,4);s[1]=newrectangle(2,4);s[2]=newcircle(5);cout<<"三角形、矩形和圆的面积分别为:"<<endl;for(inti=0;i<3;i++)cout<<s[i]->area()<<'\t';cout<<endl;假定距离以英里计kilometre中,假定假定距离以英里计kilometre中,假定.编写程序,计算汽车运转的时间,第一成立基类 car,此中含有数据成员 distance储存两点间的距离,算,速度为每小时80英里,使用虚函数travel_time()计算并显示经过这段距离的时间,在派生类距离以千米计算,速度为每小时120千米,使用函数travel_time()计算并显示经过这段距离的时间。#include<iostream>usingnamespacestd;classcar{protected:doubledistance;public:ca

温馨提示

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

评论

0/150

提交评论