C++綜合實驗四_第1頁
C++綜合實驗四_第2頁
C++綜合實驗四_第3頁
已閱讀5頁,還剩45頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、程序設計語言實驗報告實驗序號:04實驗項目名稱:面向對象的程序設計學號姓名專業、班實驗地占八、文波樓219指導教 師時間2012/12/19一、實驗目的及要求1. 掌握類和對象的定義2. 掌握面向對象的程序設計方法3. 掌握類的繼承與派生4. 掌握基類和虛函數的用法5. 掌握運算符重載的方法6. 掌握I/O流類的操作二、實驗設備(環境)及要求1. 軟件需求:Visual C+ 6.02. 硬件需求:Pentium III 450 以上的CPU處理器,64MB以上的存,200MB的自由硬盤空間三、實驗容與步驟1. 設計員工類Employee (靜態數據成員)分a)題目描述定義一個描述員工(Emp

2、loyee)基本情況的類,數據成員包括編號 (n um)、( name)、 性別(sex)、工資(wage)、人數(count )、總工資(totalWage )。其中定義為長 度為18的字符數組,性別定義為長度為3的字符數組,其它數據類型為整型,總工資和人數為靜態數據成員,函數成員包括構造函數、顯示基本函數(ShowBase)和顯示靜態數據函數(ShowStatic ),其中構造函數由已知參數編號(nu), (nm)、性別(sx、和工資(wg)構造對象,顯示基本數據函數用于顯示學生的編號、性別和工資,顯示靜態數據函數為靜態成員函數,用于顯示人數和總工資;要求所有數據成員為protected訪

3、問權限,所有成員函數為public訪問權限,在主函數中定義若干個員工對象,分別顯示員工基本信息,以及顯示員工人數和總工資。b)輸入描述第一行要求輸入一個小于10的數字n,表示即將錄入的員工數量,換行后從鍵盤錄入每個員工的數據,依次是編號,性別,工資,每個員工占一行c)輸出描述第一行顯示“人數:”,第二行顯示“總工資:”,后面分別顯示每個員工的信息, 每個員工之間空一行d)樣例輸入21008 三男 25001009 四女 2600e)樣例輸出人數:2總工資:5100元個人基本信息:編號:1008性別:男工資:2500個人基本信息:編號:1009:四性別:女工資:26002. 日期類Date的設計

4、(構造函數)a)題目描述定義一個日期類 Date,能提供和設置由年、月、日組成的日期。編寫程序,提供 類的構造函數用于根據輸入初始化日期類Date的對象;提供函數用于輸出日期類對象的日期,按照如下格式輸出: yyyy-mm-ddb) 輸入描述初始化日期類Date對象的數據,分別是年、月、日。程序有多個測試用例。c) 輸出描述按照指定格式輸出的日期。d) 樣例輸入2010 12 302012 18 302012610e) 樣例輸出2010-12-30ERROR DATE2012-06-103. 復數類Imaginary (友元函數)a) 題目描述根據以下主函數的功能來設計復數類Imaginary

5、,使其能正確運行。類Imaginary中應該具有描述復數的實部和虛部的私有數據成員a和b,還有相應的構造函數和按照a bi ”格式顯示復數的成員函數print()。設計類Imaginary的2個友元函數分別進行復數的加、減運算,并在這些函數調用類Imagi nary 的成員函數prin t()顯示結果。int mai n()float x1,y1,x2,y2;cinx1y1x2y2;/輸入4個數據,分別表示進行運算的兩個復數的實部和虛部Imaginaryimag1(x1,y1),imag2(x2,y2); /用 x1、y1 創建 Imaginary 類對象 imag1Add(imag1,ima

6、g2); /調用友元函數求兩個復數之和,按abi的格式顯示運算結果(a和b均為實數)Sub(imag1,imag2); /求兩個復數之差并顯示運算結果return 0;b)輸入描述輸入4個數據,分別表示進行運算的兩個復數的實部和虛部c)輸出描述2行,分別顯示兩個復數進行加、減運算的結果d)樣例輸入1 3 2 5e)樣例輸出3+8i -1-2i4. 二進制類(1)運算符重載a)題目描述將一個16位二進制數表示成 0和1的字符序列,即用一個字符數組來存放這個二進制數。在這個類中設置兩個構造函數,一個是傳遞整數參數的, 另一個是傳遞字符串參數的。因為用戶在創建對象時傳遞的二進制數,可能是以整數形式給

