C++面向对象程序设计课后题答案.docx
- 文档编号:7909114
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:57
- 大小:28.43KB
C++面向对象程序设计课后题答案.docx
《C++面向对象程序设计课后题答案.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计课后题答案.docx(57页珍藏版)》请在冰豆网上搜索。
C++面向对象程序设计课后题答案
面向对象程序设计课后题答案
第二章C++概述
【2.6】D
【2.7】D
【2.8】A
【2.9】A
【2.10】B
【2.11】A
【2.12】C
【2.13】B
【2.14】D
【2.15】C
【2.16】D
【2.17】C
【2.18】程序的运行结果:
101
【2.19】程序的运行结果:
1010
【2.20】程序的运行结果:
10
20
【2.22】编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。
#include
intmain()
{
int*p,i;
p=newint[20];
p[0]=1;
p[1]=1;
for(i=2;i<20;i++)
{
p[i]=p[i-1]+p[i-2];
}
for(i=0;i<20;i++)
{
cout<
}
return0;
}
【2.23】编写一个C++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。
重载sroot()3次,让它返回整数、长整数与双精度数的二次方根。
#include
#include
doublesroot(intm)
{
returnsqrt(m);
}
doublesroot(longm)
{
returnsqrt(m);
}
doublesroot(doublem)
{
returnsqrt(m);
}
intmain()
{
cout<<"sroot(145)="< cout<<"sroot(123456)="< cout<<"sroot(1.44)="< return0; } 【2.24】编写一个C++风格的程序,解决百钱问题: 将一元人民币兑换成1、2、5分的硬币,有多少种换法? #include intmain() { intk=0; for(inti=0;i<=20;i++) { for(intj=0;j<=50;j++) { if(100-5*i-2*j>=0) { k++; } } } cout<<"将一元人民币兑换成1、2、5分的硬币,共有"< return0; } 【2.25】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。 要求使用变量的引用。 voidchange(int&a,int&b) { intt=a; a=b; b=t; } intmain() { intm,n; cout<<"请输入两个整数: "; cin>>m>>n; if(m>n) change(m,n); cout<<"这两个数从小到大依次为: "< return0; } 【2.26】编写一个C++风格的程序,用二分法求解f(x)==0的根。 假设方程为: 2*x*x*x-4*x*x+3*x-6=0 #include #include usingnamespacestd; doublef(doublex) { return2*x*x*x-4*x*x+3*x-6; } intmain() { doubleleft,right,middle,ymid,yleft,yright; cout<<"请按由小到大的顺序输入两个数: "; cin>>left>>right; yleft=f(left); yright=f(right); if(yleft*yright>0) { cout<<"您输入的两个数,用二分法无法求得方程的根"< exit(0); } do{ middle=(left+right)/2; ymid=f(middle); if(yleft*ymid<0) { right=middle; yright=ymid; } if(yright*ymid<0) { left=middle; yleft=ymid; } }while(fabs(ymid)>=1e-6); cout<<"方程的根为: "< return0; } 第三章类和对象 【3.6】假设在程序中已经声明了类point,并建立了其对象p1和p4。 请回答以下几个语句有什么区别? (1)pointp2,p3; (2)pointp2=p1; (3)pointp2(p1); (4)p4=p1; 【解答】语句 (1)使用带默认参数的构造函数,或不带参数的构造函数,定义了point类的两个对象p2,p3; 语句 (2)在建立新对象p2时,用已经存在的对象p1去初始化新对象p2,在这个过程中用“赋值法”调用了拷贝构造函数; 语句(3)在建立新对象p2时,用已经存在的对象p1去初始化新对象p2,在这个过程中用“带入法”调用了拷贝构造函数; 【3.7】B 【3.8】C 【3.9】C 【3.10】B 【3.11】B 【3.12】A 【3.13】A 【3.14】B 【3.15】A 【3.16】B 【3.17】B 【3.18】写出下面程序的运行结果。 10,20 30,48 50,68 70,80 90,16 11,120 【3.19】写出下面程序的运行结果。 Constructing 10 Destructing 100 Destructing 【3.20】写出下面程序的运行结果。 3objectsinexistence 4objectsinexistenceafterallocation 3objectsinexistenceafterdelection 【3.21】写出下面程序的运行结果。 Countingat0 Countingat1 Countingat2 Countingat3 Countingat4 Countingat5 Countingat6 Countingat7 Countingat8 Countingat9 【3.22】写出下面程序的运行结果。 Defaultconstructorcalled. Defaultconstructorcalled. Defaultconstructorcalled. Constructor: a=1,b=2 Constructor: a=3,b=4 Constructor: a=5,b=6 【3.23】写出下面程序的运行结果。 Con. Copycon. default. 【3.24】写出下面程序的运行结果。 A=5 B=14 A=9 B=14 【3.25】写出下面程序的运行结果。 5,7 22,25 【3.26】写出下面程序的运行结果。 Constructing Constructing A=5 B=15 Destructing A=10 B=15 Destructing Destructing Destructing 【3.27】指出下列程序中的错误,并说明为什么。 classStudent { charname[10]; intage; floataver; voidprintStu(); }; voidmain() { Studentp1,p2,p3; p1.age=30;//Error: age为私有成员,不能在类外直接访问 } 【3.28】指出下列程序中的错误,并说明为什么。 classStudent { intage; intsno; public: /*在成员函数定义前加public,不然默认为private,则在主函数中不能调用私有的成员函数*/ voidprintStu(); voidsetSno(intd); voidsetAge(inta);//添加成员函数的声明 }; voidprintStu() //类外定义成员函数需加类名: : ,改为: voidStudent: : printStu() { cout<<"\nStudentNo.is"< cout<<"ageis"< } voidsetSno(ints) //类外定义成员函数需加类名: : ,改为: voidStudent: : setSno(ints) { sno=s; } voidsetAge(inta) //类外定义成员函数需加类名: : ,改为: voidStudent: : setAge(inta) { age=a; } voidmain() { Studentlin; lin.setSno(20021); lin.setAge(20); lin.printStu(); } 【3.29】指出下列程序中的错误,并说明为什么。 classPoint { public: intx,y; private: Point()//构造函数不能说明为private的 { x=1; y=2; } }; voidmain() { Pointcpoint; cpoint.x=2; } 构造函数Point是私有的,语句“Pointcopint;”执行时出现错误。 错误的原因是: 类Point的构造函数是私有函数,创建对象cpoint时不能调用它。 【3.30】下面是一个计算器类的定义,请完成该类成员函数的实现。 #include usingnamespacestd; classCounter { public: Counter(intnumber); voidincrement();//给原值加1 voiddecrement();//给原值减1 intgetValue();//取得计数器值 intprint();//显示计数 private: intvalue; }; counter: : counter(intnumber) { value=number; } voidcounter: : increment() { value++; } voidcounter: : decrement() { value--; } intcounter: : getvalue() { returnvalue; } intcounter: : print() { cout<<"\nvalueis: "< return0; } voidmain() { counterop(10); op.print(); op.decrement(); op.print(); op.increment(); op.print(); } 【3.31】根据注释语句的提示,实现类Date的成员函数。 #include usingnamespacestd; classDate { public: voidprintDate();//显示日期 voidsetDay(intd);//设置日的值 voidsetMonth(intm);//设置月的值 voidsetYear(inty);//设置年的值 private: intday,month,year; }; voidDate: : printDate() { cout< } voidDate: : setDay(intd) { day=d; } voidDate: : setMonth(intm) { month=m; } voidDate: : setYear(inty) { year=y; } intmain() { DatetestDay; testDay.setDay(5); testDay.setMonth(10); testDay.setYear(2003); testDay.printDate(); return0; } 【3.32】建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。 用类cylinder计算圆柱体的体积,并存储在一个double变量中。 在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。 #include usingnamespacestd; constdoublePI=3.1415926; classCylinder { doubleradius,height,volume; public: Cylinder(doubler,doubleh) { radius=r; height=h; volume=PI*radius*radius*height; } voidvol() { cout<<"thevolumeis"< } }; intmain() { Cylinderc(2,5); c.vol(); return0; } 【3.33】构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1~5,将price初始化为qu的10倍。 显示每个对象的qu*price值。 【3.34】修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price值。 #include usingnamespacestd; classBook { private: intqu,price; public: Book(inti); voidprint(); voidprintqandp(); }; Book: : Book(inti) { qu=i; price=qu*10; } voidBook: : print() { cout<<"theBook'squis: "< cout<<"theBook'spriceis: "< } voidBook: : printqandp() { cout<<"theBook'squ*priceis: "< } voidmain() { Booka[5]={1,2,3,4,5}; inti; for(i=0;i<5;i++) { a[i].print(); } Book*b=&a[4];//逆序显示数组元素 for(i=0;i<5;i++) { b->printqandp(); b--; } Book*c=a;//顺序显示数组元素 for(i=0;i<5;i++) { c->printqandp(); c++; } } //或者 classBook { private: intqu,price; public: Book(intq,intp); voidprint(); voidprintqandp(); }; Book: : Book(intq,intp) { qu=q; price=p; } voidBook: : print() { cout<<"theBook'squis: "< cout<<"theBook'spriceis: "< } voidBook: : printqandp() { cout<<"theBook'squ*priceis: "< } voidmain() { Booka[5]={Book(1,10),Book(2,20),Book(3,30),Book(4,40),Book(5,50)}; inti; for(i=0;i<5;i++) { a[i].print(); } Book*b=&a[4];//逆序显示数组元素 for(i=0;i<5;i++) { b->printqandp(); b--; } Book*c=a;//顺序显示数组元素 for(i=0;i<5;i++) { c->printqandp(); c++; } } 【3.35】构建一个类Stock,含字符数组stockcode[]及整型数据成员quan、双精度型数据成员price。 构造函数含3个参数: 字符数组na[]及q、p。 当定义Stock的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。 未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。 成员函数print()没有形参,需使用this指针,显示对象数据成员的内容。 假设类Stock第1个对象的三个参数为: “600001”、3000和5.67,第2个对象的第1个数据成员的值是“600001”,第2和第3个数据成员的值取默认值。 要求编写程序分别显示这两个对象数据成员的值。 #include #include usingnamespacestd; classStock { public: Stock(charna[],intq=1000,doublep=8.98); print(); private: charstockcode[16]; intquan; floatprice; }; Stock: : Stock(charna[],intq,doublep) { strcpy(stockcode,na); quan=q; price=p; } Stock: : print() { cout<<"stocknode: "< "< cout<<""<<"price: "< } voidmain() { Stocka("600001",3000,5.67); Stockb("600001"); a.print(); b.print(); } 【3.36】编写一个程序,已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生人数和平均成绩(要求将学生人数和总成绩用静态数据成员表示)。 #include #include usingnamespacestd; classStudent { stringname; stringsno; doublescore; staticintnum; staticdoublesum; public: Student(stringn,stringno,doubles); voidprint(); staticdoublegetAverage(); staticdoublegettotal(); staticintgetnum(); }; intStudent: : num=0; doubleStudent: : sum=0; Student: : Student(stringn,stringno,doubles) { name=n; sno=no; score=s; num++; sum+=s; } voidStudent: : print() { cout<<"学生的学号为: "< "< "< } intStudent: : getnum() { returnnum; } doubleStudent: : getAverage() { if(num==0) return0; else returnsum/num; } doubleStudent: : gettotal() { returnsum; } intmain() { cout<<"当前学生人数为: "< : getnum()<<"学生的总成绩为: "< : gettotal()<<"学生的平均成绩为: "< : getAverage()< Students1("12012","张明",80); s1.print(); cout<<"当前学生人数为: "< "< "< Students2("09615","李涛",50); s2.print(); cout<<"当前学生人数为: "< "< "< Students3("12016","王晓",90); s3.print(); cout<<"当前学生人数为: "< "< "< return0; } 第四章派生类与继承 【4.8】A 【4.9】C 【4.10】C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 课后 答案