C语言实现简易四则运算

对于简易的四则运算,需要知道的也是最重要的一点就是:先乘除后加减,所以就不可以从左到右依次计算,要将输入的中缀表达式转换成后缀表达式
不会这一方法的可以先看我的这篇博客了解一下。

思路:

将输入的表达式中的数字放到一个栈,再把运算符放到一个栈,
由于先加减后乘除的特性,所以我要比较运算符的等级,然后再决定是否放入栈内。如果要判断的运算符的优先级小于栈顶所存放的运算符的优先级,则取出数字栈中的上面两个数字进行运算,然后将结果放入数字栈内;如果要判断的运算符优先级大于运算符栈顶存放的运算符的优先级,则把它入栈。这里我用“#”符号表示输入表达式的结束。

demo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int Calculate(int a, int b, char c);
int Compare(char c);

int main() {
    
    
    int dataStack[100] = {
    
    0};//存放数字的栈
    int dataTop = -1;
    
    char operatorStack[100] = {
    
    '#'};//存放运算符的栈
    int operatorTop = 0;
    
    char str[100];
    scanf("%s", str);
    int length = (int)strlen(str);
    
    int i = 0, flag = 0, x = 0;
    
    while(i < length) {
    
    
        if (str[i] >= '0' && str[i] <= '9') {
    
       //计算输入的是几位数
            x = x * 10 + (str[i++] - '0');
            flag = 1;
        } else {
    
    
            if (flag == 1) {
    
    
                dataStack[++dataTop] = x;
                x = 0;
                flag = 0;
            }
            if (Compare(operatorStack[operatorTop]) < Compare(str[i])) {
    
    
                operatorStack[++operatorTop] = str[i++];
            } else {
    
    
                int b = dataStack[dataTop--];
                int a = dataStack[dataTop--];
                dataStack[++dataTop] = Calculate(a, b, operatorStack[operatorTop--]);
                if (str[i] == '#' && operatorTop == 0) {
    
    
                    break;
                }
            }
        }
    }
    printf("%d\n", dataStack[dataTop]);
}

int Calculate(int a, int b, char c) {
    
    
    if (c == '-') {
    
    
        return a - b;
    } else if (c == '+') {
    
    
        return a + b;
    } else if (c == '*') {
    
    
        return a * b;
    } else if (c == '/') {
    
    
        return a / b;
    } else {
    
    
        return 0;
    }
}

int Compare(char c) {
    
    
    if (c == '#') {
    
    
        return 0;
    } else if (c == '+' || c == '-') {
    
    
        return 1;
    } else if (c == '*' || c == '/') {
    
    
        return 2;
    } else {
    
    
        printf("输入有误,请重新输入!\n");
        return -1;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_50990189/article/details/120516959