软件
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');
        }
    }
}
这里空空如也












有帮助,赞一个