C++6-11章課后作業(yè)參考答案_第1頁
C++6-11章課后作業(yè)參考答案_第2頁
C++6-11章課后作業(yè)參考答案_第3頁
C++6-11章課后作業(yè)參考答案_第4頁
C++6-11章課后作業(yè)參考答案_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第六章 類和對象1給出以下程序的執(zhí)行結(jié)果題目見C+語言程序設(shè)計9.99.21(P212)和C+程序設(shè)計教程6.2-6.4(P115)答案:C+語言程序設(shè)計9.9運行結(jié)果:String9.10運行結(jié)果:n=6n=6n=69.11運行結(jié)果:n=10, k=3n=20, k=3n=30, k=39.13運行結(jié)果:n=2n=39.14運行結(jié)果:Constructor, i=0,Destructor9.15運行結(jié)果:Constructor1Constructor2i=0i=10DestructorDestructor9.16運行結(jié)果:A ConstructorB ConstructorValue=0B

2、DestructorA Destructor9.17運行結(jié)果:A=7, b=89.18運行結(jié)果:5 6 79.19運行結(jié)果:Constructor1Constructor1Constructor1Constructor1DestructorConstructor2DestructorConstructor3Destructorx=0, y=0x=5, y=0x=2, y=3DestructorDestructorDestructor9.20運行結(jié)果:(1,2,3):count=2(2,3,4):count=29.21運行結(jié)果:A: ConstructorB: Constructorn=3m=2

3、B: DestructorA: Destructor2編寫一個程序,輸入若干個學(xué)生的英語和數(shù)學(xué)成績,求出總分,并按總分從高到低排序,最后輸出結(jié)果。#include "iostream"#include "string"#include "iomanip"using namespace std;class Studentpublic:char *name;int eng,math,sum;Student();void inscore();void display();Student();Student:Student() name=ne

4、w char10;void Student:inscore ()cout << "姓名:" cin >> name;cout <<"英語:"cin >> eng;cout << "數(shù)學(xué):"cin >> math;sum=eng+math;void Student:display ()cout << setw(10) << name << setw(6) << eng << setw(6) <<

5、 math << setw(10) << sum << endl;Student:Student() delete name;void equal(Student &a,Student &b)strcpy( , );a.eng =b.eng ;a.math =b.math ;a.sum =b.sum ;void sort(Student *p,int n)int i,j,exchange;Student tmp;for (i=0;i<n-1;i+)exchange=0;for (j=n-2;j>=i;j-)

6、if (pj+1.sum >pj.sum )equal(tmp,pj+1);equal(pj+1,pj);equal(pj,tmp);exchange=1;if(!exchange)break;void main()int n,i;Student *p;cout <<"請輸入學(xué)生個數(shù):" cin >> n;p=new Studentn;for (i=0;i<n;i+)pi.inscore ();cout << "排序前:" <<endl;for (i=0;i<n;i+)pi.display

7、 ();sort(p,n);cout << "排序后:" << endl;for (i=0;i<n;i+)pi.display ();system("pause");3設(shè)計一個立方體類Box,它能提供立方體的體積和表面積。#include "iostream"using namespace std;class Boxfloat a;float volume;float area;public:Box() Box(float r) a=r;void seta(float r) a=r;void getvol

8、ume() volume=a*a*a;void getarea() area=6*a*a;void disp()cout << "體積:" << volume << ",表面積:" << area << endl;void main()Box obj1(5),obj2;obj2.seta (7);obj1.getarea ();obj1.getvolume ();cout << "obj1=>"obj1.disp ();obj2.getarea ();obj

9、2.getvolume ();cout << "obj2=>"obj2.disp ();system("pause");4編寫一個程序,已有若干個學(xué)生數(shù)據(jù),這些數(shù)據(jù)包括學(xué)號、姓名、語文成績、數(shù)學(xué)成績和英語成績,求各門課程的平均分。要求設(shè)計不同的成員函數(shù)來求各門課程的平均分,并使用成員函數(shù)指針來調(diào)用它們。#include "iostream"#include "iomanip"#include "string"#define N 3using namespace std;clas

10、s Studentint no;char name10;int chi;int math;int eng;static int sum1;static int sum2;static int sum3;public:Student(int n,char na, int d1,int d2,int d3)no=n;strcpy(name,na);chi=d1;math=d2;eng=d3;sum1+=chi;sum2+=math;sum3+=eng;double avg1() return(sum1*1.0)/N;double avg2() return(sum2*1.0)/N;double a

11、vg3() return(sum3*1.0)/N;void disp()cout << setw(4) << no << setw(10) << name << setw(6) << chi << setw(6) << math << setw(6) << eng << endl;int Student:sum1 =0;int Student:sum2 =0;int Student:sum3 =0;void main()double (Student:*fp)()

