软件
2025-10-14 16:59:47
发布于:浙江
#include <iostream>
#include <vector>
#include <sstream>
#include <stdexcept>
#include <limits>
#include <cmath>
using namespace std;
class Calculator {
public:
static double calculate(const string& expr) {
istringstream iss(expr);
double num, result;
char op;
if (!(iss >> result)) {
throw invalid_argument("错误:无效表达式");
}
while (iss >> op >> num) {
switch(op) {
case '+': result += num; break;
case '-': result -= num; break;
case '*': result *= num; break;
case '/':
if(num == 0) throw runtime_error("错误:除数不能为零");
result /= num;
break;
case '^': result = pow(result, num); break;
default: throw invalid_argument("错误:无效运算符");
}
}
return result;
}
static void batchCalculate() {
vector<string> expressions;
string input;
cout << "批量计算模式(空行结束输入)\n";
cin.ignore(numeric_limits<streamsize>::max(), '\n');
while (getline(cin, input) && !input.empty()) {
expressions.push_back(input);
}
cout << "\n计算结果:\n";
for (const auto& expr : expressions) {
try {
cout << expr << " = " << calculate(expr) << endl;
} catch (const exception& e) {
cout << expr << " → " << e.what() << endl;
}
}
}
static void interactiveMode() {
string expr;
cout << "交互式计算模式(输入q退出)\n";
cin.ignore(numeric_limits<streamsize>::max(), '\n');
while (true) {
cout << "> ";
getline(cin, expr);
if (expr == "q") break;
try {
cout << "= " << calculate(expr) << endl;
} catch (const exception& e) {
cout << e.what() << endl;
}
}
}
};
void showMenu() {
cout << "\n===== 科学计算器 =====\n";
cout << "1. 单行交互式计算\n";
cout << "2. 批量计算模式\n";
cout << "3. 退出程序\n";
cout << "请选择: ";
}
int main() {
while (true) {
showMenu();
int choice;
cin >> choice;
switch(choice) {
case 1:
Calculator::interactiveMode();
break;
case 2:
Calculator::batchCalculate();
break;
case 3:
return 0;
default:
cout << "无效选项,请重新输入\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
}
这里空空如也














有帮助,赞一个