C++面向对象程序设计习题解答与上机指导(第二版)源程序_第1页
C++面向对象程序设计习题解答与上机指导(第二版)源程序_第2页
C++面向对象程序设计习题解答与上机指导(第二版)源程序_第3页
C++面向对象程序设计习题解答与上机指导(第二版)源程序_第4页
C++面向对象程序设计习题解答与上机指导(第二版)源程序_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+面向对象程序设计习题解答与上机指导(第2版)习题参考答案源代码使用源程序的几点注意事项由于源程序在复制、编辑、解压缩等过程中可能引起部分符号(主要是标点符号,如分号、冒号、逗号、引号)的字体、半全角等发生变化,在编译时可能被检出语法错误,只要使用“替换”功能,纠正后即能顺利运行。有的C+系统(如VisualC+6.0)没有完全实现C+标准,它所提供的不带后缀的.h的头文件不支持友元运算符重载函数,在VisualC+6.0中编译会出错,这时可采用带后缀的.h头文件。将程序中的#includeusingnamespacestd;修改成#include即可顺利运行。第2章C+基础【2.2】下面是

2、一个C程序,改写它,使它采用C+风格的I/O语句。#includeintmain()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(Nocommondenominatorsn);return0;printf(Thelowestcommondenominatoris%dn,d);return0;【解】#includeusingnamespacestd;intmain()inta,b,d,min;co

3、uta;cinb;min=ab?b:a;for(d=2;dmin;d+)if(a%d)=0)&(b%d)=0)break;if(d=min)coutNocommondenominatorsn;return0;coutThelowestcommondenominatorisendld;return0;【2.24】写出下列程序的运行结果。#includeusingnamespacestd;inti=15;intmain()inti;i=100;:i=i+1;cout:iendl;return0;运行结果:101Pleaseanykeytocontinue。【2.25】写出下列程序的运行结果。#in

4、cludeusingnamespacestd;voidf(int&m,intn)inttemp;temp=m;m=n;n=temp;intmain()inta=5,b=10;f(a,b);coutabendl;return0;结果:1010Pleaseanykeytocontinue。【2.26】分析下面程序的输出结果。#includeusingnamespacestd;int&f(int&i)i+=10;returni;intmain()intk=0;int&m=f(k);coutkendl;m=20;coutkendl;return0;运行结果:1020Pleaseanykeytocont

5、inue。【2.27】编写一个C+风格的程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。【解】实现本题功能的程序如下:#includeusingnamespacestd;intmain()int*p=newint20;/动态分配20个整型内存空间*p=1;*(p+1)=1;/对前面2个内存空间赋值1cout*pt*(p+1)t;P=p+2;/p指向第3个内存空间for(inti=3;i=20;i+)*p=*(p-1)+*(p-2);cout*pt;if(i%5=0)coutendl;p+;/p指向下一个内存空间;return0;【2.28】编写一个C+风

6、格的程序,建立一个被称为sroot的函数,返回其参数的二次方根。重载函数sroot三次,让它返回整数、长整数与双精度数的二次方根(计算二次方根时,可以使用标准库函数sqrt)。【解】实现本题功能的程序如下:#include#includeusingnamespacestd;doublesroot(inti)returnsqrt(i);doublesroot(longl)returnsqrt(l);doublesroot(doubled)returnsqrt(d);intmain()inti=12;longl=1234;doubled=12.34;sroot(i)endl;sroot(i)end

7、l;sroot(l)endl;sroot(d)endl;coutl的二次方根是coutd的二次方根是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*jtjtiendl;coutsumissumendl;return0;【2.30】编写一个C+风格的程序

8、,输入两个整数,将它们按由小到大的顺序输出。要求使用变量的引用。【解】实现本题功能的程序如下:#includeiostreamusingnamespacestd;intmain()voidchange(int&,int&);inta,b;cinab;if(ab)change(a,b);coutabendl;return0;voidchange(int&a1,int&b1)inttemp;temp=a1;a1=b1;b1=temp;【2.31】编写C+风格的程序,用二分法求解f(x)=O的根。【解】实现本题功能的程序如下:#include#includeusingnamespacestd;inl

9、inefloatf(floatx)return2*x*x*x-4*x*x+3*x-6;intmain()floatleft,right,middle,ym,yl,yr;coutpleasetwonumber:leftright;yl=f(left);yr=f(right);domiddle=(right+left)/2;ym=f(middle);if(yr*ym0)right=middle;yr=ym;elseleft=middle;yl=ym;while(fabs(ym)=1e-6);coutnRootis:middle;return0;第3章类和对象(一)【3.18】写出下面程序的运行结果

10、。#includeusingnamespacestd;classtestpublic:test();test();private:inti;test:test()i=25;for(intctr=0;ctr10;ctr+)coutCountingatctrn;testanObject;intmain()return0;【3.19】写出下面程序的运行结果。#includeusingnamespacestd;classTestprivate:intval;public:Test()coutdefault.endl;Test(intn)val=n;coutCon.endl;Test(constTest

