21xrx.com
2025-03-27 17:37:55 Thursday
文章检索 我的文章 写文章
C++实现算术表达式计算
2023-07-04 18:16:30 深夜i     11     0
C++ 算术表达式 计算

算术表达式计算是程序设计中一项非常基础的任务,它涉及到数学计算、字符处理、控制结构等多方面的知识。而在计算机语言中,C++是一种非常常用的编程语言,也有着强大的计算能力,因此,使用C++来实现算术表达式计算也是很自然的选择。

首先,我们需要明确算术表达式的组成和含义。算术表达式由数字、运算符和括号构成,通过运算符的优先级和括号的分组,可以确定表达式的计算顺序和结果。而在C++中,可以使用char类型的变量来表示运算符和括号,使用double类型的变量来表示数字,可以使用数组、循环、递归等多种方法来实现算术表达式的计算。

下面是一个简单的C++程序,用于计算一个给定的算术表达式:

#include <iostream>
#include <stack>
#include <string>
using namespace std;
int priority(char op) {
  switch (op) {
    case '+':
    case '-':
      return 1;
    case '*':
    case '/':
      return 2;
    case '(':
    case ')':
      return 0;
    default:
      return -1;
  }
}
double calculate(double a, double b, char op) {
  switch (op) {
    case '+':
      return a + b;
    case '-':
      return a - b;
    case '*':
      return a * b;
    case '/':
      return a / b;
    default:
      return 0;
  }
}
double evaluate(string expr) {
  stack<double> num_stack;
  stack<char> op_stack;
  char op;
  double num, a, b;
  for (int i = 0; i < expr.length(); i++) {
    if (isdigit(expr[i])) {
      num = 0;
      while (i < expr.length() && isdigit(expr[i])) {
        num = num * 10 + (expr[i] - '0');
        i++;
      }
      i--;
      num_stack.push(num);
    } else {
      op = expr[i];
      if (op == '(') {
        op_stack.push(op);
      } else if (op == ')') {
        while (!op_stack.empty() && op_stack.top() != '(') {
          b = num_stack.top();
          num_stack.pop();
          a = num_stack.top();
          num_stack.pop();
          num = calculate(a, b, op_stack.top());
          num_stack.push(num);
          op_stack.pop();
        }
        op_stack.pop();
      } else {
        while (!op_stack.empty() && priority(op) <= priority(op_stack.top())) {
          b = num_stack.top();
          num_stack.pop();
          a = num_stack.top();
          num_stack.pop();
          num = calculate(a, b, op_stack.top());
          num_stack.push(num);
          op_stack.pop();
        }
        op_stack.push(op);
      }
    }
  }
  while (!op_stack.empty()) {
    b = num_stack.top();
    num_stack.pop();
    a = num_stack.top();
    num_stack.pop();
    num = calculate(a, b, op_stack.top());
    num_stack.push(num);
    op_stack.pop();
  }
  return num_stack.top();
}
int main() {
  string expr;
  cout << "请输入一个算术表达式:" << endl;
  cin >> expr;
  double result = evaluate(expr);
  cout << "计算结果为:" << result << endl;
  return 0;
}

这个程序使用了两个栈(stack)来实现算术表达式的计算。一个栈用于存储数字(double类型),另一个栈用于存储运算符和括号(char类型)。程序首先从输入中读取一个算术表达式,然后遍历表达式的每一个字符。如果读到的是数字,就将数字转换为double类型,并压入数字栈中。如果读到的是运算符或括号,就根据其优先级和栈顶元素的优先级进行比较,如果当前运算符的优先级较高,就压入运算符栈中;否则就从数字栈中取出两个数字,从运算符栈中取出一个运算符,进行计算,并将计算结果压入数字栈中。遍历完整个表达式后,再将运算符栈中的元素按顺序取出,进行计算,最终得到表达式的运算结果。

在这个程序中,我们使用了一些常用的C++库函数和特性。例如,使用iostream库中的cin和cout函数来进行输入和输出,使用stack库中的stack类来实现栈数据结构。另外,这个程序还使用了字符串处理和字符转换的功能,使用了逻辑运算符和条件控制语句的特性等。这些都是C++编程中常用的技巧和方法,对于学习和掌握C++语言来说非常重要。

综上所述,C++语言是一种非常适合实现算术表达式计算的编程语言,通过运用C++的特性和技巧,我们可以很好地完成这个任务。对于刚入门的C++程序员来说,实现算术表达式计算是一个非常好的练手项目,可以使他们更加熟悉和掌握这门语言的基本特性和用法,从而为将来的C++编程之路打下坚实的基础。

  
  

评论区