21xrx.com
2024-09-19 09:33:08 Thursday
登录
文章检索 我的文章 写文章
C语言表达式求值实现:实现加减乘除括号计算
2023-06-15 16:33:47 深夜i     --     --
C语言 表达式求值 加减乘除 括号计算

在C语言中,表达式求值是编程中必不可少的基本操作之一。表达式求值实现中包含了加、减、乘、除、和括号等多个数学运算符的计算。在这篇文章中,我们将为大家详细介绍如何在C语言中实现表达式求值,包括如何进行加减乘除和括号的计算。

首先,需要明确的是表达式求值的本质就是一个算法问题。C语言中的表达式求值算法主要包括以下几个模块:

1. 去除括号(递归)

2. 计算乘除法(顺序)

3. 计算加减法(顺序)

4. 返回结果

在代码实现过程中,需要运用到栈和递归等数据结构和算法。具体实现方法可参照以下代码示例:


#include

#include

#include

#include

#define MAXOP 100

#define NUM '0'

int getop(char []);

void push(double);

double pop(void);

int main()

{

  int type;

  double op2;

  char s[MAXOP];

  while ((type = getop(s)) != EOF) {

    switch (type) {

      case NUM:

        push(atof(s));

        break;

      case '+':

        push(pop() + pop());

        break;

      case '*':

        push(pop() * pop());

        break;

      case '-':

        op2 = pop();

        push(pop() - op2);

        break;

      case '/':

        op2 = pop();

        if (op2 != 0.0)

          push(pop() / op2);

        else

          printf("error: zero divisor\n");

        break;

      case '\n':

        printf("\t%.8g\n", pop());

        break;

      default:

        printf("error: unknown command %s\n", s);

        break;

    }

  }

  return 0;

}

#define MAXVAL 100

int sp = 0;

double val[MAXVAL];

void push(double f)

{

  if (sp < MAXVAL)

    val[sp++] = f;

  else

    printf("error: stack full, can't push %g\n", f);

}

double pop(void)

{

  if (sp > 0)

    return val[--sp];

  else {

    printf("error: stack empty\n");

    return 0.0;

  }

}

int getch(void);

void ungetch(int);

int getop(char s[])

{

  int i, c;

  while ((s[0] = c = getch()) == ' ' || c == '\t')

    ;

  s[1] = '\0';

  if (!isdigit(c) && c != '.')

    return c;

  i = 0;

  if (isdigit(c))

    while (isdigit(s[++i] = c = getch()))

      ;

  if (c == '.')

    while (isdigit(s[++i] = c = getch()))

      ;

  s[i] = '\0';

  if (c != EOF)

    ungetch(c);

  return NUM;

}

#define BUFSIZE 100

char buf[BUFSIZE];

int bufp = 0;

int getch(void)

{

  return (bufp > 0) ? buf[--bufp] : getchar();

}

void ungetch(int c)

{

  if (bufp >= BUFSIZE)

    printf("ungetch: too many characters\n");

  else

    buf[bufp++] = c;

}

通过以上代码实现,我们能够成功实现了基本的加减乘除和括号的表达式求值,这不仅为初学者提供了一个完整的基础实现,同时也为高手提供了一个向更高层次发展的基础。

  
  

评论区

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