11、&t)val=t.val;coutCopycon.endl;intmain()Testt1(6);Testt2=t1;Testt3;t3=t1;return0;【3.20】指出下列程序中的错误,并说明为什么#includeusingnamespacestd;classStudentpublic:voidprintStu();private:charname10;intage;floataver;intmain()Studentp1,p2,p3;p1.age=30;return0;【3.21】指出下列程序中的错误,并说明为什么#includeusingnamespacestd;classStud

12、entintsno;intage;voidprintStu();voidsetSno(intd);voidprintStu()coutnSnoissno,;coutageisage.endl;voidsetSno(ints)sno=s;voidsetAge(inta)age=a;intmain()Studentlin;lin.setSno(20021);lin.setAge(20);lin.printStu();【3.22】指出下列程序中的错误,并说明为什么#includeusingnamespacestd;classPointpublic:intx,y;private:Point()x=1;

13、y=2;intmain()Pointcpoint;cpoint.x=2;return0;【3.23】下面是一个计算器类的定义,请完成该类成员函数的实现classcounterpublic:counter(intnumber);voidincrement();voiddecrement();intgetvalue();intprint();private:/给原值加1/给原值减1/取得计数器值/显示计数intvalue;【解】classcounterpublic:counter(intnumber);voidincrement();voiddecrement();intgetvalue();in

14、tprint();private:/给原值加1/给原值减1/取得计数器值/显示计数intvalue;counter:counter(intnumber)value=number;voidcounter:increment()value+;voidcounter:decrement()value-;intcounter:getvalue()returnvalue;intcounter:print()coutvalueisvalueendl;return0;【3.24】根据注释语句的提示,实现类Date的成员函数。#includeusingnamespacestd;classDatepublic:

15、voidprintDate();/显示日期voidsetDay(intd);/设置日的值voidsetMonth(intm);/设置月的值voidsetYear(inty);/设置年的值private:intday,month,year;intmain()DatetestDay;testDay.setDay(5);testDay.setMonth(10);testDay.setYear(2003);testDay.printDate();return0;【解】voidDate:printDate()coutnDateisday.;coutmonth.yearendl;voidDate:setD

16、ay(intd)day=d;voidDate:setMonth(intm)month=m;voidDate:setYear(inty)year=y;【3.25】建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol,用来显示每个cylinder对象的体积。【解】实现本题功能的程序如下:#includeusingnamespacestd;classcylinderpublic:cylinder(doublea,doubleb);vo

17、idvol();private:doubler,h;doublevolume;cylinder:cylinder(doublea,doubleb)r=a;h=b;volume=3.141592*r*r*h;voidcylinder:vol()coutvolumeis:volumen;intmain()cylinderx(2.2,8.09);x.vol();return0;【3.26】构建一个类Stock,含字符数组stockcode及整型数据成员quan、双精度型数据成员price。构造函数含3个参数:字符数组na及q、p。当定义Stock的类对象时,将对象的第1个字符串参数赋给数据成员sto

18、ckcode,第2和第3个参数分别赋给quan、price。未设置第2和第3个参数时,quan的值为1000,price的值为&98。成员函数print没有形参,需使用this指针,显示对象数据成员的内容。假设类Stoc第1个对象的三个参数分别为:600001,3000和5.67,第2个对象的第1个数据成员的值是600001,第2和3数据成员的值取默认值。要求编写程序分别显示这两个对象数据成员的值。【解】实现本题功能的程序如下:#includeusingnamespacestd;constintSIZE=80;classStockpublic:Stock()strcpy(stockcode,)

19、;Stock(charcode,intq=1000,doublep=8.98)strcpy(stockcode,code);quan=q;price=p;voidprint(void)coutstockcode;coutquanpriceendl;private:charstockcodeSIZE;intquan;doubleprice;intmain()Stockst1(600001,3000,5.67);st1.print();Stockst2(600002);st2.print();return0;第4章类和对象(二)【4.12】以下程序的运行结果是()。#includeusingnam

20、espacestd;classBpublic:B()B(inti,intj)x=i;y=j;voidprintb()coutx,yendl;private:intx,y;classApublic:A()A(intI,intj);voidprinta();private:Bc;A:A(inti,intj):c(i,j)voidA:printa()c.printb();intmain()Aa(7,8);printa();return0;A)8,9B)7,8C)5,6D)9,10【4.13】以下程序的运行结果是()。#includeusingnamespacestd;classApublic:voidset(inti,intj)x=i;y=j;intget_y()returny;private:intx,y;classboxpublic:voidset(intl,intw,ints,intp)length=l;width=w;label.set(s,p);intget_area()returnlength*width;private:intlength,width;Alabel;intmain()boxb;set(4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论