21xrx.com
2024-11-10 00:55:49 Sunday
登录
文章检索 我的文章 写文章
C++实现算术表达式计算
2023-07-04 18:16:30 深夜i     --     --
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++编程之路打下坚实的基础。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复