根据用户输入的四则运算表达式,输出表达式及结果。要求支持加、减、乘、除运算。

根据用户输入的四则运算表达式,输出表达式及结果。要求支持加、减、乘、除运算

网上搜一下就有啊

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

int Calculation(int a, char ch, int b);
void Frame(void);
int Compare(char ch);

int main(void) {
    Frame();
    return 0;
}

int Calculation(int a, char ch, int b) {
    if (ch == '+') {
        return a + b;
    } else if (ch == '-') {
        return a - b;
    } else if (ch == '*') {
        return a * b;
    } else if (ch == '/') {
        return a / b;
    } else {
        return 0;
    }
}
void Frame(void) {
    //定义一个存储数据的栈 
    int numberStack[100] = {0};
    int numberTop = -1;
    
    //定义一个存储符号的栈
    char symbolStack[100] = {'#'};
    int symbolTop = 0;
    
    char str[100];
    int flag = -1;
    scanf("%s", str);
    int x = 0;
    int length = (int)strlen(str); 
    int i = 0;
    while (i < length) {
        if (str[i] >= '0' && str[i] <= '9') {
            x = x * 10 + (str[i++] - '0');
            flag = 1;
        } else {
            if (flag == 1) {
            numberStack[++numberTop] = x;
            x = 0;
            flag = -1;
            }
            if (Compare(symbolStack[symbolTop]) < Compare(str[i])) {
                symbolStack[++symbolTop] = str[i++];
            } else {
                int b = numberStack[numberTop--];
                int a = numberStack[numberTop--];
                numberStack[++numberTop] = Calculation(a, symbolStack[symbolTop], b);
                symbolTop--;
                if (str[i] == '#' && symbolTop == 0) {
                    break;
                }
            }
        }
    }
    printf("%d", numberStack[numberTop]);
}
int Compare(char ch) {
    if (ch == '#') {
        return 0;
    } else if (ch == '+' || ch == '-') {
        return 1;
    } else if (ch == '*' || ch == '/') {
        return 2;
    } else {
        printf("你输入的有非法符号,请重新输入!");
        return -1;
    }
}


有用的话给个关注!

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

#define STACK_SIZE 100

int stack[STACK_SIZE];
int top = -1;

void push(int value) {
    if (top >= STACK_SIZE - 1) {
        printf("Error: stack overflow\n");
        exit(EXIT_FAILURE);
    }
    stack[++top] = value;
}

int pop() {
    if (top < 0) {
        printf("Error: stack underflow\n");
        exit(EXIT_FAILURE);
    }
    return stack[top--];
}

int main() {
    char expression[100];
    printf("Enter an arithmetic expression: ");
    fgets(expression, sizeof(expression), stdin);

    int num1, num2, result;
    char op;

    for (int i = 0; expression[i] != '\0'; i++) {
        if (isdigit(expression[i])) {
            // 处理数字
            int num = 0;
            while (isdigit(expression[i])) {
                num = num * 10 + (expression[i] - '0');
                i++;
            }
            i--;
            push(num);
        } else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
            // 处理运算符
            num2 = pop();
            num1 = pop();
            op = expression[i];
            switch (op) {
                case '+':
                    result = num1 + num2;
                    break;
                case '-':
                    result = num1 - num2;
                    break;
                case '*':
                    result = num1 * num2;
                    break;
                case '/':
                    result = num1 / num2;
                    break;
                default:
                    printf("Error: invalid operator\n");
                    exit(EXIT_FAILURE);
            }
            push(result);
        }
    }

    printf("Expression: %s", expression);
    printf("Result: %d\n", pop());

    return 0;
}