c语言课后答案.docx_第1页
c语言课后答案.docx_第2页
c语言课后答案.docx_第3页
c语言课后答案.docx_第4页
c语言课后答案.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

第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】extern autoregister【题8.13】aab【题8.14】类,公有【题8.15】void init(int k, int t)couta.GetX()”,”a.GetY()【题8.16】10【题8.17】Sample(float a,char b):f(a),c(b) 【题8.18】定义对象【题8.19】tb【题8.20】类三、 程序理解题。请阅读下面的程序,写出程序的运行结果。【题8.21】1515【题8.22】Exiting mainDestructor is activeDestructor is active【题8.23】S1=1600,S2=2699【题8.24】one0=3one1=4two0=(3,5.5)two1=(7,8.8)【题8.25】5,88:5【题8.26】535【题8.27】Please Input the length and width:15 12The length is:15The width is:12The area is:180【题8.28】Hi.val=5This print val=5Hi.val=10Destructor for val=10Destructor for val=10Destructor for val=10Destructor for val=5Exiting main【题8.29】223332【题8.30】1 2 3 4四、 简答题。简要回答下列个问题。【题8.31】全局变量具有哪些优缺点?答:全局变量也称为外部变量,它是在函数外部定义的变量,它保存上一次被修改后的值,便于数据共享,但不方便管理,易引起意想不到的错误。【题8.32】类与对象有什么关系?答:类是一种用户自定义的数据类型,对象是使用自定义的类名在程序中说明的“变量”。或者说类是创建对象的样板;对象是类的实例。【题8.33】构造函数与普通函数相比在形式上有什么不同?(构造函数的作用,它的声明形式来分析)答:构造函数是类的一种特殊成员函数,一般情况下,它是专门用来初始化对象成员变量的。 构造函数的名字必须与类名相同,它不具有任何类型,不返回任何值。【题8.34】什么是常对象?答:常对象是指在任何场合都不能对其成员的值进行修改的对象。【题8.35】类中成员变量怎么进行初始化?答:可以通过构造函数的初始化列表或构造函数的函数体实现。【题8.36】将类的声明和实现分开有什么好处?答:1.起保护作用;2.提高编译的效率。五、 编程题。对下面的问题编写成程序并上机验证。【题8.37】编写一个名为Person的类,用字符串表示人的名字和住址,为 Person 提供一个接受两个string参数的构造函数,提供返回名字和住址的操作,这些函数应为const型吗?请解释为什么。指明 Person 的哪个成员应声明为 public,哪个成员应声明为 private。请解释为什么。程序如下:#include class Person private:const char * name;const char * address;public:Person (const char * n, const char * a)name = n;address = a;const char * GetName()return name;const char * GetAddress()return address;int main() Person tom(Tom,1st Avenue);cout tom.GetName() endl;cout tom.GetAddress() endl;return 0;执行结果:Tom1st Avenue【题8.38】设计一个立方体类Box,能计算并输出不同边长立方体的体积和表面积。要求Box类包含三个私有数据成员a(立方体边长)、volume(体积)和area(表面积),另有两个构造函数以及seta()(设置立方体边长)、getvolume()(计算体积)、getarea()(计算表面积)和display()(输出结果)。程序如下:class Box float a;float volume;float area;public:Box() Box(float r) a = r;void seta(float r) a = r;void getvolume() volume = a * a * a;void getarea() area = 6 * a * a;void disp() cout Volume volume ,area area endl;int main() Box obj1(4.5), obj2;obj2.seta(6.4);obj1.getvolume();obj1.getarea();cout ;obj1.disp();obj2.getvolume();obj2.getarea();cout ;obj2.disp();return 0;程序的运行结果如下: obj1=Volume91.125,area121.5obj2=Volume262.144,area245.76【题8.39】设计一个点类Point,再设计一个矩形类,矩形类使用Point类的两个坐标点作为矩形的对角顶点。并可以输出4个坐标值和面积。使用测试程序验证程序。程序如下:#include class Point /点类private:int x, y; /私有成员变量,坐标public:Point() /无参数的构造方法,对xy初始化x = 0;y = 0;Point(int a, int b) x = a;y = b;void setXY(int a, int b) x = a;y = b;int getX() /得到x的方法return x;int getY() /得到有的函数return y;class Rectangle /矩形类private:Point point1, point2, point3, point4;public:Rectangle(); /类Point的无参构造函数已经对每个对象做初始化啦,这里不用对每个点多初始化了Rectangle(Point one, Point two) point1 = one;point4 = two;init();Rectangle(int x1, int y1, int x2, int y2) point1.setXY(x1, y1);point4.setXY(x2, y2);init();void init() /给另外两个点做初始化的函数point2.setXY(point4.getX(), point1.getY();point3.setXY(point1.getX(), point4.getY();void printPoint() /打印四个点的函数cout A:( point1.getX() , point1.getY() ) endl;cout B:( point2.getX() , point2.getY() ) endl;cout C:( point3.getX() , point3.getY() ) endl;cout D:( point4.getX() , point4.getY() ) 0)return area;elsereturn -area;int main() Point p1(-15, 56), p2(89, -10); /定义两个点Rectangle r1(p1, p2); /用两个点做参数,声明一个矩形对象r1Rectangle r2(1, 5, 5, 1); /用两队左边,声明一个矩形对象r2cout 矩形r1的4个定点坐标: endl;r1.printPoint();cout 矩形r1的面积: r1.getArea() endl;cout n矩形r2的4个定点坐标: endl;r2.printPoint();cout 矩形r2的面积: r2.getArea() endl;return 0;【题8.40】使用内联函数设计一个类,用来表示直角坐标系中的任意一条直线并输出它的属性。程序如下:#include #include class Line private:int x1, y1, x2, y2;public:Line();Line(int = 0, int = 0, int = 0, int = 0);void printPoint();double getLength();inline Line:Line(int a, int b, int c, int d) x1 = a;y1 = b;x2 = c;y2 = d;inline void Line:printPoint() cout A: x1 , y1 endl;cout B: x2 , y2 endl;inline double Line:getLength() double length;length = sqrt(x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);return length;int main() Line line(10, 80, -10, 12);line.printPoint();cout line.getLength() endl;return 0;【题8.41】请编写时间类Time。其构造函数返回当前时间来初始化类Time的对象,并可通过Time类的成员函数将类Time对象的时间完成以下的操作:(1) 能够进入下一分中;(2) 能够进入下一小时;(3) 能够进入新的一天;(4) 以标准格式输出时间。编写程序进行测试。#include using namespace std;class MyTime private:int day, hour, minute;public:MyTime(int d, int h, int m) day = d % 365;hour = h % 24;minute = m % 60;void NextDay() day = (day + 1) % 365;void NextHour() hour = (hour + 1) % 24;if (hour = 0)NextDay();void NextMinute() minute = (minute + 1) % 60;if (minute = 0)NextHour();void PrintTime() cout Day day hour : minute endl;int main() MyTime t(2, 6, 24);t.PrintTime();t.NextMinute();t.PrintTime();t.NextHour();t.PrintTime();t.NextDay();t.PrintTime();return 0;程序运行结果:Day 2 6:24Day 2 6:25Day 2 7:25Day 3 7:25【题8.42】建立用于完成复数运算的类Complex。复数的实部和虚部作为该类的私有数据成员,用浮点数表示。要求构造函数对每一个复数对象的初值都赋值为0。其他共有成员函数能够完成如下的功能:(1) 设置复数对象的值;(2) 两个复数相加;(3) 两个复数相减;(4) 两个复数相乘;(5) 以(a+bi)的形式输出复数编写程序进行测试。程序如下:#include using namespace std;class MyComplex private:double real, imaginary;MyComplex(double r, double i)SetNumber(r,i);public:MyComplex()real = 0;imaginary = 0;void SetNumber(double r, double i)real = r;imaginary = i;static MyComplex Add(MyComplex c1, MyComplex c2)return MyComplex(c1.real + c2.real,c1.imaginary + c2.imaginary);static MyComplex Sub(MyComplex c1, MyComplex c2)return MyComplex(c1.real - c2.real,c1.imaginary - c2.imaginary);static MyComplex Mult(MyComplex c1, MyComplex c2)double n_real = c1.real * c2.real + c1.imaginary * c2.imaginary ;double n_imaginary = c1.imaginary * c2.real + c1.real * c2.imaginary ;return MyComplex(n_real, n_imaginary);void PrintNumber()cout real + imaginary i endl;int main() MyComplex c1,c2;c1.SetNumber(3,4);c2.SetNumber(5,6);MyComplex c3 = MyComplex:Add(c1,c2);c3.PrintNumber();MyComplex c4 = MyComplex:Sub(c1,c2);c4.PrintNumber();MyComplex c5 = MyComplex:Mult(c1,c2);c5.PrintNumber();return 0;程序运行结果:8+10i-2+-2i39+38i【题8.43】建立用于完成分数形式算术运算的类RationalNumber。分数的分子和分母作为该类的私有数据成员,用整型数表示,要求通过构造函数的参数带有默认值的方式为该类对象进行初始化,并且要求对所有分数都应以最简形式存储数据(如2/4在对象中存储的数据应该为分子为1、分母为2的形式),要求公有成员函数能够完成如下的功能:(1) 两个有理数相加,以最简形式保存计算结果;(2) 两个有理数相减,以最简形式保存计算结果;(3) 两个有理数相乘,以最简形式保存计算结果;(4) 两个有理数相除,以最简形式保存计算结果;(5) 以a/b的形式输出有理数;(6) 以浮点形式输出有理数。编写程序进行测试。程序如下:#include using namespace std;int gcd(int a, int b) int t;while (b != 0) t = b;b = a % b;a = t;return a;class Rational private:int numerator, denominator;public:Rational(double n = 0, double d = 1) SetNumber(n, d);void SetNumber(double n, double d) int c = gcd(n, d);numerator = n / c;denominator = d / c;static Rational Add(Rational c1, Rational c2) int a = c1.numerator;int b = c1.denominator;int c = c2.numerator;int d = c2.denominator;int num = a * d + c * b;int denom = b * d;return Rational(num, denom);static Rational Sub(Rational c1, Rational c2) int a = c1.numerator;int b = c1.denominator;int c = c2.numerator;int d = c2.denominator;int num = a * d - c * b;int denom = b * d;return Rational(num, denom);static Rational Mult(Rational c1, Rational c2) int a = c1.numerator;int b = c1.denominator;int c = c2.numerator;int d = c2.de

温馨提示

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

最新文档

评论

0/150

提交评论