C++ primer Plus(第六版)第十一章 使用类 章节编程练习答案

1.修改程序清单11.15, 使之将一系列连续的随机漫步者位置写入文件中。对于每个位置,用步号进行标示。
   另外,让该程序将初始条件(目标距离和步长)以结果小结写入到该文件中。该文件的内容与下面类似:

   Target Distance: 100, Step Size: 20
    0: (x,y) = (0, 0)
    1: (x,y) = (-11.4715, 16.383)
    2: (x,y) = (-8.68807, -3.42232)
    ...
    26: (x,y) = (42.2919, -78.2594)
    27: (x,y) = (58.6749, -89.7309)
    After 27 steps, the subject has the following location:
    (x,y) = (58.6749, -89.7309)
    or
    (m,a) = (107.212, -56.8194)
    Average outward distance per step = 3.97081

书中随机漫步程序如下:

程序清单11.15修改后如下:

2.对Vector类的头文件(程序清单11.13) 和实现文件(程序清单11.14 进行修改),
使其不再存储矢量的长度和角度,而是在magval()和angval()被调用时计算它们
应保留公有接口不变(公有方法及参数不变),但对私有部分(包括一些私有方法)和方法实现进行修改。
然后,使用程序清单11.15 对修改后的版本进行测试,结果应该与以前相同,因为Vector类的公有接口与原来相同。

程序清单11.13修改后如下:

3.修改程序清单11.15 ,使之报告N次测试中最高、最低和平均步数(其中N是用户输入的整数),而不是报告每次的结果

前两个文件同题1

程序清单11.15修改后如下:

4.重新编写最后的Time类示例(程序清单11.10、 程序清单11.11 和程序清单11.12), 使友元函数来实现所有的重载运算符

程序清单11.10、 程序清单11.11 和程序清单11.12原程序:

修改后:

5.  重新编写Stonewt类(程序清单11.16 和程序清单11.17 ),使它有一个状态成员,
   由该成员控制对象应转换为英石格式、整数磅格式(翻译的不合适,应该是磅数格式)还是浮点磅格式(多少stone, 多少pounds)。
   重载<<运算符,使它来替换show_stn()和show_lbs()方法。
   重载加法、减法和乘法运算符,以便可以对Stonewt进行加、减、乘运算。
   编写一个使用所有类方法和友元的小程序,来测试这个类。

程序清单11.16 和程序清单11.17原程序:

修改后:

6. 重新编写Stonewt类(程序清单11.16 和程序清单11.17 ),重载全部6个关系运算符。
   运算符对pounds成员进行比较,并返回一个bool值。
   编写一个程序,它声明一个包含6个Stonewt对象的数组,并在数组声明中初始化前3个对象。
   然后使用循环来读取用于设置剩余3个数组元素的值。
   接着报告最小的元素、最大的元素以及大于等于11英石的元素的数量
   (最简单的方法是创建一个Stonewt对象,并将其初始化为11英石,然后将其同其他对象进行比较)。

修改后:

7.复数由两个部分组成:实数部分和虚数部分。复数的一种书写方式是:(3.0, 4.0),其中,3.0 是实数部分。4.0 是虚数部分。
   假设a=(A,Bi),c=(C,Di),则下面是一些复数运算
   ·加法: a+c=(A+C,(B+D)i)
   ·减法: a-c=(A+C,(B+D)i)
   ·乘法: a*c=(A*C-B*D,(A*D+B*C)i)
   ·数乘: x*c=(x*C,x*Di)
   ·共轭: ~a=(A,-Bi)
   请定义一个复数类,以便下面的程序可以使用它来获得正确的结果。

   #include <iostream>
    using namespace std;
    #include "complex0.h"  // to avoid confusion with complex.h
    int main()
    {
        complex a(3.0, 4.0);     // initialize to (3,4i)
        complex c;
        cout << "Enter a complex number (q to quit):\n";
        while (cin >> c)
        {
            cout << "c is " << c << '\n';
            cout << "complex conjugate is " << ~c << '\n'; 
            cout << "a is " << a << '\n';
            cout << "a + c is " << a + c << '\n';
            cout << "a - c is " << a - c << '\n'; 
            cout << "a * c is " << a * c << '\n'; 
            cout << "2 * c is " << 2 * c << '\n';
            cout << "Enter a complex number (q to quit):\n"; 
        }
        cout << "Done!\n";
        return 0;
    }
    注意,必须重载运算符<<和>>。标准C++头文件complex提供了比这个示例更广泛的复数支持,
    因此应将自定义的头文件命名为complex0.h,以免发生冲突。应尽可能使用const。
    下面是该程序的运行情况。
    Enter a complex number (q to quit):
    real: 10
    imaginary: 12
    c is (10,12i)
    complex conjugate is (10,-12i)
    a is (3,4i)
    a + c is (13,16i)
    a - c is (-7,-8i)
    a * c is (-18,76i)
    2 * c is (20,24i)
    Enter a complex number (q to quit):
    real: q
    Done!
    请注意,经过重载后,cin>>c将提示用户输入实数部分和虚数部分。

完成如下:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值