7、出,也in t(),“-”,用來完成兩個二進制數可能是以數字串形式給出,系統應該都能接受。另外有一個類型轉換函數 用來將類類型向整型轉換。 兩個重載運算符“ +”,之間的加減運算。class binary /定義二進制類char bits16; /二進制字模數組public:bin ary(char *); /字符串參數構造函數bin ary(i nt);/整型參數構造函數frie nd binary operator +(bi nary,bi nary); /重載friend binary operator -(b in ary,b in ary); /重載operator in t();

8、/類類型轉換函數void prin t();主函數設計如下:int mai n()binary n1= 1011;bin ary n 2=i nt(n 1)+15;binary n3=n 1-b in ary(7);nl.pri nt();n2.pri nt();n3.pri nt();cout int(n 2)+5e ndl;cout n 2-b in ary(5)e ndl;cout n 3+b in ary(5)e ndl;cout int(n 3)-5e ndl;return 0;b) 輸入描述無c) 輸出描述略d) 樣例輸入無e) 樣例輸出01011110100010031219-1

9、5. 二進制類(2)運算符重載a) 題目描述在上一題的基礎上,將+、-運算符定義為binary類的成員函數。并且重載運算符、&、|,分別將二進制數按位取反、數按位與及按位或。主函數設計如下:int mai n()binary n仁1011;bin ary n 2=i nt(n 1)+15;binary n3=n 1-b in ary(7);n1.pri nt();n2.pri nt();n3.pri nt();bin ary n4=n1&n2;binary n5=n1|n2;binary n6=n1;n 4.pri nt();n 5.pri nt();n6.pri nt();return 0;

10、b) 輸入描述無c) 輸出描述略d) 樣例輸入無e) 樣例輸出0101111010001000101011011101006. 簡單集合運算10分a) 題目描述請設計實現集合類,元素類型為整形。該集合類支持集合元素增加、刪除、查詢; 并支持集合并、交、差運算;利用你設計的集合類,實現本題要求。程序應體現面 向對象程序設計思想,結構合理。為保證結果唯一,集合元素遞增排列。假設集合 元素個數不超100個b)輸入描述開始為兩個正整數 m,n;后續m個整數構成集合 A,再后續n個整數構成集合 Bc)輸出描述集合A、B和他們的并、交、差集;每個集合元素間以,分隔;不同集合顯示在不同行d)樣例輸入3 51

11、 2 33 5 8 2 1e)樣例輸出1,2,3123,5,8123,5,81,2,37. 圖形類一一繼承和派生a)題目描述定義一個圖形類,其中有保護類型的成員數據:高度和寬度,一個公有的構造函數。 由該圖形類建立兩個派生類:矩形類和等腰三角形類。在每個派生類中都包含一個 函數Area(),分別用來計算矩形和等腰三角形的面積。提示:class pic;class recg:public pic;class tag:public pic;b)輸入描述輸入矩形的長和寬以及等腰三角形的底邊長和高。c)輸出描述矩形的面積和等腰三角形的面積d)樣例輸入3 53 5e)樣例輸出157.58. 人民幣類(類

12、型轉換)a)題目描述人民幣類有兩種表達形式,如,第1種:1元3角5分;第2種:1.35元。設計個人民幣類RMB實現求兩個金額之差。b)輸入描述多組測試用例,每組數據包括兩行, 第一行3個整數,代表第一個金額,采用的是 人民幣的第1種表達形式;第二行 1個double型數據,代表第二個金額,采用的 是人民幣的第2種表達形式。c)輸出描述對應輸出第一個金額減第二個金額的差。結果保留兩位小數。d)樣例輸入2 3 51.561 1 10.91e)樣例輸出0.790.209. 教師工資計算(抽象類)a)題目描述某學校對教師每月工資的計算公式如下:固定工資+課時補貼。教授的固定工資為5000元,每個課時補

