用c++,编写一个程序,建立一个sroot()的函数,返回其参数的二次方根。要求使用重载函数,重载3次,让其返回整数、长整数与双精度数的二次方根
时间: 2024-05-07 11:19:56 浏览: 123
以下是一个可能的实现:
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int sroot(int x) {
return sqrt(x);
}
long sroot(long x) {
return sqrt(x);
}
double sroot(double x) {
return sqrt(x);
}
int main() {
int a = 16;
long b = 1000000000000;
double c = 2.5;
cout << sroot(a) << endl; // 输出 4
cout << sroot(b) << endl; // 输出 1000000
cout << sroot(c) << endl; // 输出 1.58114
return 0;
}
```
在这个实现中,我们定义了三个重载函数,分别接受 `int`、`long` 和 `double` 类型的参数,并返回其二次方根。这三个函数的实现都使用了 `cmath` 头文件中的 `sqrt` 函数。
在 `main` 函数中,我们分别测试了三种类型的参数。可以看到,对于整数类型的参数,我们得到了整数类型的结果;对于长整数类型的参数,我们得到了长整数类型的结果;对于双精度类型的参数,我们得到了双精度类型的结果。这正是函数重载的作用所在:我们可以根据不同的参数类型,选择不同的函数实现,从而得到最合适的结果。
相关问题
编写一个c++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。重载sroot()函数3次,让它返回键盘输入的整数、长整数与双精度数的二次方根(计算二次方根,可使用标准库函数sqr
编写一个C++风格的程序,建立一个名为sroot()的函数,返回其参数的二次方根。重载sroot()函数3次,让它返回键盘输入的整数、长整数与双精度数的二次方根(计算二次方根,可使用标准库函数sqrt())。以下是示例代码:
#include <iostream>
#include <cmath>
using namespace std;
int sroot(int x) {
return sqrt(x);
}
long sroot(long x) {
return sqrt(x);
}
double sroot(double x) {
return sqrt(x);
}
int main() {
int a;
long b;
double c;
cout << "请输入一个整数:";
cin >> a;
cout << "该整数的二次方根为:" << sroot(a) << endl;
cout << "请输入一个长整数:";
cin >> b;
cout << "该长整数的二次方根为:" << sroot(b) << endl;
cout << "请输入一个双精度数:";
cin >> c;
cout << "该双精度数的二次方根为:" << sroot(c) << endl;
return 0;
}
编写一个C++风格的程序,建立一个被称为sroot()的函数,返回其参数的二次方根。重载函数sroot()3次,让它返回整数、长整数与双精度数的二次方根(计算二次方根时,可以使用标准库函数sqrt())
在C++中,你可以通过模板和重载(overload)函数来实现这个需求,这里是一个简单的例子:
```cpp
#include <cmath> // 引入包含平方根函数的头文件
// 定义一个通用模板函数,用于获取任意类型数值的平方根
template <typename T>
T sroot(T num) {
if constexpr (std::is_integral<T>::value) { // 判断是否为整型
return static_cast<T>(std::sqrt(static_cast<double>(num))); // 避免直接对整数开平方可能导致的整数溢出
} else if constexpr (std::is_floating_point<T>::value) { // 判断是否为浮点型
return std::sqrt(num); // 直接使用sqrt函数,因为浮点数不会有溢出问题
} else {
throw std::invalid_argument("Unsupported data type for square root"); // 对于非数值类型抛出异常
}
}
// 重载函数,分别处理整数、长整数和双精度数的情况
int sroot(int num) {
return static_cast<int>(std::sqrt(num));
}
long long sroot(long long num) {
return static_cast<long long>(std::sqrt(num));
}
double sroot(double num) {
return std::sqrt(num);
}
int main() {
int i = 9;
long long l = 1000000000000LL;
double d = 4.0;
std::cout << "Square root of " << i << ": " << sroot(i) << "\n";
std::cout << "Square root of " << l << ": " << sroot(l) << "\n";
std::cout << "Square root of " << d << ": " << sroot(d) << "\n";
return 0;
}
```
在这个例子中,`sroot`函数首先检查传入类型的特性,然后选择合适的计算方式。在`main`函数中展示了如何调用这些重载版本。
阅读全文