12、; /定義成員函數(shù)指針,本部分沒講。該題可換成其它方法實現(xiàn)Student s1(1,"Li",89,77,98);Student s2(2,"Zhang",98,65,82);Student s3(3,"Mary",67,65,87);cout << "輸出結(jié)果" << endl;s1.disp ();s2.disp ();s3.disp ();fp=&Student:avg1 ;cout << "語文平均分:" << (s1.*fp)()

13、 << endl;fp=&Student:avg2 ;cout << "語文平均分:" << (s1.*fp)() << endl;fp=&Student:avg3 ;cout << "語文平均分:" << (s1.*fp)() << endl;system("pause");5編寫一個程序,統(tǒng)計學(xué)生成績,其功能包括輸入學(xué)生的姓名和成績,按成績從高到低排列打印輸出,對前70%的學(xué)生定為合格(PASS),而后30%的學(xué)生定義不及格(FAI

14、L)。要求采用面向?qū)ο蠓椒ň幊獭?include "iostream"#include "iomanip"#include "string"#define N 10using namespace std;class Studentchar name10;int deg;public:void setname(char na) strcpy(name,na);char *getname() return name;void setdeg(int d) deg=d;int getdeg() return deg;class Compute

15、int n;Student naN;public:void getdata() /讀入學(xué)生的信息int i,tdeg;char tname10;cout << "學(xué)生人數(shù):"cin >> n;for (i=0;i<n;i+)cout << "第" << i+1 << "個學(xué)生的姓名和成績"cin >> tname >> tdeg;nai.setname (tname);nai.setdeg (tdeg);void sort() /對成績進行排序i

16、nt i,j,pick;Student temp;for (i=0;i<n-1;i+)pick=i;for(j=i+1;j<n;j+)if (naj.getdeg () > napick.getdeg ()pick=j;temp=nai;nai=napick;napick=temp;void disp()int cutoff,i;cout << "輸出結(jié)果" << endl;cout << "姓名 成績 合格否" << endl;cout << "-" &l

17、t;< endl;cutoff=n*7/10-1;for(i=0;i<n;i+)cout << setw(6) << nai.getname () << setw(3) << nai.getdeg ();if(i<=cutoff)cout << " PASS" << endl;elsecout << " FAIL" << endl;void main()Compute obj;obj.getdata ();obj.sort ();obj.di

18、sp ();system("pause");第七章 引用1給出以下程序的執(zhí)行結(jié)果題目見C+語言程序設(shè)計10.210.10(P232)和C+程序設(shè)計教程7.1-7.2(P130)C+語言程序設(shè)計10.210.10(P232):參考答案:10.2運行結(jié)果:n :10, rf:10n:15, rf:15n:23,rf:2310.3運行結(jié)果:n=15, rf =15&n=(n 的地址), &rf=(rf的地址)n=10, m=20, rf =20&n=(n 的地址), &m=(m的地址), &rf=(rf的地址)10.4運行結(jié)果: n=2 d

19、1=0 d2=810.5運行結(jié)果: s1=25 s2=6410.6運行結(jié)果: a=5 y=10 a=8 y=1810.7運行結(jié)果:6310.8運行結(jié)果:0, 810.9運行結(jié)果:1, 210.10運行結(jié)果:x=1, y=2 x=30, y=40C+程序設(shè)計教程7.1-7.2(P130):71722.編寫一個程序,通過執(zhí)行結(jié)果分析在引用類對象時是否執(zhí)行類的構(gòu)造函數(shù)與析構(gòu)函數(shù)。#include <iostream.h>class Sampleint x,y;public:Sample() cout <<"執(zhí)行類的構(gòu)造函數(shù)!"<< endl;S

20、ample() cout << "執(zhí)行類的析構(gòu)函數(shù)!"<< endl;void main()Sample s;cout << "-" << endl;Sample &b=s;結(jié)果說明:沒有執(zhí)行類的構(gòu)造函數(shù)與析構(gòu)函數(shù)3.編寫一個程序,從鍵盤輸入一些數(shù)字和字符,編程統(tǒng)計其中數(shù)字字符的個數(shù)和非數(shù)字字符的個數(shù)。#include "iostream"using namespace std;void fun(char ch,int &n,int &c)if (ch >=

21、'0' && ch <= '9')n+;elsec+;void main()int tn=0,tc=0;char ch;cout << "輸入一個字符串"cin >> ch;while(ch!='#') /字符串以#結(jié)束fun(ch,tn,tc);cin >> ch;cout << "數(shù)字字符個數(shù):"<< tn << endl;cout << "其它字符個數(shù):" << t

