




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實現一個大小固定的整型數據元素集合及其相應操作(元素的添加、刪除;判斷兩個集合是否相等;判斷一個數是否為集合中的元素;交集;并集)。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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安人員日常管理制度
- 保安公司監控管理制度
- 保安宿舍日常管理制度
- 保安押運公司運維管理制度
- 保安行業證件管理制度
- 保密業務歸口管理制度
- 保密文件運轉管理制度
- 保潔公司倉庫管理制度
- 保潔崗位安全管理制度
- 保潔環衛日常管理制度
- 廣東省深圳市寶安區2023-2024學年二年級下冊期末測試數學試卷(含答案)
- 北京市順義區2023-2024學年五年級下學期數學期末試卷(含答案)
- 2025公基題庫(附答案解析)
- 2024年佛山市順德區龍江社區衛生服務中心招聘真題
- 2025年寧夏銀川靈武市選聘市屬國有企業管理人員招聘筆試沖刺題(帶答案解析)
- 三大監測培訓試題及答案
- 兩辦意見宣貫考試題及答案
- 2025年汽車駕照考試科目一考試題庫及參考答案
- 2025年防范和打擊非法金融活動競賽題庫300題(含答案)
- 北京2025年04月中國工程院戰略咨詢中心招考10名勞動合同制人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 系統思維與系統決策系統動力學知到智慧樹期末考試答案題庫2025年中央財經大學
評論
0/150
提交評論