您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > C++面向对象程序设计习题解答与上机指导(第二版)源程序
1C++面向对象程序设计习题解答与上机指导(第2版)习题参考答案源代码使用源程序的几点注意事项(1)由于源程序在复制、编辑、解压缩等过程中可能引起部分符号(主要是标点符号,如分号、冒号、逗号、引号)的字体、半全角等发生变化,在编译时可能被检出语法错误,只要使用“替换”功能,纠正后即能顺利运行。(2)有的C++系统(如VisualC++6.0)没有完全实现C++标准,它所提供的不带后缀的.h的头文件不支持友元运算符重载函数,在VisualC++6.0中编译会出错,这时可采用带后缀的.h头文件。将程序中的#includeiostreamusingnamespacestd;修改成#includeiostream.h即可顺利运行。第2章C++基础【2.2】下面是一个C程序,改写它,使它采用C++风格的I/O语句。#includestdio.hintmain(){inta,b,d,min;printf(Entertwonumbers:);scanf(%d%d,&a,&b);min=ab?b:a;for(d=2;dmin;d++)if(((a%d)==0)&&((b%d)==0))break;if(d==min){printf(Nocommondenominators\n);return0;}printf(Thelowestcommondenominatoris%d\n,d);return0;}【解】#includeiostreamusingnamespacestd;intmain(){inta,b,d,min;coutEntertwonumbers:;cina;cinb;2min=ab?b:a;for(d=2;dmin;d++)if(((a%d)==0)&&((b%d)==0))break;if(d==min){coutNocommondenominators\n;return0;}coutThelowestcommondenominatorisendld;return0;}【2.24】写出下列程序的运行结果。#includeiostreamusingnamespacestd;inti=15;intmain(){inti;i=100;::i=i+1;cout::iendl;return0;}运行结果:101Pleaseanykeytocontinue。【2.25】写出下列程序的运行结果。#includeiostreamusingnamespacestd;voidf(int&m,intn){inttemp;temp=m;m=n;n=temp;}intmain(){inta=5,b=10;f(a,b);coutabendl;return0;}结果:1010Pleaseanykeytocontinue。【2.26】分析下面程序的输出结果。#includeiostreamusingnamespacestd;3int&f(int&i){i+=10;returni;}intmain(){intk=0;int&m=f(k);coutkendl;m=20;coutkendl;return0;}运行结果:1020Pleaseanykeytocontinue。【2.27】编写一个C++风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。【解】实现本题功能的程序如下:#includeiostreamusingnamespacestd;intmain(){int*p=newint[20];//动态分配20个整型内存空间*p=1;*(p+1)=1;//对前面2个内存空间赋值1cout*p\t*(p+1)\t;p=p+2;//p指向第3个内存空间for(inti=3;i=20;i++){*p=*(p-1)+*(p-2);cout*p\t;if(i%5==0)coutendl;p++;//p指向下一个内存空间;}return0;}【2.28】编写一个C++风格的程序,建立一个被称为sroot的函数,返回其参数的二次方根。重载函数sroot三次,让它返回整数、长整数与双精度数的二次方根(计算二次方根时,可以使用标准库函数sqrt)。【解】实现本题功能的程序如下:#includeiostream#includecmathusingnamespacestd;doublesroot(inti){returnsqrt(i);4}doublesroot(longl){returnsqrt(l);}doublesroot(doubled){returnsqrt(d);}intmain(){inti=12;longl=1234;doubled=12.34;couti的二次方根是:sroot(i)endl;coutl的二次方根是:sroot(l)endl;coutd的二次方根是:sroot(d)endl;return0;}【2.29】编写一个C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?【解】实现本题功能的程序如下:#includeiostreamusingnamespacestd;intmain(){inti,j,sum=0;;for(i=0;i=20;i++)for(j=0;j=50;j++)if(100-5*i-2*j=0){sum++;cout100-5*i-2*j\tj\tiendl;}coutsumissumendl;return0;}【2.30】编写一个C++风格的程序,输入两个整数,将它们按由小到大的顺序输出。要求使用变量的引用。【解】实现本题功能的程序如下:#includeiostreamusingnamespacestd;intmain(){voidchange(int&,int&);inta,b;cinab;if(ab)change(a,b);coutabendl;return0;5}voidchange(int&a1,int&b1){inttemp;temp=a1;a1=b1;b1=temp;}【2.31】编写C++风格的程序,用二分法求解f(x)=0的根。【解】实现本题功能的程序如下:#includeiostream#includecmathusingnamespacestd;inlinefloatf(floatx){return2*x*x*x-4*x*x+3*x-6;}intmain(){floatleft,right,middle,ym,yl,yr;coutpleasetwonumber:endl;//接收输入,确定第一组数据区域cinleftright;yl=f(left);yr=f(right);do{middle=(right+left)/2;ym=f(middle);if(yr*ym0){right=middle;yr=ym;}else{left=middle;yl=ym;}}while(fabs(ym)=1e-6);cout\nRootis:middle;return0;}第3章类和对象(一)【3.18】写出下面程序的运行结果。#includeiostreamusingnamespacestd;classtest{public:6test();~test(){};private:inti;};test::test(){i=25;for(intctr=0;ctr10;ctr++){coutCountingatctr\n;}}testanObject;intmain(){return0;}【3.19】写出下面程序的运行结果。#includeiostreamusingnamespacestd;classTest{private:intval;public:Test(){coutdefault.endl;}Test(intn){val=n;coutCon.endl;}Test(constTest&t){val=t.val;coutCopycon.endl;}};intmain(){Testt1(6);Testt2=t1;Testt3;t3=t1;return0;}【3.20】指出下列程序中的错误,并说明为什么。#includeiostreamusingnamespacestd;7classStudent{public:voidprintStu();private:charname[10];intage;floataver;};intmain(){Studentp1,p2,p3;p1.age=30;…return0;}【3.21】指出下列程序中的错误,并说明为什么。#includeiostreamusingnamespacestd;classStudent{intsno;intage;voidprintStu();voidsetSno(intd);};voidprintStu(){cout\nSnoissno,;coutageisage.endl;}voidsetSno(ints){sno=s;}voidsetAge(inta){age=a;}intmain(){Studentlin;lin.setSno(20021);lin.setAge(20);lin.printStu();}【3.22】指出下列程序中的错误,并说明为什么。#includeiostreamusingnamespacestd;classPoint{public:8intx,y;private:Point(){x=1;y=2;}};intmain(){Pointcpoint;cpoint.x=2;return0;}【3.23】下面是一个计算器类的定义,请完成该类成员函数的实现。classcounter{public:counter(intnumber);voidincrement();//给原值加1voiddecrement();//给原值减1intgetvalue();//取得计数器值intprint();//显示计数private:intvalue;};【解】classcounter{public:counter(intnumber);voidincrement();//给原值加1voiddecrement();//给原值减1intgetvalue();//取得计数器值intprint();//显示计数private:intvalue;};counter::counter(intnumber){value=number;}voidcounter::increment(){value++;}voidcounter::decrement(){value--;}intcounter::getvalue(){returnvalue;9}intcounter::print(){coutvalueisvalueendl;return0;}【3.24】根据注释语句的提示,实现类Date的成员函数。#includeiostreamusingnamespacestd;classDate{public:voidprintDate();//显示日期voidsetDay(intd);//设置日的值voidsetMonth(intm);//设置月的值voidsetYear(inty);//设置年的值private:intday,month,year;};intmain(){DatetestDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear(2003);test
本文标题:C++面向对象程序设计习题解答与上机指导(第二版)源程序
链接地址:https://www.777doc.com/doc-6336460 .html