版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C+程序設(shè)計 練習題學院:計算機學院專業(yè)班級: 物聯(lián)網(wǎng)1002學號:姓名: 徐遠志第八章1.下面是一個類的測試程序,試設(shè)計出能是用如下測試程序的類Int main()Test x;(30,20);();return 0;解:#in clude <iostream>using n amespace std;class Test義并實現(xiàn)一個矩形類Crectangle.該類包含了以下成員函數(shù).Crecta ngle():累的構(gòu)造函數(shù),根據(jù)需要可以定義多個構(gòu)造函數(shù)SetTop(),SetLeft():設(shè)置矩形的左上角坐標SetLe ngth(),SetWidth():設(shè)置矩形的長和寬Per
2、imeter():求矩形的周長Area():求矩形的面積GetWidth():返回矩形的寬度Getle ngth():返回矩形的長度IsSquare():判斷矩形是否為正方形Move():將矩形從一個位置移動到另一個位置Size():改變矩形的大小Where():返回矩形的左上角的坐標PrintRectangle():輸出矩形的四個頂點的坐標數(shù)據(jù)成員int top,left;int length,width;解:#include <iostream>using namespace std;class Crecta ngle次歌手大賽中,有JudgeNum個評委給選手打分,參加比賽的
3、選手有 PlayerNum名,現(xiàn)為比賽積分編寫一個 CompetitionResult 類,類的定義如下:(定義略)(1)寫出所有的成員函數(shù)和實現(xiàn)代碼.(2) 編寫mai n ()函數(shù)對該類進行測試.在函數(shù)體中,定義了一個competiti on Result 類的對象數(shù)組 rPlauerNum, 他的每個元素記錄了每個選手的所有信息, 個評委的 打分通過鍵盤的輸入,在屏幕上應(yīng)有提示信息進行交互式操作,比賽結(jié)果按選手 得分從高到底排列輸出.解:( 1) CompetitionResult:CompetitionResult()num=0; strcpy(name,"");f
4、or(int i=0;i<JudgeNum;i+)scorei=;average=0;CompetitionResult:CompetitionResult(short n,char*ps)num=n;strcpy(name,ps);for(int i=0;i<JudgeNum;i+)scorei=;average=0;float CompetitionResult:MaxScore() int max=score0;for(int i=0;i<JudgeNum;i+)if(max<scorei) max=scorei;return max;float Competit
5、ionResult:MinScore() int min=score0;for(int i=0;i<JudgeNum;i+) if(min>scorei) min=scorei; return min;void CompetitionResult:SetAvg() int i;float sum=;for(i=0;i<JudgeNum;i+)sum+=scorei;sum=sum-MaxScore()-MinScore(); average=sum/(JudgeNum-2);float CompetitionResult:GetAvg() return average;sho
6、rt CompetitionResult:GetNo(int i) return num;void CompetitionResult:SetNo(int i) num=i;char CompetitionResult:* GetName() return name ; float CompetitionResult:GetScore(int j) return scorej; void CompetitionResult:Setscore(int k,float av) scorek=av; void Sort(CompetitionResult *pr,int n)int i,j ,k;C
7、ompetitionResult temp; for(i=0;i<n-1;i+)k=i;for(j=i+1;j<n;j+) if(prj.average)>(prk.average) k=j;if(k!=j)temp=pri;pri=prk; prk=temp;(2)int main()CompetitionResult playerPlayerNum=CompetitionResult(1,"one"),CompetitionResult(2,"two"),CompetitionResult(3,"there"),
8、CompetitionResult(4,"four"),CompetitionResult(5,"five"),CompetitionResult(6,"six"),CompetitionResult(7,"seven"),CompetitionResult(8,"eight"),CompetitionResult(9,"nine"),CompetitionResult(10,"ten");float a;for(int i=0;i<PlayerNu
9、m;i+)cout<<" 請評委給第 "<<i+1<<" 個選手打分 :"<<endl;for(int j=0;j<JudgeNum;j+) cin>>a;playeri.Setscore(j,a);playeri.SetAvg();cout<<endl;Sort(player,PlayerNum);cout<<" 最后的得分情況為: "<<endl;for (int j=0;j<PlayerNum;j+)cout<<
10、;j+1<<" "cout<<setw(6)<<playerj.GetAvg();cout<<" "<<playerj.GetName()<<endl;return 0;程序運行的結(jié)果為:第九章1.在下面的程序中,派生類Derived的成員函數(shù)sets ()能否訪問基類base 中得變量 a 和 b 為什么如果在基類 base 中將數(shù)據(jù)成員 a 和 b 定義為私有成 員,下面的程序能否通過編譯為什么#include <iostream>using namespace st
11、d;class Base public:void set(int i,int j) a=i;b=j;void show() cout<<"a="<<a<<",b="<<b<<endl; protected:int a,b;class Derived:public Base public:void sets() s=a*b;void shows() cout<<"s="<<s<<endl;private:int s;int main() De
12、rived obj;(2,3);();();();return 0;解:可以訪問a和b;由于a, b為保護成員,經(jīng)公有繼承,成為派生類中得保護成員,所以派生類Derived的成員函數(shù)sets ()能訪問基類base中得 變量 a 和 b.如果定義為私有,那么不能通過編譯.由于派生類中的成員函數(shù)不能訪問 基類中得私有成員2.聲明一個圖形基類Shape,在它的根底上派生出矩形類 Rectangle和圓形 類 Circle ,它們都有計算面積的和周長、輸出圖形信息的成員函數(shù),再在 Rectangle類的根底上派生方形類Square.編寫程序和各類的定義和實現(xiàn), 以及類的使用.解:#include &
13、lt;iostream>using namespace std;class Shape public:double getArea()double getPerimeter() ;class Rectangle:public Shape protected:double height;double width;public:Rectangle() Rectangle(double a,double b)height=a;width=b;double getArea() return height*width;double getPerimeter() return 2*(height+w
14、idth);class Circle:public Shapepublic:Circle(double x):r(x)double getPerimeter()return 2*r;double getArea()return r*r*;private:double r;class Square:public Rectanglepublic:Square(double x)height=x;width=x;int main()Rectangle a1,;Circle a2;Square a3;cout<<"Area="<<()<<endl
15、; cout<<"Perimeter="<<()<<endl; cout<<"Area="<<()<<endl;cout<<"Perimeter="<<()<<endl; cout<<"Area="<<()<<endl;cout<<"Perimeter="<<()<<endl;return 0;5. 某銷售公司有銷售經(jīng)
16、理和銷售員工,月工資的計算方法為:銷售鼓勵的底 薪為 4000 元,并將銷售額的 2/1000 做提成,銷售員工無底薪,只提取 5/1000 為工資.編寫程序:(1) 定義一個積累 Employee,它包含三個數(shù)據(jù)成員number, name和 salary ,以及編號和姓名的構(gòu)造函數(shù).(2) 有Employee類派生Salesman類.Salesman類包含兩個新數(shù)據(jù)成員 commrate和sales,還包括了用于輸入銷售額并計算銷售員工工資 的成員函數(shù)pay ()和用于輸出打印的print ().( 3) 由 Salesman 派生 Salemanager,Salesmmanage 類包含
17、新數(shù)據(jù)成員 monthlypay,以及用于輸入銷售額并計算銷售經(jīng)理工資的成員函數(shù) pay ()和用于輸出的print ().(4)編寫main ()函數(shù)中測試所設(shè)計的類結(jié)構(gòu).解:(1) class Employeepublic:Employee(long num,char *n)number=num;strcpy(name,n);protected:long number;char name20;double salary;( 2)class Salesman:public Employeepublic:Salesman(long num,char *n,float c=:Employee(n
18、um,n) commrate=c;void pay()coutvv" ee "<<name<<"士 ie 3eue :"cin>>sales;salary=commrate*sales;void print()cout<<name«"a 10xe ao"<<salary<<endl;protected:float commrate;double sales;(3)class Salesmanager:public Salesmanpublic:c=,do
19、ubleSalesmanager(long num,char *n,floatm=4000):Salesman(num,n,c)monthlypay=m;void pay()cout«" ee "<<name<<"士 ie 3eotl; e£cin>>sales;salary=monthlypay+commrate*sales;void print()cout<<name«"a 10xe ao"<<salary<<endl;private:do
20、uble monthlypay;(4) int main()Salesman s1(1234," ae e");Salesmanager s2(1357,"");();();();();return 0;第十章1.定義一個輔助類Complex,重載運算符+、-、*、/使之能用于復(fù)數(shù)的加減乘 除運算.運算符重載函數(shù)為 Complex類的成員函數(shù).編寫程序,分別求出兩 個復(fù)數(shù)之和、差、積、商.解:#include <iostream>using namespace std;class Complexpublic:Complex(double r=
21、,double i= real=r;imag=i;Complex operator + (Complex);friend Complex operator - (Complex,Complex);Complex operator * (Complex);friend Complex operator / (Complex,Complex); void display();private:double real,imag;Complex Complex:operator + (Complex c)return Complex(real+,imag+;Complex operator - (Com
22、plex c1,Complex c2) return Complex Complex:operator * (Complex c) return Complex(real*+,imag*+real*;Complex operator / (Complex c1,Complex c2)double r,i;r=*+*/*+*;return(r,i);void Complex:display()cout<<"("<<real<<","<<imag<<")"<<endl
23、;int main()Complex c1,c2,5),c3;cout<<"c1=" ();cout<<"c2=" ();c3=c1+c2;cout<<"c1+c2="();c3=c1-c2;cout<<"c1-c2="();c3=c1*c2;cout<<"c1*c2="();c3=c1/c2;cout<<"c1/c2="();return 0;2.定義一個日期類Date,包括年,月,日等私有數(shù)據(jù)成員.要
24、求為所定義的Date 類設(shè)計如下重載運算符函數(shù):Date operator+(int days); 返回一日起加天數(shù) days 后得到的日期Date operator- ( int days); 返回一日起減天數(shù) days 后得到的日期Int operator- ( Date &b); 返回兩日期相差的天數(shù)解:#include <iostream>using namespace std;int day_tab12=31,28,31,30,31,30,31,31,30,31,30,31;class Datepublic:Date() Date(int y,int m,int
25、d) year=y;mon=m;day=d;void setday(int d) day=d;void setmon(int m) mon=m;void setyear(int y) year=y;int getday() return day;int getmon() return mon;int getyear() return year;Date operator + (int days)static Date date;int number=dton(*this);number-=days;date=ntod(number);return date;Date operator - (i
26、nt days)static Date date;int number=dton(*this);number-=days;date=ntod(number);return date;int operator - (Date &b)int days=dton(*this)-dton(b)-1;return days;void disp()cout<<year<<"."<<mon<<"."<<day<<endl;private:int year,mon,day;int leap(
27、int);int dton(Date &);Date ntod(int);int Date:leap(int year)if(year%4=0&&year&100!=0|year%400=0)return 1;else return 0;int Date:dton(Date &d)int y,m,days=0;for(y=1;y<=;y+)if(leap(y)days+=366;elsedays+=365;day_tab1=leap29:28;for(m=0;m<m+)days+=day_tabm;days+=;return days;Dat
28、e Date:ntod(int n)int y=1,m=1,d,rest=n,days_year;while(1)days_year=leap(y)366:365;if(rest<days_year)break;elserest-=days_year;y+;y-;day_tab1=leap(y)29:28;while(1)if(rest>day_tabm-1)rest-=day_tabm-1;elsebreak;m+;d=rest;return Date(y,m,d);int main()Date now(2021,12,22),Nationday(1949,10,1);cout&
29、lt;<"now:"();cout<<"Nationday:"();cout«" a 2 lie y:"<<(nNWationday)«endl;Date d1= no w+365,d2二 no w-365;cout<<"now+365:"();cout<<"now-365:"();return 0;3. 編寫一個程序尖酸正方體圓柱體的外表積和體積. 要求抽象出一個公共的基類Body,吧他當做抽象類,在該類中定義外表積和體
30、積的純虛函數(shù).抽象 類中定義一個數(shù)據(jù)成員 data ,他可以作為求的半徑, 正方形的邊長, 或者圓 柱體的地面半徑.在三個類中都有計算白面積和體積的函數(shù)的具體實現(xiàn).解:#include <iostream>using namespace std;class Bodyprotected:double data;public:Body(double data)Body:data=data;virtual double s()=0;virtual double v()=0;class Cube:public Bodypublic:Cube(double data):Body(data);
31、double s()return data*data*6;double v()return data*data*data;class Sphere:public Bodypublic:Sphere(double r):Body(r);double s()return data*data*4;double v()return 4*data*data*data/3;class Cylinder:public Bodydouble height;public:height):Cylinder(double r,double Body(r)Cylinder:height=height;double s
32、()return (2*data*data+2*data*height);double v()return data*data*height;int main()Body *p;Cube obj1(5);Sphere obj2(5);Cylinder obj3(5,5);p=&obj1;cout<<" 正方體的外表積: "<<p->s()<<endl;cout<<" 正方體的體積: "<<p->v()<<endl;p=&obj2;cout<<&
33、quot; 球的外表積: "<<p->s()<<endl;cout<<" 球的體積: "<<p->v()<<endl;p=&obj3;cout<<" 球的外表積: "<<p->s()<<endl;cout<<" 球的體積: "<<p->v()<<endl; return 0;第十一章1. Void Sort(int a,int size);Void Sort(do
34、uble a,int size);是設(shè)計函數(shù)模板.是一個函數(shù)模板的兩個例子, 起功能是將數(shù)組 a 中得前 size 個元素按從小到大的順序依次排列 解: #include <iostream> using namespace std;template<class T> void Sort(T set,int n)int i,j; T temp;for (i=1;i<n;i+) for(j=n-1;j>i;j-)if(setj-1>setj) temp=setj-1;setj-1=setj; setj=temp;int main()int a=4,5,8
35、,9,3;double b=3,5,2,;Sort(a,6);Sort(b,6);for(int i=0;i<6;i+) cout<<ai<<" "cout<<endl; for(i=0;i<6;i+) cout<<bi<<" "cout<<endl; return 0;2. 設(shè)有如下聲明 class Test public :Void SetData1(int val) data1=val;Void SetData2(doule val) data2=val;int G
36、etData1() return data1;double GetData2() return data2;private:int data1;double data2;試將此類聲明為類模板的聲明,使得數(shù)據(jù)成員 data1 和 data2 可以使任何類型 #include <iostream>#include <string>using namespace std;template <class T1,class T2>class Testpublic:void SetData1(T1 val) data1=val;void SetData2(T2 val)
37、 data2=val;T1 GetData1() return data1;T2 GetData2() return data2;private:int data1;double data2;int main()Test<int,double> t1;(10);Jcout<<()<<" "<<()<<endl;Test<char ,string> t2;('a');("China");cout<<()<<" "<<
38、;()<<endl;return 0;3 棧是一種重要的數(shù)據(jù)結(jié)構(gòu),它是一種只允許在彪的一端進行插入或刪除操作的線性表.表中允許進行插入、刪除操 作的一端稱為棧頂.表的令一端稱為棧底.下面是一個整形棧類的定義:Const int MaxSize=100;Class IstackPublic:Istack();void Push(int &n);void pop();int GetTop();bool Empty();int size();boid ClearStack();Istack();Private:Int elemMaxSize;Int top;編寫一個棧的類模板,以
39、便為任何類型的對象提供棧結(jié)構(gòu)的數(shù)據(jù)操作. 解:#include <iostream>#include <string>using namespace std;const int MaxSize=100;template <class T>class Stackpublic:Stack();void Push(const T &a);void Pop();T GetTop();void ClearStack();bool Empty();int Size();Stack()private:T elemMaxSize;int Top;template &
40、lt;class T>Stack <T>:Stack()Top=-1;template <class T>void Stack<T>:Push(const T &a)if(Top=MaxSize-1)return;Top+; elemTop=a;template <class T>void Stack<T>:Pop()if(Top=-1) return;Top-;template <class T>void Stack<T>:ClearStack()Top=-1;template <clas
41、s T>T Stack<T>:GetTop()if(Top=-1)return 0; return elemTop;template <class T>bool Stack<T>:Empty()if(Top=-1)return true;elsereturn false;template <class T>int Stack<T>:Size()return Top+1;int mian()Stack<int> s1;Stack<string> s2;(123);(456); cout<<()&
42、lt;<endl;();cout<<()<<" "<<()<<endl;("beijing");("wuhan"); cout<<()<<" "<<()<<endl;return 0;第十三章1. 編寫程序,重載運算符 <<和>>,使用戶能直接輸入和輸出復(fù)數(shù). 解:#include <>class Complexpublic:Complex(double r=0,double i
43、=0)real=r;imag=i;friend ostream &operator<<(ostream &,Complex &);friend istream &operator>>(istream &,Complex &); private:double real,imag;ostream &operator<<(ostream &output ,Complex &obj)output<<if>0)output<<"+"if!=0)ou
44、tput<<<<"i"return output;istream &operator>>(istream &input ,Complex &obj)cout<<"Input the real and img of the complex:"<<endl; input>>input>>return input;int main()Complex c1,c2,c3; cin>>c1>>c2>>c3;cout<&
45、lt;"c1="<<c1<<endl;cout<<"c2="<<c2<<endl;cout<<"c3="<<c3<<endl;return ;然后3. 編寫一個程序, 統(tǒng)計文本文件中的字符, 并給文件所有行加上行號, 寫到中去 解:#include <iostream>#include <fstream>using namespace std;int main()fstream file;("",ios:in);if(!file)cout<<" can't open."<<endl;abort();char ch;int i=0;while(!()(ch);i+;cout<<"Charater:"<<i<<endl;();return 0;6#include <iostream>#include <fstream>using namespace std;struct
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《工程設(shè)備復(fù)習》課件
- 心電信號識別技術(shù)-洞察分析
- 文物保護國際合作與交流-洞察分析
- 文本轉(zhuǎn)換的語義依賴規(guī)則研究-洞察分析
- 形式化方法在中綴轉(zhuǎn)后綴轉(zhuǎn)換中的應(yīng)用研究-洞察分析
- 物聯(lián)網(wǎng)安全防護-第1篇-洞察分析
- 特種水泥性能優(yōu)化-洞察分析
- 初級職稱個人專業(yè)技術(shù)工作總結(jié)范文(12篇)
- 醫(yī)學圖像增強與降噪算法-洞察分析
- 網(wǎng)絡(luò)切片技術(shù)在行業(yè)專網(wǎng)的應(yīng)用研究-洞察分析
- 2024年人教版小學五年級信息技術(shù)(下冊)期末試卷附答案
- 洗煤廠代加工的合同范本
- 北京市體育競賽管理和國際交流中心招聘筆試真題2022
- JT-T-1134-2017道路客貨運運輸駕駛員行車操作規(guī)范
- 2024年安徽省初中學業(yè)水平考試中考數(shù)學試卷(真題+答案)
- 航天企業(yè)員工入股協(xié)議書樣本
- 門面房買賣合同范本簡單版
- 2024年臨汾翼城縣就業(yè)困難高校畢業(yè)生公益性崗招考聘用70人重點基礎(chǔ)提升難、易點模擬試題(共500題)附帶答案詳解
- 農(nóng)產(chǎn)品電子商務(wù)智慧樹知到期末考試答案章節(jié)答案2024年浙江農(nóng)林大學
- 護理中級職稱競聘
- 現(xiàn)代控制理論智慧樹知到期末考試答案章節(jié)答案2024年長安大學
評論
0/150
提交評論