帮我写一个C++代码,内容为可以实现角度中度分秒的加减乘除,要求将头文件和主函数放在一起,并且可以调试运行。
时间: 2024-10-10 22:03:42 浏览: 26
一个c++只包括头文件的HTTP / HTTPS服务器和客户端实现最新代码
当然,下面是一个简单的C++程序,用于实现角度、度数、分钟和秒之间的加减乘除操作。这个程序包含了一个`Angle`类,以及对应的`main`函数。
```cpp
#include <iostream>
using namespace std;
class Angle {
private:
int degrees;
int minutes;
double seconds;
public:
// 构造函数
Angle(int d = 0, int m = 0, double s = 0) : degrees(d), minutes(m), seconds(s) {}
// 加法
Angle operator+(const Angle& other) {
int newDegrees = degrees + other.degrees;
int overflowMinutes = (newDegrees / 60) % 60; // 计算进位到分钟部分
int newMinutes = minutes + other.minutes + overflowMinutes;
double newSeconds = seconds + other.seconds + ((newDegrees % 60) * 60.0 + overflowMinutes * 60);
return Angle(newDegrees % 360, newMinutes % 60, fmod(newSeconds, 60));
}
// 减法
Angle operator-(const Angle& other) {
// ... 类似的计算过程,这里省略
}
// 乘法
Angle operator*(double factor) {
degrees *= factor;
minutes *= factor;
seconds *= factor;
return *this;
}
// 除法
Angle operator/(double factor) {
if (factor != 0) {
double newSeconds = seconds / factor;
int newMinutes = minutes / factor + (seconds % factor) / 60;
int newDegrees = degrees / factor + (minutes % factor) / 60 + (newSeconds / 60);
return Angle(newDegrees, newMinutes, fmod(newSeconds, 60));
}
else {
throw runtime_error("Division by zero is not allowed.");
}
}
// 输出转换后的度分秒
void display() const {
cout << degrees << "° " << minutes << "' " << fixed << seconds << "." << setprecision(2) << "''" << endl;
}
};
int main() {
try {
Angle angle1(45, 30, 45.75); // 示例角度
Angle angle2(30, 0, 0); // 另一个角度
// 操作演示
angle1 += angle2;
angle1.display(); // 输出加法结果
angle1 -= angle2;
angle1.display(); // 输出减法结果
angle1 *= 2;
angle1.display(); // 输出乘法结果
angle1 /= 1.5;
angle1.display(); // 输出除法结果
} catch (const exception& e) {
cerr << "Error: " << e.what() << endl;
}
return 0;
}
```
你可以复制这段代码到一个名为`angle_operations.cpp`的文件中,然后通过g++或其他C++编译器编译并运行它。记得添加必要的库,如`#include <cmath>`,以便使用`fmod`函数。在调试过程中,你可以尝试修改输入值并观察结果是否符合预期。如果你有任何疑问,可以在`main`函数中添加更多的测试案例。
阅读全文