22、c << endl;system("pause");第八章 友元1給出以下程序的執(zhí)行結(jié)果題目見C+語言程序設(shè)計11.211.5(P243)和C+程序設(shè)計教程8.1-8.2(P142)C+語言程序設(shè)計11.211.5參考答案:11.2運行結(jié)果: A: disp(): b1.num=100 A: disp(): b2.num=200 b1.num=100 b1.num=100 b2.num=200 b2.num=20011.3運行結(jié)果:n=10011.4運行結(jié)果:211.5運行結(jié)果: x=5, y=10 x=6, y=9 x=5, y=9C+程序設(shè)計教程8.1-8.

23、2參考答案:8.1運行結(jié)果:n=1008.2運行結(jié)果:the student is Li Hu the teacher is Wan Ping2.編寫一個程序,設(shè)計一個點類Point,采用友元函數(shù)求兩個點之間的距離,并用相關(guān)數(shù)據(jù)進行測試。#include "iostream"#include "math.h"using namespace std;class Pointprotected:double x,y;public:Point(double x1,double y1)x=x1;y=y1;friend double dist(Point p1,Po

24、int p2)double d=sqrt(p1.x -p2.x)*(p1.x-p2.x)+(p1.y -p2.y)*(p1.y-p2.y);return d;void disp()cout << "點(" << x << "," << y << ")"void main()Point p1(2,2),p2(3,3);p1.disp ();cout << "到"p2.disp ();cout << "距離為"<

25、;< dist(p1,p2)<<endl;system("pause");3.有一個學(xué)生類student,包括學(xué)生姓名、成績,設(shè)計一個友元函數(shù)比較兩個學(xué)生成績的高低,并求出最高分者和最低分者。#include "iostream"#include "string"using namespace std;class studentchar name10;int deg;public:student(char na,int d)strcpy(name,na);deg=d;char *getname() return na

26、me;friend int compare(student &s1,student &s2)if (s1.deg > s2.deg )return 1;else if (s1.deg = s2.deg )return 0;else return -1;void main()student st=student("王華",78), student("李明",92),student("張偉",62), student("孫強",88);int i,min=0,max=0;for (i=1;i<

27、;4;i+)if(compare(stmax,sti)=-1)max=i;else if(compare(stmin,sti)=1)min=i;cout <<"輸出結(jié)果:" << endl;cout << " 最高分者:" << stmax.getname () << endl;cout << " 最低分者:" << stmin.getname () << endl;system("pause");4.設(shè)計一個直線類Li

28、ne,其中包含3個數(shù)據(jù)成員,即a、b和c,以及一個求兩直線交點的友元函數(shù)setpoint和顯示數(shù)據(jù)成員的disp成員函數(shù),并用數(shù)據(jù)進行測試。兩直線的交點為(x,y)的計算公式為:#include <iostream.h>#include <math.h>class Pointdouble x,y;public:Point() ;Point(double x1,double y1)x=x1;y=y1;void disp()cout << "(" << x << "," << y <

29、;< ")" << endl;class Lineint a,b,c;public:Line(int a1,int b1,int c1)a=a1;b=b1;c=c1;friend Point setpoint(Line l1, Line l2)double x=(1.0 * l1.b *l2.c -l2.b *l1.c )/(l1.a *l2.b -l2.a *l1.b );double y=(1.0* l1.c *l2.a - l2.c *l1.a )/(l1.a *l2.b -l2.a *l1.b );Point p(x,y);return p;voi

30、d disp()cout << a << "x*x+" << b << "x+" << c << "=0" << endl;void main()Point p;Line a(2,3,5), b(-3,4,7);a.disp ();b.disp ();p=setpoint(a,b);p.disp ();第九章 運算符重載1.運算符重載能否創(chuàng)建新的運算符。 不能2給出以下程序的執(zhí)行結(jié)果題目見C+語言程序設(shè)計12.312.7(P273)。參考答案:12.3

31、運行結(jié)果:2.512.4運行結(jié)果:類賦值2,311,-612.5運行結(jié)果:6下標(biāo)超界7下標(biāo)超界string6下標(biāo)超界7下標(biāo)超界length:612.6運行結(jié)果:n=10 n=3012.7運行結(jié)果:1 2 3 4 5 6 7 8 9 103.編寫一個程序,采用成員函數(shù)運算符重載方式實現(xiàn)復(fù)數(shù)的四則運算。并用數(shù)據(jù)進行測試。#include "iostream"using namespace std;class Complexdouble real,imag;public:Complex() real=imag=0;Complex(double r,double i) real=r

32、;imag=i;Complex operator +(const Complex &c)return Complex(real+c.real ,imag+c.imag );Complex operator -(const Complex &c)return Complex(real-c.real ,imag-c.imag );Complex operator *(const Complex &c)return Complex(real*c.real -imag*c.imag ,real*c.imag +imag*c.real );Complex operator /(c

33、onst Complex &c)return Complex(real*c.real +imag*c.imag )/(c.real *c.real +c.imag *c.imag ),(imag*c.real -real*c.imag )/(c.real *c.real +c.imag *c.imag );void disp()if(imag <0)cout << real << imag << "i" << endl;elsecout << real << "+" &

