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将提示用户输入实数部分和虚数部分。
完成如下: