如果要求上述程序也能够输入实数,浮点数,并比较,需要怎样改变
时间: 2024-09-14 22:06:17 浏览: 37
库卡机器人浮点数转换.docx
如果你想让程序支持比较实数(浮点数),你需要对类`MinMax`和`getMinMax`函数进行一些修改。首先,将数据成员和比较运算符改为`double`类型,然后使用`std::numeric_limits<double>::epsilon()`来处理浮点数比较的精度问题。以下是修改后的代码:
```cpp
#include <iostream>
#include <limits>
// 改进后的 MinMax 类,支持浮点数
class MinMax {
public:
MinMax(double a, double b, double c) : num1(a), num2(b), num3(c) {}
void findMinMax() {
double epsilon = std::numeric_limits<double>::epsilon();
if (std::abs(num1 - num2) <= epsilon) { // 如果两个接近,取较大的为较小的一个
if (num1 > num3)
num1 = num3;
else
num2 = num3;
}
if (std::abs(num2 - num3) <= epsilon) {
if (num2 > num1)
num2 = num1;
else
num3 = num1;
}
if (std::abs(num1 - num3) <= epsilon) { // 如果三个接近,取中间的那个
if (num1 > num2)
num3 = num2;
else
num3 = num1;
}
std::cout << "最大值: " << num1 << ", 最小值: " << num3 << std::endl;
}
private:
double num1, num2, num3;
};
// 改进后的 getMinMax 函数,处理浮点数
std::pair<double, double> getMinMax(double a, double b, double c) {
double epsilon = std::numeric_limits<double>::epsilon();
double max = (a > b + epsilon) ? ((a > c + epsilon) ? a : c) : ((b > c + epsilon) ? b : c);
double min = (a < b - epsilon) ? ((a < c - epsilon) ? a : c) : ((b < c - epsilon) ? b : c);
return std::make_pair(max, min);
}
int main() {
// 接收浮点数输入
double input1, input2, input3;
std::cout << "请输入三个数字: ";
std::cin >> input1 >> input2 >> input3;
// 用改进后的函数或类处理浮点数
std::pair<double, double> result = getMinMax(input1, input2, input3);
std::cout << "最大值: " << result.first << ", 最小值: " << result.second << std::endl;
MinMax mm(input1, input2, input3);
mm.findMinMax();
return 0;
}
```
现在程序可以比较和打印浮点数的最大值和最小值了。
阅读全文