C程序設(shè)計習(xí)題_第1頁
C程序設(shè)計習(xí)題_第2頁
C程序設(shè)計習(xí)題_第3頁
C程序設(shè)計習(xí)題_第4頁
C程序設(shè)計習(xí)題_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、C+程序設(shè)計 練習(xí)題學(xué)院:計算機學(xué)院專業(yè)班級: 物聯(lián)網(wǎng)1002學(xué)號:姓名: 徐遠(yuǎn)志第八章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è)置矩形的左上角坐標(biāo)SetLe ngth(),SetWidth():設(shè)置矩形的長和寬Per

2、imeter():求矩形的周長Area():求矩形的面積GetWidth():返回矩形的寬度Getle ngth():返回矩形的長度IsSquare():判斷矩形是否為正方形Move():將矩形從一個位置移動到另一個位置Size():改變矩形的大小Where():返回矩形的左上角的坐標(biāo)PrintRectangle():輸出矩形的四個頂點的坐標(biāo)數(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,吧他當(dāng)做抽象類,在該類中定義外表積和體

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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論