13、貼50元;副教授的固定工資為3000元,每個課時補貼30元;講師的固定工資為 2000元,每個課時補貼20元。定義教師抽象類,派生不同職稱的 教師類,編寫程序求若干教師的月工資。b)輸入描述輸入有多個測試例組成。每個測試例含一個字符p表示教授,v表示副教授,j表示講師,接下來一個正整數n表示工作時間。c)輸出描述每個測試例對應一行輸出教師的工資。d)樣例輸入p 200v 250j 100e)樣例輸出1500010500400010. 計算圖形面積和周長(抽象類)a)題目描述一個矩形可用兩個點表示,一個三角形可用三個點來表示,一個圓可用一個點和一個半徑來表示。請實現一個抽象類 Shape及接口方

14、法(double area();doubleperimeter。)和三個派生類Rect、Triagle、Circle,通過構造三種派生類的對象的方式來計算給出 的矩形、三角形和圓形的面積area和周長perimeter 。b)輸入描述有多行輸入,第一行為幾何形狀的數目n,其余n行,每行代表一個形狀,其中每行第一個字符串為幾何形狀字符串,矩形為Rect,三角形為 Triangle ,圓形為Circle (請注意大小寫)。其余為相應形狀的幾何數據數字,之間用空格分隔(每 個點用x,y兩個坐標表示,x坐標在前,y坐標在后),如Rect x1 y1 x2 y2Circle x y rTria ngle

15、 x1 y1 x2 y2 x3 y3c)輸出描述有多行結果,每行為對應幾何形狀的面積和周長(Pl=3.14159,保留到小數點后 5位),兩個數字之間用一個空格分隔d)樣例輸入3Rect 0 0 2 4Circle 0 0 3Tria ngle 0 0 2 2 2 0e)樣例輸出8.00000 12.0000028.27431 18.849542.00000 6.8284311. 簡單高精度計算a)題目描述整型是經常使用的數據類型,常用的32位整數表示精度不超過10位十進制整數。在很多運算中往往需要更高的精度,這時就必須自己編程突破系統已經定義數據類型的限制。一個可行的方法是采用一個數組表示一

16、個大的整數,每一個數組元素表示這個大整數的一位。例如定義一個數組a30,其各個元素分別為:9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,則 可以用來表示30位十進制整數10。請你編寫程序(不考慮負數):i. 定義一個非負整數類BigI nteger ,在類中使用動態分配存儲空間來存放整數的各個數位,并實現非負大整數的1. 初始化、復制、賦值、輸入、顯示;2. 關系運算3. 加法、減法(求兩個操作數之差的絕對值,結果非負)、乘法運算;ii.編寫主程序利用非負整數類BigI nteger完成各類運算,并輸出結果b)輸入描述輸

17、入有多組樣例,每組樣例由三行組成,第一行為操作數a,第二行為運算符op,第三行為操作數 b。其中a, b均為位數少于1000位的非負整數,op為下列運算之 一:+、-、*、=、!=、=、=(其中減法定義為求兩個操作數之差的絕對 值)c)輸出描述計算a op b的結果(算術運算的結果少于 1000 位),針對每組輸入樣例輸出一行。 輸出的算術運算結果要符合一般的數學表示習慣(例如,最高有效位的左邊不能有前導的0),輸出的關系運算結果以 1表示真,0表示假。d)樣例輸入64550+7187427873101*24478243267682!=5926221945561173828739=745904

18、92 315307=e)樣例輸出4322117856844010110四、實驗結果與數據處理第一題/文件名:hp/功能:設計員工類Employee (靜態數據成員)/ 完成時間:2012-12-13#i nclude #in clude using n amespace std;class Employeeprotected:int nu m,wage;static int count;static int totalWage;char n ame18,sex3;public:Employee nt nu ,char* nm ,char*sx,i nt wg);Employee();Emplo

