用c语言写一个简单的算术表达式求值
时间: 2023-10-22 19:03:33 浏览: 160
以下是使用 C 语言编写的简单算术表达式求值的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
// 将操作数压入栈中
void push(int value) {
if (top == MAX_SIZE - 1) {
printf("Stack overflow!");
exit(1);
}
stack[++top] = value;
}
// 从栈中弹出操作数
int pop() {
if (top == -1) {
printf("Stack underflow!");
exit(1);
}
return stack[top--];
}
// 对两个操作数执行指定的操作
int apply(char op, int a, int b) {
switch (op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
printf("Invalid operator!");
exit(1);
}
}
// 计算表达式的值
int evaluate(char* expression) {
int i, a, b;
for (i = 0; expression[i] != '\0'; i++) {
if (expression[i] >= '0' && expression[i] <= '9') {
push(expression[i] - '0');
} else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '*' || expression[i] == '/') {
b = pop();
a = pop();
push(apply(expression[i], a, b));
} else if (expression[i] != ' ') {
printf("Invalid character!");
exit(1);
}
}
return pop();
}
int main() {
char expression[MAX_SIZE];
printf("Enter an arithmetic expression: ");
fgets(expression, MAX_SIZE, stdin);
printf("Result: %d", evaluate(expression));
return 0;
}
```
在上面的代码中,我们使用一个栈来存储操作数,并对表达式进行遍历以依次计算其值。在每个操作符处,我们从栈中弹出两个操作数,应用该操作符并将结果压回栈中。最终,栈中只会剩下一个值,即整个表达式的结果。
阅读全文