用c++实现一个具有一定功能的计算器,能够进行整数、实数、复数的加、减、乘、除、乘方和求对数等运算。使用时算式采用后缀输入法,每个操作数、操作符之间都以空白符分隔。例如,若要计算"3+5"则输入"3 5 +"。乘方运算符用"^"表示。要求: (1)每次运算在前次结果基础上进行,若要将前次运算结果清除,可键入"c"。当键入"q"时程序结束;
时间: 2024-03-13 12:46:35 浏览: 54
基于C++的多项式方程计算,可实现加法、减法、乘法、代值、求导等
好的,下面是一个实现上述功能的 C++ 计算器示例代码:
```c++
#include <iostream>
#include <string>
#include <stack>
#include <cmath>
using namespace std;
// 判断是否为数字
bool isNumber(string str) {
for(int i = 0; i < str.length(); i++) {
if(!isdigit(str[i]) && str[i] != '.') {
return false;
}
}
return true;
}
// 将字符串转换为数字
double strToNum(string str) {
return stod(str);
}
// 计算后缀表达式
double calculatePostfixExpression(string exp) {
stack<double> s;
string numStr = "";
double num1, num2;
for(int i = 0; i < exp.length(); i++) {
if(exp[i] == ' ') {
if(isNumber(numStr)) {
s.push(strToNum(numStr));
numStr = "";
}
} else if(isdigit(exp[i]) || exp[i] == '.') {
numStr += exp[i];
} else if(exp[i] == '+') {
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
s.push(num1 + num2);
} else if(exp[i] == '-') {
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
s.push(num1 - num2);
} else if(exp[i] == '*') {
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
s.push(num1 * num2);
} else if(exp[i] == '/') {
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
if(num2 == 0) {
cout << "错误:除数不能为零。" << endl;
return 0;
} else {
s.push(num1 / num2);
}
} else if(exp[i] == '^') {
num2 = s.top();
s.pop();
num1 = s.top();
s.pop();
s.push(pow(num1, num2));
} else if(exp[i] == 'l') {
num1 = s.top();
s.pop();
s.push(log10(num1));
} else if(exp[i] == 'e') {
num1 = s.top();
s.pop();
s.push(exp(num1));
}
}
return s.top();
}
int main() {
string exp = "";
double result = 0;
while(true) {
cout << "请输入后缀表达式(输入 q 退出):";
getline(cin, exp);
if(exp == "c") {
result = 0;
cout << "计算结果已清除。" << endl;
} else if(exp == "q") {
break;
} else {
result = calculatePostfixExpression(exp);
cout << "计算结果为:" << result << endl;
}
}
return 0;
}
```
在这个示例代码中,我们使用了 `stack` 来实现后缀表达式的计算。首先定义了 `isNumber` 和 `strToNum` 两个函数,用于判断字符串是否为数字以及将字符串转换为数字。然后定义了 `calculatePostfixExpression` 函数,用于计算后缀表达式。在计算过程中,我们使用了一个 `numStr` 变量来临时存储数字字符串,使用 `stack` 存储数字,根据不同的操作符进行相应的计算。注意,在除法计算中,我们需要判断除数是否为零,以避免程序出错。在求对数和指数运算中,我们使用了 `log10` 和 `exp` 函数来进行计算。
在 `main` 函数中,我们使用 `getline` 从标准输入中获取后缀表达式,并根据用户输入的操作进行相应的处理,使用 `result` 变量存储计算结果。注意,在用户输入 "c" 时我们需要将 `result` 清零,以避免计算结果累加。当用户输入 "q" 时程序结束。
阅读全文