请设计算法,用c++编写完整代码实现 pow(x,n),说明: -100.0 < x < 100.0 , n 是 32 位有符号整数,其数值范围是 [−231, 231 − 1] 。即计算 x 的整数 n 次幂函数,要求在输入一个实数 x 和一个整数 n 后,能够计算出值,并进行最终输出,并进行面向对象编程,列出各项本设计要达到的具体的目标,同时给出编写的类及其成员说明;使用流程图、伪代码或文字,说明核心成员函数的运行原理或流程。
时间: 2023-06-25 10:01:56 浏览: 64
目标:
1. 设计一个面向对象的类,实现计算 x 的整数 n 次幂函数;
2. 能够处理输入 x 和 n 的异常情况;
3. 能够输出计算结果。
类及其成员说明:
类名:PowerCalculator
成员变量:
- double x: 实数 x;
- int n: 整数 n。
成员函数:
1. PowerCalculator(double x_, int n_): 构造函数,初始化 x 和 n;
2. double calculate(): 计算 x 的 n 次幂函数,返回计算结果;
3. void setX(double x_): 设置 x 的值;
4. void setN(int n_): 设置 n 的值;
5. double getX() const: 获取 x 的值;
6. int getN() const: 获取 n 的值。
流程图:
```
start -> input x and n -> create PowerCalculator object -> calculate power -> output result -> end
```
伪代码:
```
class PowerCalculator {
private:
double x;
int n;
public:
PowerCalculator(double x_, int n_) {
// initialize x and n
}
double calculate() {
if (n == 0) {
return 1;
}
if (n == 1) {
return x;
}
double half = calculate();
if (n % 2 == 0) {
return half * half;
} else if (n > 0) {
return half * half * x;
} else {
return half * half / x;
}
}
void setX(double x_) {
// set x
}
void setN(int n_) {
// set n
}
double getX() const {
// get x
}
int getN() const {
// get n
}
};
int main() {
// input x and n
PowerCalculator pc(x, n);
// calculate power
double result = pc.calculate();
// output result
std::cout << result << std::endl;
return 0;
}
```
核心成员函数的运行原理或流程:
1. calculate() 函数采用递归算法,将 n 的幂计算转化为计算 n/2 的幂;
2. 如果 n 为偶数,则计算 n/2 的幂然后平方即可;
3. 如果 n 为奇数,则计算 n/2 的幂然后平方再乘上 x 即可;
4. 如果 n 小于 0,则将 x 换成 1/x,将 n 变为相反数再递归计算;
5. 如果 n 等于 0,则返回 1;
6. 如果 n 等于 1,则返回 x。