c++機考題目加答案(共30頁)_第1頁
c++機考題目加答案(共30頁)_第2頁
c++機考題目加答案(共30頁)_第3頁
c++機考題目加答案(共30頁)_第4頁
c++機考題目加答案(共30頁)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優(yōu)質文檔-傾情為你奉上1. 實現(xiàn)一個大小固定的整型數(shù)據(jù)元素集合及其相應操作(元素的添加、刪除;判斷兩個集合是否相等;判斷一個數(shù)是否為集合中的元素;交集;并集)。P76.列3.24#include const maxCard = 16; / 集合中元素個數(shù)的最大值,默認為int型enum ErrCode noErr, overflow; / 錯誤代碼enum Bool False, True; / Bool類型定義class Set / 定義集合類 int elemsmaxCard; / 存儲元素的數(shù)組 int card; / 集合中元素的個數(shù)public: void EmptySet( )

2、card = 0; Bool Member(int); / 判斷一個數(shù)是否為集合中的元素 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. 實現(xiàn)一個大小可變的整型數(shù)據(jù)元素集合,集合可存儲的數(shù)據(jù)元素個數(shù)在對象構造時給定,由構造函數(shù)為數(shù)據(jù)元素分配存儲空間,在對象被釋放時由析構函數(shù)釋放存儲空間。P78 .3.25#include const maxCard=16; / 集合中元素個數(shù)的缺省最大值enum ErrCode noErr, overflow; / 錯誤代碼enum Bool False, True; / Bool類型定義class Set int size; / 元素的最大個數(shù) int *elems; /

8、存儲元素的數(shù)組 int card; / 集合中元素的個數(shù) 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,它具有的私有數(shù)據(jù)成員是:注冊號、姓名、數(shù)學成績、英語成績、計算機成績;具有的公有成員函數(shù)是:求三門課程總成績的函數(shù)sum();求三門課平均成績average();顯示學生數(shù)據(jù)信息的函數(shù)print();獲取學生注冊號的函數(shù)get_reg_num;設置學生數(shù)據(jù)信息的函數(shù)set_stu_inf()。P81。6編制主函數(shù),說明一個student類對象的數(shù)組并進行全班學生信息的輸入與設置,而后求出每一個學生的總成績、平均成績

14、、全班學生總成績最高分、全班學生總平均分,并在輸入一個注冊號后,輸出該學生有關的全部數(shù)據(jù)信息。#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數(shù)學:mathendl英語:englishendl計算機:computerendl總分:sum()endl平均分:average()endl; int main() Student stu50;int i,q,a,z,x,max=0,aver=0; / i為循環(huán)變量,q:學號;a:數(shù)學成績;/ z:英語成績;x:

16、計算機成績int count = 0; /表示學生人數(shù)char* we=new char10;/ 輸入學生信息for(;)cout請輸入學生的學號、姓名、數(shù)學成績、英語成績、計算機成績:(若輸入的學號為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. 定義復數(shù)類complex,使用友元函數(shù),完成復數(shù)的加法、減法、乘數(shù)運算,以及復數(shù)的輸出。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請輸入第一個復數(shù)的實部和虛部:endl;inputcomplex(c1);cout請輸入第二個復數(shù)的實部和虛部: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. 某單位所有員工根據(jù)領取薪金的方式分為如下幾類:時薪工(hourlyworker)、計件工(pieceworker)、經理(manager)、傭金工(commissionworker)。時薪工按工作的小時支付工資,對于每周超過50小時的加班時間,按照附加50%薪水支付工資。按生產的每件產品給計件工支付固定工資,假定該工人僅制造一種產品。經理每周得到固定的工資。傭金工每周得到少許的固定保底工資,加上該工人在一周內總銷售的固定百分比。試編制一個程序來實現(xiàn)該單位的所有員工類,并加以測試。P125 5.15#include#include class empl

23、oyee / 雇員類protected:char name10; / 姓名char emp_id8; / 職工號double salary; / 薪金數(shù)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、得所應得的總薪金數(shù)return salary;class hourlyworker:public employee / 時薪工protected:int hours; / 工作的小時數(shù)double perhourpay; / 每小時應得的報酬public:hourlyworker()hours=0;perhourpay=15.6;int gethours() / 取得某人工作的小時數(shù)return hours;void sethours(int h) / 設置某人工作的小時數(shù)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; / 每周所生產的工件數(shù)double perpiecepay; / 每個工件所應得的工資數(shù)public:pieceworker()piece

26、s=0;perpiecepay=26.8;int getpieces()return pieces;void setpieces(int p) / 設置生產的工件總數(shù)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、工資數(shù)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. 考慮大學的學生情況,試利用單一繼承來實現(xiàn)學生和畢業(yè)生兩個類,設計相關的數(shù)據(jù)成員及函數(shù),編寫程序對繼承情況進行測試。P133. 11 實P57提示:作為學生一定有學號、姓名、性別、學校名稱及入學時間等基本信息,而畢業(yè)生除了這些信息外,還應有畢業(yè)時間、所獲學位的信息,可根據(jù)這些內容設計類的數(shù)據(jù)成員,也可加入一些其他信息,除了設計對數(shù)據(jù)進行相應操作的成員函數(shù)外,還要考慮到成員類型、繼承模式,并在main()函數(shù)中進行相應測試。可設計多種繼承模式來測試繼承的屬性。#include#includeusing namespace std;cla

32、ss Student/ 定義基類Studentpublic: / 公有函數(shù)成員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:/ 私有數(shù)據(jù)成員 int number;/ 學號 char name20;/ 姓名 int grad

33、e;/ 年級;class Graduate:public Student /定義畢業(yè)生類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()/創(chuàng)建對象Student li(2,Li Ming,3);Graduate zhang(3,Zhang Gang,學生成績管理系統(tǒng));/

34、顯示對象的相關信息li.display();cout endl- endl;zhang.display();return 0;7 定義一個哺乳動物類,再由此派生出人類、狗類和貓類,這些類中均有speak()函數(shù),觀察在調用過程中,到底使用了哪一個類的speak()函數(shù)。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函數(shù)cout人:;hm.speak();cout貓:;cat.speak();cout狗:;dog.speak();return 0;8 設計一個能細分為矩形、三角形、圓形和橢圓形的圖形

36、類。使用繼承將這些圖形分類,找出能作為基類部分的共同特征(如寬、高、中心點等)和方法(如初始法、求面積等),并看看這些圖形能否進一步劃分為子類。P133. 10#includeusing namespace std;class Figure/ 定義基類圖形類public:/ 公有函數(shù)成員 Figure(int wid)width = wid; float area() int getWidth()return width;private:/ 私有數(shù)據(jù)成員 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,實現(xiàn)虛函數(shù)。提示:可自行定義這些類的成員變量,但animal基類中應有動物性別的成員變量,但要說明每種動物的叫soar()及吃e

39、at()的成員函數(shù),可用cout輸出來表示。要求每個派生類生成兩個對象,打亂次序存于一個數(shù)組中,然后用循環(huán)程序訪問其叫與吃的成員函數(shù),必須用到虛函數(shù)。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.有三角形、正方形和圓形三種圖形,求它們各自的面積??梢詮闹谐橄蟪鲆粋€基類,在基類中聲明一個虛函數(shù),用來求面積,并利用單界面、多實現(xiàn)版本設計各個圖形求面積

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; / 指針數(shù)組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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論