C++611章课后作业参考答案.docx
- 文档编号:30479079
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:35
- 大小:55.73KB
C++611章课后作业参考答案.docx
《C++611章课后作业参考答案.docx》由会员分享,可在线阅读,更多相关《C++611章课后作业参考答案.docx(35页珍藏版)》请在冰豆网上搜索。
C++611章课后作业参考答案
第六章类和对象
1.给出以下程序的执行结果
题目见《C++语言程序设计》9.9—9.21(P212)和《C++程序设计教程》6.2-6.4(P115)
答案:
《C++语言程序设计》
9.9
运行结果:
String
9.10
运行结果:
n=6
n=6
n=6
9.11
运行结果:
n=10,k=3
n=20,k=3
n=30,k=3
9.13
运行结果:
n=2
n=3
9.14
运行结果:
Constructor,i=0,Destructor
9.15
运行结果:
Constructor1
Constructor2
i=0
i=10
Destructor
Destructor
9.16
运行结果:
AConstructor
BConstructor
Value=0
BDestructor
ADestructor
9.17运行结果:
A=7,b=8
9.18运行结果:
567
9.19运行结果:
Constructor1
Constructor1
Constructor1
Constructor1
Destructor
Constructor2
Destructor
Constructor3
Destructor
x=0,y=0
x=5,y=0
x=2,y=3
Destructor
Destructor
Destructor
9.20运行结果:
(1,2,3):
count=2
(2,3,4):
count=2
9.21运行结果:
A:
Constructor
B:
Constructor
n=3
m=2
B:
Destructor
A:
Destructor
2.编写一个程序,输入若干个学生的英语和数学成绩,求出总分,并按总分从高到低排序,最后输出结果。
#include"iostream"
#include"string"
#include"iomanip"
usingnamespacestd;
classStudent
{
public:
char*name;
inteng,math,sum;
Student();
voidinscore();
voiddisplay();
~Student();
};
Student:
:
Student()
{
name=newchar[10];
}
voidStudent:
:
inscore()
{
cout<<":
";cin>>name;
cout<<"英语:
";cin>>eng;
cout<<"数学:
";cin>>math;
sum=eng+math;
}
voidStudent:
:
display()
{
cout< } Student: : ~Student() { delete[]name; } voidequal(Student&a,Student&b) { strcpy(a.name,b.name); a.eng=b.eng; a.math=b.math; a.sum=b.sum; } voidsort(Student*p,intn) { inti,j,exchange; Studenttmp; for(i=0;i { exchange=0; for(j=n-2;j>=i;j--) if(p[j+1].sum>p[j].sum) { equal(tmp,p[j+1]); equal(p[j+1],p[j]); equal(p[j],tmp); exchange=1; } if(! exchange) break; } } voidmain() { intn,i; Student*p; cout<<"请输入学生个数: ";cin>>n; p=newStudent[n]; for(i=0;i p[i].inscore(); cout<<"排序前: "< for(i=0;i p[i].display(); sort(p,n); cout<<"排序后: "< for(i=0;i p[i].display(); system("pause"); } 3.设计一个立方体类Box,它能提供立方体的体积和表面积。 #include"iostream" usingnamespacestd; classBox { floata; floatvolume; floatarea; public: Box(){} Box(floatr){a=r;} voidseta(floatr){a=r;} voidgetvolume(){volume=a*a*a;} voidgetarea(){area=6*a*a;} voiddisp() { cout<<"体积: "< "< } }; voidmain() { Boxobj1(5),obj2; obj2.seta(7); obj1.getarea(); obj1.getvolume(); cout<<"obj1=>"; obj1.disp(); obj2.getarea(); obj2.getvolume(); cout<<"obj2=>"; obj2.disp(); system("pause"); } 4.编写一个程序,已有若干个学生数据,这些数据包括学号、、语文成绩、数学成绩和英语成绩,求各门课程的平均分。 要求设计不同的成员函数来求各门课程的平均分,并使用成员函数指针来调用它们。 #include"iostream" #include"iomanip" #include"string" #defineN3 usingnamespacestd; classStudent { intno; charname[10]; intchi; intmath; inteng; staticintsum1; staticintsum2; staticintsum3; public: Student(intn,charna[],intd1,intd2,intd3) { no=n; strcpy(name,na); chi=d1;math=d2;eng=d3; sum1+=chi;sum2+=math;sum3+=eng; } doubleavg1(){return(sum1*1.0)/N;} doubleavg2(){return(sum2*1.0)/N;} doubleavg3(){return(sum3*1.0)/N;} voiddisp() { cout< } }; intStudent: : sum1=0; intStudent: : sum2=0; intStudent: : sum3=0; voidmain() { double(Student: : *fp)();//定义成员函数指针,本部分没讲。 该题可换成其它方法实现 Students1(1,"Li",89,77,98); Students2(2,"Zhang",98,65,82); Students3(3,"Mary",67,65,87); cout<<"输出结果"< s1.disp(); s2.disp(); s3.disp(); fp=&Student: : avg1; cout<<"语文平均分: "<<(s1.*fp)()< fp=&Student: : avg2; cout<<"语文平均分: "<<(s1.*fp)()< fp=&Student: : avg3; cout<<"语文平均分: "<<(s1.*fp)()< system("pause"); } 5.编写一个程序,统计学生成绩,其功能包括输入学生的和成绩,按成绩从高到低排列打印输出,对前70%的学生定为合格(PASS),而后30%的学生定义不及格(FAIL)。 要求采用面向对象方法编程。 #include"iostream" #include"iomanip" #include"string" #defineN10 usingnamespacestd; classStudent { charname[10]; intdeg; public: voidsetname(charna[]){strcpy(name,na);} char*getname(){returnname;} voidsetdeg(intd){deg=d;} intgetdeg(){returndeg;} }; classCompute { intn; Studentna[N]; public: voidgetdata()//读入学生的信息 { inti,tdeg; chartname[10]; cout<<"学生人数: "; cin>>n; for(i=0;i { cout<<"第"< cin>>tname>>tdeg; na[i].setname(tname); na[i].setdeg(tdeg); } } voidsort()//对成绩进行排序 { inti,j,pick; Studenttemp; for(i=0;i { pick=i; for(j=i+1;j { if(na[j].getdeg()>na[pick].getdeg()) pick=j; } temp=na[i]; na[i]=na[pick]; na[pick]=temp; } } voiddisp() { intcutoff,i; cout<<"输出结果"< cout<<"成绩合格否"< cout<<"------------------"< cutoff=n*7/10-1; for(i=0;i { cout< if(i<=cutoff) cout<<"PASS"< else cout<<"FAIL"< } } }; voidmain() { Computeobj; obj.getdata(); obj.sort(); obj.disp(); system("pause"); } 第七章引用 1.给出以下程序的执行结果 题目见《C++语言程序设计》10.2—10.10(P232)和《C++程序设计教程》7.1-7.2(P130) 《C++语言程序设计》10.2—10.10(P232): 参考答案: 10.2运行结果: n: 10,rf: 10 n: 15,rf: 15 n: 23,rf: 23 10.3运行结果: n=15,rf=15 &n=(n的地址),&rf=(rf的地址) n=10,m=20,rf=20 &n=(n的地址),&m=(m的地址),&rf=(rf的地址) 10.4运行结果: n=2 d1=0 d2=8 10.5运行结果: s1=25 s2=64 10.6运行结果: a=5 y=10 a=8 y=18 10.7运行结果: 63 10.8运行结果: 0,8 10.9运行结果: 1,2 10.10运行结果: x=1,y=2 x=30,y=40 《C++程序设计教程》7.1-7.2(P130): 7.1 7.2 2.编写一个程序,通过执行结果分析在引用类对象时是否执行类的构造函数与析构函数。 #include classSample { intx,y; public: Sample(){cout<<"执行类的构造函数! "< ~Sample(){cout<<"执行类的析构函数! "< }; voidmain() { Samples; cout<<"-----------------"< Sample&b=s; } 结果说明: 没有执行类的构造函数与析构函数. 3.编写一个程序,从键盘输入一些数字和字符,编程统计其中数字字符的个数和非数字字符的个数。 #include"iostream" usingnamespacestd; voidfun(charch,int&n,int&c) { if(ch>='0'&&ch<='9') n++; else c++; } voidmain() { inttn=0,tc=0; charch; cout<<"输入一个字符串"; cin>>ch; while(ch! ='#')//字符串以#结束 { fun(ch,tn,tc); cin>>ch; } cout<<"数字字符个数: "< cout<<"其它字符个数: "< system("pause"); } 第八章友元 1.给出以下程序的执行结果 题目见《C++语言程序设计》11.2—11.5(P243)和《C++程序设计教程》8.1-8.2(P142) 《C++语言程序设计》11.2—11.5参考答案: 11.2运行结果: A: : disp(): b1.num=100 A: : disp(): b2.num=200 b1.num=100 b1.num=100 b2.num=200 b2.num=200 11.3运行结果: n=100 11.4运行结果: 2 11.5运行结果: x=5,y=10 x=6,y=9 x=5,y=9 《C++程序设计教程》8.1-8.2参考答案: 8.1运行结果: n=100 8.2运行结果: thestudentisLiHu theteacherisWanPing 2.编写一个程序,设计一个点类Point,采用友元函数求两个点之间的距离,并用相关数据进行测试。 #include"iostream" #include"math.h" usingnamespacestd; classPoint { protected: doublex,y; public: Point(doublex1,doubley1) { x=x1;y=y1; } frienddoubledist(Pointp1,Pointp2) { doubled=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); returnd; } voiddisp() { cout<<"点("< } }; voidmain() { Pointp1(2,2),p2(3,3); p1.disp(); cout<<"到"; p2.disp(); cout<<"距离为"< system("pause"); } 3.有一个学生类student,包括学生、成绩,设计一个友元函数比较两个学生成绩的高低,并求出最高分者和最低分者。 #include"iostream" #include"string" usingnamespacestd; classstudent { charname[10]; intdeg; public: student(charna[],intd) { strcpy(name,na); deg=d; } char*getname(){returnname;} friendintcompare(student&s1,student&s2) { if(s1.deg>s2.deg) return1; elseif(s1.deg==s2.deg) return0; elsereturn-1; } }; voidmain() { studentst[]={student("王华",78),student("明",92),student("伟",62),student("强",88)}; inti,min=0,max=0; for(i=1;i<4;i++) { if(compare(st[max],st[i])==-1) max=i; elseif(compare(st[min],st[i])==1) min=i; } cout<<"输出结果: "< cout<<"最高分者: "< cout<<"最低分者: "< system("pause"); } 4.设计一个直线类Line,其中包含3个数据成员,即a、b和c,以及一个求两直线交点的友元函数setpoint和显示数据成员的disp成员函数,并用数据进行测试。 两直线 的交点为(x,y)的计算公式为: #include #include classPoint { doublex,y; public: Point(){}; Point(doublex1,doubley1) { x=x1;y=y1; } voiddisp() { cout<<"("< } }; classLine { inta,b,c; public: Line(inta1,intb1,intc1) { a=a1;b=b1;c=c1; } friendPointsetpoint(Linel1,Linel2) { doublex=(1.0*l1.b*l2.c-l2.b*l1.c)/(l1.a*l2.b-l2.a*l1.b); doubley=(1.0*l1.c*l2.a-l2.c*l1.a)/(l1.a*l2.b-l2.a*l1.b); Pointp(x,y); returnp; } voiddisp() {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 611 课后 作业 参考答案