1面向对象程序设计课后题答案第二章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】程序的运行结果:1020【2.22】编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。#includeiostream.hintmain(){int*p,i;p=newint[20];2p[0]=1;p[1]=1;for(i=2;i20;i++){p[i]=p[i-1]+p[i-2];}for(i=0;i20;i++){coutp[i]endl;}return0;}【2.23】编写一个C++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。重载sroot()3次,让它返回整数、长整数与双精度数的二次方根。#includeiostream.h#includemath.hdoublesroot(intm){returnsqrt(m);}doublesroot(longm){returnsqrt(m);}doublesroot(doublem){returnsqrt(m);}intmain(){3coutsroot(145)=sroot(145)endl;coutsroot(123456)=sroot(123456)endl;coutsroot(1.44)=sroot(1.44)endl;return0;}【2.24】编写一个C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?#includeiostream.hintmain(){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分的硬币,共有k种换法endl;return0;}【2.25】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。要求使用变量的引用。voidchange(int&a,int&b){intt=a;a=b;4b=t;}intmain(){intm,n;cout请输入两个整数:;cinmn;if(mn)change(m,n);cout这两个数从小到大依次为:mnendl;return0;}【2.26】编写一个C++风格的程序,用二分法求解f(x)==0的根。假设方程为:2*x*x*x-4*x*x+3*x-6=0#includeiostream#includecmathusingnamespacestd;doublef(doublex){return2*x*x*x-4*x*x+3*x-6;}intmain(){doubleleft,right,middle,ymid,yleft,yright;cout请按由小到大的顺序输入两个数:;cinleftright;yleft=f(left);yright=f(right);if(yleft*yright0)5{cout您输入的两个数,用二分法无法求得方程的根endl;exit(0);}do{middle=(left+right)/2;ymid=f(middle);if(yleft*ymid0){right=middle;yright=ymid;}if(yright*ymid0){left=middle;yleft=ymid;}}while(fabs(ymid)=1e-6);cout方程的根为:middleendl;return0;}第三章类和对象【3.6】假设在程序中已经声明了类point,并建立了其对象p1和p4。请回答以下几个语句有什么区别?(1)pointp2,p3;(2)pointp2=p1;(3)pointp2(p1);(4)p4=p1;6【解答】语句(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,2030,4850,6870,8090,1611,120【3.19】写出下面程序的运行结果。Constructing10Destructing100Destructing7【3.20】写出下面程序的运行结果。3objectsinexistence4objectsinexistenceafterallocation3objectsinexistenceafterdelection【3.21】写出下面程序的运行结果。Countingat0Countingat1Countingat2Countingat3Countingat4Countingat5Countingat6Countingat7Countingat8Countingat9【3.22】写出下面程序的运行结果。Defaultconstructorcalled.Defaultconstructorcalled.Defaultconstructorcalled.Constructor:a=1,b=2Constructor:a=3,b=4Constructor:a=5,b=6【3.23】写出下面程序的运行结果。Con.Copycon.default.【3.24】写出下面程序的运行结果。A=5B=14A=98B=14【3.25】写出下面程序的运行结果。5,722,25【3.26】写出下面程序的运行结果。ConstructingConstructingA=5B=15DestructingA=10B=15DestructingDestructingDestructing【3.27】指出下列程序中的错误,并说明为什么。classStudent{charname[10];intage;floataver;voidprintStu();};voidmain(){Studentp1,p2,p3;p1.age=30;//Error:age为私有成员,不能在类外直接访问}【3.28】指出下列程序中的错误,并说明为什么。classStudent9{intage;intsno;public:/*在成员函数定义前加public,不然默认为private,则在主函数中不能调用私有的成员函数*/voidprintStu();voidsetSno(intd);voidsetAge(inta);//添加成员函数的声明};voidprintStu()//类外定义成员函数需加类名::,改为:voidStudent::printStu(){cout\nStudentNo.issno,;coutageisage.endl;}voidsetSno(ints)//类外定义成员函数需加类名::,改为:voidStudent::setSno(ints){sno=s;}voidsetAge(inta)//类外定义成员函数需加类名::,改为:voidStudent::setAge(inta){age=a;}voidmain(){Studentlin;lin.setSno(20021);lin.setAge(20);lin.printStu();10}【3.29】指出下列程序中的错误,并说明为什么。classPoint{public:intx,y;private:Point()//构造函数不能说明为private的{x=1;y=2;}};voidmain(){Pointcpoint;cpoint.x=2;}构造函数Point是私有的,语句“Pointcopint;”执行时出现错误。错误的原因是:类Point的构造函数是私有函数,创建对象cpoint时不能调用它。【3.30】下面是一个计算器类的定义,请完成该类成员函数的实现。#includeiostreamusingnamespacestd;classCounter{public:Counter(intnumber);voidincrement();//给原值加111voiddecrement();//给原值减1intgetValue();//取得计数器值intprint();//显示计数private:intvalue;};counter::counter(intnumber){value=number;}voidcounter::increment(){value++;}voidcounter::decrement(){value--;}intcounter::getvalue(){returnvalue;}intcounter::print(){cout\nvalueis:valueendl;return0;}voidmain(){counterop(10);12op.print();op.decrement();op.print();op.increment();op.print();}【3.31】根据注释语句的提示,实现类Date的成员函数。#includeiostreamusingnamespacestd;classDate{public:voidprintDate();//显示日期voidsetDay(intd);//设置日的值voidsetMonth(intm);//设置月的值voidsetYear(inty);//设置年的值private:intday,month,year;};voidDate::printDate(){coutyear/month/dayendl;}voidDate::setDay(intd){day=d;}voidDate::setMonth(intm){month=m;13}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对象的体积。#includeiostreamusingnamespacestd;constdoublePI=3.1415926;classCylinder{doubleradius,height,volume;public:Cylinder(doubler,doubleh){radius=r;height=h;volume=PI*radius*radius*height;}14voidvol(){coutthevolumeisvolumeendl;}};intmain(){Cylinderc(2,5);c.vol();return0;}【3.33】构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1~5