C++实现多功能计算器

开发 前端
本文旨在介绍如何使用C++编写一个功能更加丰富的计算器程序,该程序不仅能够执行基本的数学运算,还能处理更复杂的表达式,并提供用户友好的交互界面。

在现代编程实践中,C++以其高效性、可扩展性和面向对象的特性被广泛应用。本文旨在介绍如何使用C++编写一个功能更加丰富的计算器程序,该程序不仅能够执行基本的数学运算,还能处理更复杂的表达式,并提供用户友好的交互界面。

一、功能设计

多功能计算器将包含以下特性:

  • 支持加、减、乘、除四则运算。
  • 支持括号,以处理运算优先级。
  • 提供用户输入验证,确保输入的表达式合法。
  • 支持连续运算,即用户可以在一次输入中完成多个运算。
  • 显示运算结果和可能的错误信息。

二、代码实现

为了实现上述功能,我们需要编写一个能够解析和计算数学表达式的程序。下面是一个简化版的C++多功能计算器程序:

#include <iostream>  
#include <stack>  
#include <cctype>  
#include <sstream>  
  
using namespace std;  
  
double compute(double a, double b, char op) {  
    switch (op) {  
        case '+': return a + b;  
        case '-': return a - b;  
        case '*': return a * b;  
        case '/': return (b != 0) ? a / b : throw invalid_argument("除数不能为0");  
        default: throw invalid_argument("无效的运算符");  
    }  
}  
  
double evaluateExpression(string s) {  
    stack<double> values;  
    stack<char> ops;  
  
    for (size_t i = 0; i < s.size(); ++i) {  
        if (isdigit(s[i])) {  
            size_t j = i;  
            while (j < s.size() && (isdigit(s[j]) || s[j] == '.')) j++;  
            double value = stod(s.substr(i, j - i));  
            values.push(value);  
            i = j - 1;  
        } else if (s[i] == ' ') {  
            continue;  
        } else if (s[i] == '(') {  
            ops.push(s[i]);  
        } else if (s[i] == ')') {  
            while (!ops.empty() && ops.top() != '(') {  
                double val2 = values.top(); values.pop();  
                double val1 = values.top(); values.pop();  
                char op = ops.top(); ops.pop();  
                values.push(compute(val1, val2, op));  
            }  
            if (!ops.empty()) ops.pop(); // 弹出'('  
        } else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {  
            while (!ops.empty() &&  
                   (s[i] == '+' || s[i] == '-' ||  
                   (s[i] == '*' || s[i] == '/') && (ops.top() == '*' || ops.top() == '/'))) {  
                double val2 = values.top(); values.pop();  
                double val1 = values.top(); values.pop();  
                char op = ops.top(); ops.pop();  
                values.push(compute(val1, val2, op));  
            }  
            ops.push(s[i]);  
        }  
    }  
  
    while (!ops.empty()) {  
        double val2 = values.top(); values.pop();  
        double val1 = values.top(); values.pop();  
        char op = ops.top(); ops.pop();  
        values.push(compute(val1, val2, op));  
    }  
  
    return values.top();  
}  
  
int main() {  
    string expression;  
    cout << "请输入一个数学表达式: ";  
    getline(cin, expression);  
  
    try {  
        double result = evaluateExpression(expression);  
        cout << "结果是: " << result << endl;  
    } catch (const invalid_argument& e) {  
        cout << "错误: " << e.what() << endl;  
    }  
  
    return 0;  
} 

三、代码解析

  • compute函数:执行基本的数学运算。它接收两个double类型的操作数和一个char类型的运算符,然后根据运算符执行相应的运算并返回结果。
  • evaluateExpression函数:使用两个栈,一个用于值,一个用于运算符,来实现表达式求值。该函数按照运算符的优先级处理表达式,并正确处理括号。
  • main函数:程序的入口点。它首先提示用户输入一个数学表达式,然后调用evaluateExpression函数计算表达式的结果,并将结果打印到屏幕上。如果在计算过程中发生错误,程序会捕获异常并显示错误信息。

四、程序运行

用户可以在控制台中输入一个数学表达式,例如 "3 + 4 * (2 - 1) / 5",然后程序会计算表达式的结果并显示。如果用户输入了一个无效的表达式,程序会显示一个错误信息。

五、结论

这个C++多功能计算器程序展示了如何使用栈来处理复杂的数学表达式,并提供了用户友好的交互界面。通过扩展这个程序,可以添加更多的功能,比如支持更多的数学函数、提供图形用户界面等。

责任编辑:赵宁宁 来源: 鲨鱼编程
相关推荐

2015-08-05 09:30:32

C#下拉式计算器

2022-07-11 16:19:22

css属性鸿蒙

2019-03-20 10:47:04

DNS服务器Python

2010-02-05 18:09:28

C++ Doxygen

2011-09-16 14:13:15

Windows7计算器

2010-02-05 16:25:10

C++ strtok(

2010-02-03 15:52:55

C++ clock()

2016-12-12 13:41:37

iOS简易加法开发

2010-01-11 11:02:59

Visual C++

2020-08-12 08:22:37

Python开发个税

2010-01-21 09:11:38

C++编译器

2022-08-09 16:01:24

应用开发鸿蒙

2019-03-23 10:26:31

微软开源图形

2009-12-03 11:11:57

2022-04-01 13:10:20

C++服务器代码

2009-11-19 14:13:37

边缘路由器

2017-09-05 16:43:47

Electron桌面计算器

2009-12-08 15:51:12

多功能宽带路由器

2012-10-25 14:52:25

商务简报器

2009-12-04 18:20:58

多功能宽带路由器
点赞
收藏

51CTO技术栈公众号