c语言课后答案 3.docx
- 文档编号:24885545
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:20
- 大小:19.99KB
c语言课后答案 3.docx
《c语言课后答案 3.docx》由会员分享,可在线阅读,更多相关《c语言课后答案 3.docx(20页珍藏版)》请在冰豆网上搜索。
c语言课后答案3
第8章类与数据抽象
(一)
一、选择题。
在以下每一题的四个选项中,请选择一个正确的答案。
【题8.1】D
【题8.2】C
【题8.3】C
【题8.4】A
【题8.5】B
【题8.6】B
【题8.7】D
【题8.8】A
【题8.9】A
【题8.10】D
二、填空题。
请在下面各题的空白处填入合适的内容。
【题8.11】标准接口接口
【题8.12】externautoregister
【题8.13】aab
【题8.14】类,公有
【题8.15】voidinit(intk,intt)cout< 【题8.16】10 【题8.17】Sample(floata,charb): f(a),c(b){} 【题8.18】定义对象 【题8.19】tb 【题8.20】类 三、程序理解题。 请阅读下面的程序,写出程序的运行结果。 【题8.21】 15 15 【题8.22】 Exitingmain Destructorisactive Destructorisactive 【题8.23】 S1=1600,S2=2699 【题8.24】 one[0]=3 one[1]=4 two[0]=(3,5.5) two[1]=(7,8.8) 【题8.25】 5,8 8: 5 【题8.26】 53 5 【题8.27】 PleaseInputthelengthandwidth: 1512 Thelengthis: 15 Thewidthis: 12 Theareais: 180 【题8.28】 Hi.val=5 Thisprintval=5 Hi.val=10 Destructorforval=10 Destructorforval=10 Destructorforval=10 Destructorforval=5 Exitingmain 【题8.29】 2 2 3 3 3 2 【题8.30】 1234 四、简答题。 简要回答下列个问题。 【题8.31】全局变量具有哪些优缺点? 答: 全局变量也称为外部变量,它是在函数外部定义的变量,它保存上一次被修改后的值,便于数据共享,但不方便管理,易引起意想不到的错误。 【题8.32】类与对象有什么关系? 答: 类是一种用户自定义的数据类型,对象是使用自定义的类名在程序中说明的“变量”。 或者说类是创建对象的样板;对象是类的实例。 【题8.33】构造函数与普通函数相比在形式上有什么不同? (构造函数的作用,它的声明形式来分析) 答: 构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。 构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。 【题8.34】什么是常对象? 答: 常对象是指在任何场合都不能对其成员的值进行修改的对象。 【题8.35】类中成员变量怎么进行初始化? 答: 可以通过构造函数的初始化列表或构造函数的函数体实现。 【题8.36】将类的声明和实现分开有什么好处? 答: 1.起保护作用;2.提高编译的效率。 五、编程题。 对下面的问题编写成程序并上机验证。 【题8.37】编写一个名为Person的类,用字符串表示人的名字和住址,为Person提供一个接受两个string参数的构造函数,提供返回名字和住址的操作,这些函数应为const型吗? 请解释为什么。 指明Person的哪个成员应声明为public,哪个成员应声明为private。 请解释为什么。 程序如下: #include classPerson{ private: constchar*name; constchar*address; public: Person(constchar*n,constchar*a){ name=n; address=a; } constchar*GetName(){ returnname; } constchar*GetAddress(){ returnaddress; } }; intmain(){ Persontom("Tom","1stAvenue"); cout< cout< return0; } 执行结果: Tom 1stAvenue 【题8.38】设计一个立方体类Box,能计算并输出不同边长立方体的体积和表面积。 要求Box类包含三个私有数据成员a(立方体边长)、volume(体积)和area(表面积),另有两个构造函数以及seta()(设置立方体边长)、getvolume()(计算体积)、getarea()(计算表面积)和display()(输出结果)。 程序如下: 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<<"Volume"< } }; intmain(){ Boxobj1(4.5),obj2; obj2.seta(6.4); obj1.getvolume(); obj1.getarea(); cout<<"obj1=>"; obj1.disp(); obj2.getvolume(); obj2.getarea(); cout<<"obj2=>"; obj2.disp(); return0; } 程序的运行结果如下: obj1=>Volume91.125,area121.5 obj2=>Volume262.144,area245.76 【题8.39】设计一个点类Point,再设计一个矩形类,矩形类使用Point类的两个坐标点作为矩形的对角顶点。 并可以输出4个坐标值和面积。 使用测试程序验证程序。 程序如下: #include classPoint//点类 { private: intx,y;//私有成员变量,坐标 public: Point()//无参数的构造方法,对xy初始化 { x=0; y=0; } Point(inta,intb){ x=a; y=b; } voidsetXY(inta,intb){ x=a; y=b; } intgetX()//得到x的方法 { returnx; } intgetY()//得到有的函数 { returny; } }; classRectangle//矩形类 { private: Pointpoint1,point2,point3,point4; public: Rectangle();//类Point的无参构造函数已经对每个对象做初始化啦,这里不用对每个点多初始化了 Rectangle(Pointone,Pointtwo){ point1=one; point4=two; init(); } Rectangle(intx1,inty1,intx2,inty2){ point1.setXY(x1,y1); point4.setXY(x2,y2); init(); } voidinit()//给另外两个点做初始化的函数 { point2.setXY(point4.getX(),point1.getY()); point3.setXY(point1.getX(),point4.getY()); } voidprintPoint()//打印四个点的函数 { cout<<"A: ("< cout<<"B: ("< cout<<"C: ("< cout<<"D: ("< } intgetArea()//计算面积的函数 { intheight,width,area; height=point1.getY()-point3.getY(); width=point1.getX()-point2.getX(); area=height*width; if(area>0) returnarea; else return-area; } }; intmain(){ Pointp1(-15,56),p2(89,-10);//定义两个点 Rectangler1(p1,p2);//用两个点做参数,声明一个矩形对象r1 Rectangler2(1,5,5,1);//用两队左边,声明一个矩形对象r2 cout<<"矩形r1的4个定点坐标: "< r1.printPoint(); cout<<"矩形r1的面积: "< cout<<"\n矩形r2的4个定点坐标: "< r2.printPoint(); cout<<"矩形r2的面积: "< return0; } 【题8.40】使用内联函数设计一个类,用来表示直角坐标系中的任意一条直线并输出它的属性。 程序如下: #include #include classLine{ private: intx1,y1,x2,y2; public: Line(); Line(int=0,int=0,int=0,int=0); voidprintPoint(); doublegetLength(); }; inlineLine: : Line(inta,intb,intc,intd){ x1=a; y1=b; x2=c; y2=d; } inlinevoidLine: : printPoint(){ cout<<"A: "< cout<<"B: "< } inlinedoubleLine: : getLength(){ doublelength; length=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); returnlength; } intmain(){ Lineline(10,80,-10,12); line.printPoint(); cout< return0; } 【题8.41】请编写时间类Time。 其构造函数返回当前时间来初始化类Time的对象,并可通过Time类的成员函数将类Time对象的时间完成以下的操作: (1)能够进入下一分中; (2)能够进入下一小时; (3)能够进入新的一天; (4)以标准格式输出时间。 编写程序进行测试。 #include usingnamespacestd; classMyTime{ private: intday,hour,minute; public: MyTime(intd,inth,intm){ day=d%365; hour=h%24; minute=m%60; } voidNextDay(){ day=(day+1)%365; } voidNextHour(){ hour=(hour+1)%24; if(hour==0) NextDay(); } voidNextMinute(){ minute=(minute+1)%60; if(minute==0) NextHour(); } voidPrintTime(){ cout<<"Day"< "< } }; intmain(){ MyTimet(2,6,24); t.PrintTime(); t.NextMinute(); t.PrintTime(); t.NextHour(); t.PrintTime(); t.NextDay(); t.PrintTime(); return0; } 程序运行结果: Day26: 24 Day26: 25 Day27: 25 Day37: 25 【题8.42】建立用于完成复数运算的类Complex。 复数的实部和虚部作为该类的私有数据成员,用浮点数表示。 要求构造函数对每一个复数对象的初值都赋值为0。 其他共有成员函数能够完成如下的功能: (1)设置复数对象的值; (2)两个复数相加; (3)两个复数相减; (4)两个复数相乘; (5)以(a+bi)的形式输出复数 编写程序进行测试。 程序如下: #include usingnamespacestd; classMyComplex{ private: doublereal,imaginary; MyComplex(doubler,doublei){ SetNumber(r,i); } public: MyComplex(){ real=0; imaginary=0; } voidSetNumber(doubler,doublei){ real=r; imaginary=i; } staticMyComplexAdd(MyComplexc1,MyComplexc2){ returnMyComplex(c1.real+c2.real,c1.imaginary+c2.imaginary); } staticMyComplexSub(MyComplexc1,MyComplexc2){ returnMyComplex(c1.real-c2.real,c1.imaginary-c2.imaginary); } staticMyComplexMult(MyComplexc1,MyComplexc2){ doublen_real=c1.real*c2.real+c1.imaginary*c2.imaginary; doublen_imaginary=c1.imaginary*c2.real+c1.real*c2.imaginary; returnMyComplex(n_real,n_imaginary); } voidPrintNumber(){ cout< } }; intmain(){ MyComplexc1,c2; c1.SetNumber(3,4); c2.SetNumber(5,6); MyComplexc3=MyComplex: : Add(c1,c2); c3.PrintNumber(); MyComplexc4=MyComplex: : Sub(c1,c2); c4.PrintNumber(); MyComplexc5=MyComplex: : Mult(c1,c2); c5.PrintNumber(); return0; } 程序运行结果: 8+10i -2+-2i 39+38i 【题8.43】建立用于完成分数形式算术运算的类RationalNumber。 分数的分子和分母作为该类的私有数据成员,用整型数表示,要求通过构造函数的参数带有默认值的方式为该类对象进行初始化,并且要求对所有分数都应以最简形式存储数据(如2/4在对象中存储的数据应该为分子为1、分母为2的形式),要求公有成员函数能够完成如下的功能: (1)两个有理数相加,以最简形式保存计算结果; (2)两个有理数相减,以最简形式保存计算结果; (3)两个有理数相乘,以最简形式保存计算结果; (4)两个有理数相除,以最简形式保存计算结果; (5)以a/b的形式输出有理数; (6)以浮点形式输出有理数。 编写程序进行测试。 程序如下: #include usingnamespacestd; intgcd(inta,intb){ intt; while(b! =0){ t=b; b=a%b; a=t; } returna; } classRational{ private: intnumerator,denominator; public: Rational(doublen=0,doubled=1){ SetNumber(n,d); } voidSetNumber(doublen,doubled){ intc=gcd(n,d); numerator=n/c; denominator=d/c; } staticRationalAdd(Rationalc1,Rationalc2){ inta=c1.numerator; intb=c1.denominator; intc=c2.numerator; intd=c2.denominator; intnum=a*d+c*b; intdenom=b*d; returnRational(num,denom); } staticRationalSub(Rationalc1,Rationalc2){ inta=c1.numerator; intb=c1.denominator; intc=c2.numerator; intd=c2.denominator; intnum=a*d-c*b; intdenom=b*d; returnRational(num,denom); } staticRationalMult(Rationalc1,Rationalc2){ inta=c1.numerator; intb=c1.denominator; intc=c2.numerator; intd=c2.denominator; intnum=a*c; intdenom=b*d; returnRational(num,denom); } staticRationalDiv(Rationalc1,Rationalc2){ inta=c1.numerator; intb=c1.denominator; intc=c2.numerator; intd=c2.denominator; intnum=a*d; intdenom=b*c; returnRational(num,denom); } voidPrintNumber(){ cout< } voidPrintDouble(){ cout< } }; intmain(){ Rationalc1,c2; c1.SetNumber(3,4); c2.SetNumber(5,6); Rationalc3=Rational: : Add(c1,c2); c3.PrintNumber(); c3.PrintDouble(); Rationalc4=Rational: : Sub(c1,c2); c4.PrintNumber(); c4.PrintDouble(); Rationalc5=Rational: : Mult(c1,c2); c5.PrintNumber(); c5.PrintDouble(); Rationalc6=Rational: : Div(c1,c2); c6.PrintNumber(); c6.PrintDouble(); return0; } 程序运行结果: 19/12 1.58333 1/-12 -0.0833333 5/8 0.625 9/10 0.9
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c语言课后答案 语言 课后 答案