19、yee();ShowBase();static int ShowStatic();Employee:ShowBase()coutn個人基本信息:;coutn編號: num;coutn: n ame;coutn性別:sex;coutn工資wagee ndl;Employee:ShowStatic()coutn 人數:co un te ndl;cout總工資:vvtotalWagevv元n;Employee *m=new Employee n;int nu ,wg;char nm18,sx3;for(int i=0;inunm sxwg; mi=Employee( nu, nm ,sx,wg);E

20、mployee:ShowStatic();for(i=0;i FilesXlicrosoft Visual 3n)dioWyFrojectshpDetmgXTip*ese毯三男2500 季四女2GO0t一;5100 元基:貨區 人號名帑 個編姓性工GH9四 鷲:t 人號名別 個輪姓H第二題/文件名:CC/功能:日期類Date的設計(構造函數)/ 完成時間:2012-12-13#i nclude #i nclude using n amespace std;class dateprotected:int y,m,d;static int x;public:date(i nt y,i nt m,i

21、 nt d);date();date();void display(i nt y,i nt m,i nt d);static int getx();int date:x=1;int date:getx()return x;void date:display(i nt y,i nt m,i nt d)coutvyvv-vvsetw (2)setfill(0)m-setw (2) vvsetfill(O)d12)coutERROR DATEe ndl; x=O; if(m=1|m=3|m=5|m=7|m=8|m=10|m=12)if(d31) coutERROR DATE29)coutERROR

22、DATE28)coutERROR DATEe ndl; x=0; if(m=4|m=6|m=9|m=11)第三題/文件名:g4/功能:復數類Imaginary (友元函數)/ 完成時間:2012-12-14#i nclude using n amespace std;class Imag inaryprivate:float a,b;public:Imagi nary()a=0,b=0;Imag in ary(float i,float j);Imagi nary();friend Imaginary Add(Imaginary&A,Imaginary&B); friend Imaginary

23、 Sub(Imaginary&A,Imaginary&B); void prin t()if(a=0)if(b=0)coutae ndl;elsecoutbi0)coutv+vvbvvivve ndl; elseif(b=0)coute ndl; elsecoutbi x1y1x2y2;Imag in ary imag1(x1,y1),imag2(x2,y2);Add(imag1,imag2);Sub(imag1,imag2);return 0;r= D:vcO.Oc + + M i cros oft Viju al Studi oM yProje ctVi.gQDebu gg4 .exe 1

24、3 2 5-1-21Press an5, kgy to continue“ I_亓I第四題/文件名:g4/功能:二進制類(1)運算符重載/ 完成時間:2012-12-14#i nclude #include class binary /char bits16; / public:bin ary(char *); /bin ary(i nt);/定義二進制類二進制字模數組字符串參數構造函數整型參數構造函數friend binary operator +(b inary & ,bi nary &); / friend binary operator -(b inary& ,bi nary& );

25、/ operator in t(); /類類型轉換函數重載重載+void prin t();bin ary:b in ary(char *a) int m=strle n( a)-1;int n=15;while(m=0&n=0) bits n-=am-;while( n=0)bits n-=0;bin ary:b in ary(i nt a)for(int i=15;i=0;i-)bitsi=a%2+0; a=a/2;binary operator +(b inary&a,b inary&b)bi nary c(00);int s=0, n1=0, n2=0;for(int i=0;i16;

26、i+)n1= (a.bitsi=0?0:1)+n1*2; for(i=0;i=0;i-)c.bitsi=s%2+0;s=s/2;return c;binary operator -(bi nary&a,bi nary&b) bi nary c(00);int s=0, n1=0, n2=0;for(int i=0;i16;i+)n仁(a.bitsi=0?0:1)+n1*2; for(i=0;i=0;i-)c.bitsi=s%2+0;s=s/2;return c;bin ary:operator int()int s=0 ;for(int i=0;i16;i+)s=(bitsi=0?0:1)+s