34、lt;< imag << "i" << endl;void main()Complex c1(1,2),c2(4,5);Complex c3;c3=c1+c2;cout << "c1+c2="c3.disp();c3=c1-c2;cout << "c1-c2="c3.disp();c3=c1*c2;cout << "c1*c2="c3.disp();c3=c1/c2;cout << "c1/c2="c3.disp();

35、system("pause");4. 編寫一個程序,采用友元函數(shù)運算符重載方式實現(xiàn)復(fù)數(shù)的四則運算。并用數(shù)據(jù)進行測試。5.設(shè)計一個日期類Date,包括年、月、日等私有數(shù)據(jù)成員。要求實現(xiàn)日期的基本運算,如一日期加上天數(shù)、一日期減去天數(shù)、兩日期相差的天數(shù)等。#include "iostream"using namespace std;static int dys=31,28,31,30,31,30,31,31,30,31,30,31;class dateint year,month,day;public:date() date(int y,int m,int

36、d)year=y;month=m;day=d;void disp()cout << year << "年"<< month << "月" << day <<"日" << endl; friend date operator+ (date d, int day) /運算符重載友元函數(shù)date dt = d;day = dt.day +day;while (day > dysdt.month -1) /對月和年的計算day= day - dysdt.

37、month-1;dt.month +;if (dt.month = 13)dt.month=1;dt.year +;dt.day = day;return dt; date operator - (int day) /運算符重載成員函數(shù)date dt=*this;day=dt.day -day;while (day <=0) /如果,說明已減到上一個月day+=dysdt.month -1; /得到對應(yīng)的上個月的某號dt.month -;if (dt.month = 0) /若為,說明已減到上一年dt.month =12;dt.year -;dt.day =day;return dt;v

38、oid main()date d1(2003,11,25),d2,d3;d1.disp ();d2=d1-1;d2.disp ();d3=d1+10;d3.disp ();system("pause");第10章 模板1給出以下程序的執(zhí)行結(jié)果題目見C+語言程序設(shè)計13.313.7(P290)。參考答案:13.3運行結(jié)果:d=8, i=8 D=2.5, I =123413.4運行結(jié)果:n=13.813.5運行結(jié)果:n=3013.6運行結(jié)果:n=10 13.7運行結(jié)果:n=162.設(shè)計一個函數(shù)模板max<T>求一個數(shù)組中最大的元素,并以整數(shù)數(shù)組和字符數(shù)組進行調(diào)用,并

39、采用相關(guān)數(shù)據(jù)進行測試。#include <iostream.h>template <class T>T max(T a,int n)T temp=a0;for (int i=1;i<n;i+)if (temp<ai)temp = ai;return temp;void main()int a=6,2,5,8,7;char b='a','b','c','d','e'cout << "a中最大值:" << max(a,5) <<

40、 endl;cout << "b中最大值:" << max(b,5) << endl;3.設(shè)計一個類模板store<T>用于存儲某一類型的數(shù)據(jù),并以整數(shù)和字符串進行實例化。#include <iostream.h>template <class T>class store /聲明了類模板store<T>T item;public:T getitem()return item;void putitem(T x)item=x;void main()int n=10;store<int>

41、; s1; /類模板的實例化s1.putitem (n);cout << "n=" << s1.getitem () << endl;char str="string"store<char *> s2;s2.putitem (str);cout << "str=" << s2.getitem () << endl;4.設(shè)計一個”operator=”函數(shù)模板,用于比較各類型的數(shù)據(jù)是否相等。#include <iostream.h>templa

42、te <class T>int operator=(T x,T y)if(x=y) return 1;else return 0;void main()int a=2,b=5;if (a=b) cout << a<< "和"<< b << "相等"<<endl;else cout << a<< "和"<< b <<"不相等"<<endl;if ('a'='a&#

43、39;) cout << 'a'<< "和"<< 'a' << "相等"<<endl;else cout << 'a'<< "和"<< 'a' <<"不相等"<<endl;第11章 派生和繼承1 結(jié)出以下程序的執(zhí)行結(jié)果C+語言程序設(shè)計P32914.4運行結(jié)果: constructing A class constructing sub

44、 class destructing sub class destructing A class14.5運行結(jié)果: constructing A class n=1 constructing A class n=3 constructing sub class m=2 destructing sub class destructing A class destructing A class14.6運行結(jié)果:(虛基類) x=0, y =100 x=0, z=300 m=500 x=400, y=100 x=400,z=300 m=50014.10運行結(jié)果: x=3, y=5 x=4, y=5 x=2, y=314.11運行結(jié)果: constructing class A constructing class B1 constructing clas

溫馨提示

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

評論

0/150

提交評論