根据用户输入的四则运算表达式,输出表达式及结果。要求支持加、减、乘、除运算
网上搜一下就有啊
#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;
}