c机考题目加复习资料_第1页
c机考题目加复习资料_第2页
c机考题目加复习资料_第3页
c机考题目加复习资料_第4页
c机考题目加复习资料_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

实现一个大小固定的整型数据元素集合及其相应操作(元素的添加、删除;判断两个集合是否相等;判断一个数是否为集合中的元素;交集;并集)。P#include<iostream.h>constmaxCard=16;//集合中元素个数的最大值,默认为int型enumErrCode{noErr,overflow};//错误代码enumBool{False,True};//Bool类型定义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; 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)//交集:*this∩*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)//并集:*set∪*this->*res{ set->Copy(res); for(inti=0;i<card;++i) if(res->AddElem(elems[i])==overflow) returnoverflow;returnnoErr;}//下面是测试用的主程序voidmain(){ Sets1,s2,s3; s1.EmptySet(); s2.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";}实现一个大小可变的整型数据元素集合,集合可存储的数据元素个数在对象构造时给定,由构造函数为数据元素分配存储空间,在对象被释放时由析构函数释放存储空间。P#include<iostream.h>constmaxCard=16; //集合中元素个数的缺省最大值enumErrCode{noErr,overflow}; //错误代码enumBool{False,True}; //Bool类型定义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(;;) { cout<<"请输入学生的学号、姓名、数学成绩、英语成绩、计算机成绩:(若输入的学号为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;}定义复数类complex,使用友元函数,完成复数的加法、减法、乘数运算,以及复数的输出。P#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;}某单位所有员工根据领取薪金的方式分为如下几类:时薪工(hourlyworker)、计件工(pieceworker)、经理(manager)、佣金工(commissionworker)。时薪工按工作的小时支付工资,对于每周超过50小时的加班时间,按照附加50%薪水支付工资。按生产的每件产品给计件工支付固定工资,假定该工人仅制造一种产品。经理每周得到固定的工资。佣金工每周得到少许的固定保底工资,加上该工人在一周内总销售的固定百分比。试编制一个程序来实现该单位的所有员工类,并加以测试。P#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; else salary=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(){ charname[10],emp_id[9]; hourlyworkerhworker;//小时工 hworker.setinfo("John",0,"001"); hworker.sethours(65); hworker.getinfo(name,emp_id); putepay(); cout<<"hourlyworker"<<name<<"'sidis:"<<emp_id <<"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;}考虑大学的学生情况,试利用单一继承来实现学生与毕业生两个类,设计相关的数据成员及函数,编写程序对继承情况进行测试。P133.11实P57提示:作为学生一定有学号、姓名、性别、学校名称及入学时间等基本信息,而毕业生除了这些信息外,还应有毕业时间、所获学位的信息,可根据这些内容设计类的数据成员,也可加入一些其他信息,除了设计对数据进行相应操作的成员函数外,还要考虑到成员类型、继承模式,并在main()函数中进行相应测试。可设计多种继承模式来测试继承的属性。#include<iostream>#include<string>usingnamespacestd;classStudent //定义基类Student{public: //公有函数成员 Student(intn,char*na,intg):number(n),grade(g){ strcpy(name,na); } intgetNumber(){ returnnumber; } char*getName(){ returnname; } intgetGrade(){ returngrade; } voiddisplay(){ cout<<"学号:"<<number<<endl <<"姓名:"<<name<<endl <<"年级:"<<grade<<endl; }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;}7.定义一个哺乳动物类,再由此派生出人类、狗类与猫类,这些类中均有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;}8.设计一个能细分为矩形、三角形、圆形与椭圆形的图形类。使用继承将这些图形分类,找出能作为基类部分的共同特征(如宽、高、中心点等)与方法(如初始法、求面积等),并看看这些图形能否进一步划分为子类。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;}9.设计一个基类animal与它的派生类tiger、sheep,实现虚函数。提示:可自行定义这些类的成员变量,但animal基类中应有动物性别的成员变量,但要说明每种动物的叫soar()及吃eat()的成员函数,可用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>usingnamespacestd;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;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; return0; }11.编写程序,计算汽车运行的时间,首先建立基类car,其中含有数据成员distance存储两点间的距离,假设距离以英里计算,速度为每小时80英里,使用虚函数travel_time()计算并显示通过这段距离的时间,在派生类kilometre中,假定距离以千米计算,速度为每小时120千米,使用函数travel_time()计算并显示通过这段距离的时间。P#include<iostream>usingnamespacestd;classcar{ protected: doubledistance;public: car(doublef) { distance=f; } virtualvoidtravel_time() { cout<<"car:traveltimeat80kph:"; cout<<distance/80<<endl; }/

温馨提示

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

评论

0/150

提交评论