27、*2; return s;void bin ary:pri nt()char str17; strncpy(str,bits,16); str16=0;coutvvstrvve ndl;void mai n()bi nary n仁1011;bi nary n 2=i nt(n 1)+15;binary n3=n 1-b in ary(7);n 1.pri nt();n2.pri nt();n3.pri nt();cout int(n 2)+5e ndl;cout n 2-b in ary(5)e ndl;cout n 3+b in ary(5)e ndl;cout int(n 3)-5e nd

28、l;第五題/文件名:g4/功能:二進制類(2)運算符重載/ 完成時間:2012-12-18#i nclude #include class binary / char bits16; /public:bin ary(char *); / bin ary(i nt);/定義二進制類二進制字模數組字符串參數構造函數整型參數構造函數重載+重載-friend binary operator +(bi nary&,bi nary&); /friend binary operator -(bi nary&,bi nary& ); /friend binary operator (b inary&);fri

29、end binary operator &(binary&,binary&); friend binary operator |(binary&,binary&); operator in t(); /類類型轉換函數void prin t();bi nary:bi nary(char*a)int m=strle n(a)-1;int n=15;while(m=0&n =0)bits n-=am-;while( n=0)bits n-=0;bin ary:b in ary(i nt a)for(int i=15;i=0;i-)bitsi=a%2+0; a=a/2;binary operator

30、+(b inary&a,b inary&b)bi nary c=00;int n仁0 ,n 2=0,s=0;for(int i=0;i16;i+)n仁(a.bitsi=0?0:1)+2* n1; for(i=0;i=0;i-)c.bitsi=s%2+0;s=s/2;return c;binary operator -(bi nary&a,bi nary&b) bi nary c=00;int n1=0 ,n 2=0,s=0;for(int i=0;i16;i+)n1= (a.bitsi=0?0:1)+2* n1;for(i=0;i=0;i-)c.bitsi=s%2+0;s=s/2;return

31、 c;binary operator (b inary&a)bi nary c=00;for(int i=0;i16;i+)if(a.bitsi=0)c.bitsi=1;elsec.bitsi=0;return c;binary operator & (bi nary&a,bi nary&b)bi nary c=00;for(int i=0;i16;i+)if(a.bitsi=1 )&( b.bitsi=1)c.bitsi=1;elsec.bitsi=0;return c;binary operator |(b inary&a,bi nary&b)bi nary c=00;for(int i=

32、0;i16;i+)if(a.bitsi=1)|(b.bitsi=1)c.bitsi=1;elsec.bitsi=0;return c;bin ary:operator int()int s=0;for(int i=0;i16;i+)s=(bitsi=0?0:1)+2*s;return s;void bin ary:pri nt()coutvvstrvve ndl;void mai n()bi nary n仁1011;bi nary n 2=i nt(n 1)+15;binary n3=n 1-b in ary(7);n 1.pri nt();n2.pri nt();n3.pri nt();bi

33、nary n4=n1&n2;binary n5=n1|n2;binary n6=n1;n 4.pri nt();n 5.pri nt();n6.pri nt();char str17; strncpy(str,bits,16); str16=0;第六題/文件名:g4/功能:簡單集合運算/ 完成時間:2012-12-19#i nclude using n amespace std;class collectint str1OO;int num;public:collect() collect(i nt*,i nt);paixu();collect collect:operator +(colle

34、ct&);collect collect:operator -(collect&);collect collect:operator /(collect&); add(i nt);inqu ire(i nt);del(i nt);void prin t();collect:add(i nt n)for(i nt i=0;i nu m;i+)if(ni;j-)strj=strj-1;strj=n;break;nu m+;collects nq uire(i nt n)coutstr n-1e ndl;collect:del( int n)for(int i=n-1;inum;i+)stri=st

35、ri+1;num-;collect:collect(i nt *p,i nt n)num=n;for(i nt i=0;i nu m;i+)stri=pi;stri=0;collect:paixu()int temp=0;for(i nt i=0;i nu m-1;i+)for(i nt j=O;jstrj+1)temp=strj; strj=strj+1; strj+1=temp;collect collect:operator +(collect&A) collect C;int i,j,k=0,flag;for(i=0;iA .nu m;i+,k+)C. strk=A.stri;for(

36、i=0;i nu m;i+)flag=1;for(j=0;jA .nu m;j+) if(A.strj=stri) flag=0;if(flag)C. strk+=stri;C.num=k;return C;collect collect:operator -(collect&A) collect C;int i,j,k=O;for(i=0;iA .nu m;i+)for(j=0;j nu m;j+) if(A.stri=strj) C.strk+=A.stri;C.num=k;return C;collect collect:operator /(collect&A) collect C;i

37、nt i,j,k=0,flag;for(i=0;i nu m;i+)flag=1;for(j=0;jA .nu m;j+) if(A.strj=stri) flag=0;if(flag)C.strk+=stri;C.num=k;return C;void collect:pri nt()if(num=0)coute ndl;elsecout;for(int i=0;inum-1;i+) coutstrivv,;coutvstrivvve ndl; int main()int m,n;cinmn;int *a=new in tm;int *b=new intn;for(int i=0;i ai;

38、for(i=0;i bi;collect A(a,m);collect B(b, n);A. paixu();B. paixu();A. prin t();B. pri nt();collect C=A+B; collect D=A-B; collect E=A/B;C. paixu();D. paixu();E. paixu();C. pri nt();D. pri nt();E. pri nt(); return 0;第七題/文件名:hj/功能:圖形類一一繼承和派生/ 完成時間:2012-12-20#in cludeusing n amespace std;class picprotect

39、ed:double h,w;public:pic(double m,double n )h=m;w=n;;class recg:public picdouble A;public:recg(double m,double n): pic(m, n) void area()A=h*w;coutvvAvve ndl;class tag:public picdouble A;public:tag(double m,double n ):pic(m, n)void area()A=h*w/2; coutvvAvve ndl;int main()int m,n ,x,y; cinmn xy; recg

40、P(m, n);tag Q(x,y);P.area();Q.area();return 0;FxlesXMicrosuE-t Vj.aual St uid.ioKjProj ect sh jexc11|口卜3 53 5E157.5Pt-ess any heycontinueii第八題/文件名:df/功能:人民幣類(類型轉換)/ 完成時間:2012-12-20#i nclude #i nclude using n amespace std;class RMBprotected:double qia n;public:RMB()RMB(i nt x,i nt y,i nt z);double ge

41、t();;RMB:RMB(i nt x,i nt y,i nt z)qia n=x+0.10*y+0.01*z;double RMB:get()return qia n;int main()int m1, n1,q1,m2, n2,q2;double k1,k2;cin m1 n 1q1;cin k1;cin m2 n 2q2;cin k2;RMB s1(m1, n1,q1);RMB s2(m2, n2,q2);coutsetiosflags(ios:fixed)vvsetprecisio n(2)s1.get()-k1e ndl;coutsetiosflags(ios:fixed)vvset

42、precisio n(2)s2.get()-k2e ndl;return 0;第九題/文件名:df/功能:教師工資計算(抽象類)/ 完成時間:2012-12-20#i nclude using n amespace std;class teacherpublic:virtual void wage(i nt n)=0;class teacher_p:public teacherprotected:int s;public:void wage(i nt n)s=5000+50* n;coutse ndl;class teacher_v:public teacherprotected:int s;

43、public:void wage(i nt n)s=3000+30* n; coutvvsvve ndl;;class teacher_j:public teacherprotected:int s;public:void wage(i nt n)s=2000+20* n; coutvvsvve ndl;int main()teacher *q;teacher_p p;teacher_v v;teacherj;char ch;int n;for(int i=0;i ch n;if(ch=p)q=&p; q-wage( n);if(ch=v)q=&v; q-wage( n);if(ch=j)q=&j; q-wage( n);return 0;第十題/文件名:hp/功能:計算圖形面積和周長(抽象類 )/ 完成時間:2012-12-20#i nclude #in clude #i nclude using n amespace std;class shapepublic:virtual double area()=0;virtual dou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論