写一个表达式求值(c语言版)的代码
时间: 2024-03-26 14:35:58 浏览: 30
以下是一个简单的 C 语言代码,可以对表达式求值:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
void push(int val) {
if (top == MAX_SIZE - 1) {
printf("Error: Stack overflow!\n");
exit(1);
}
top++;
stack[top] = val;
}
int pop() {
if (top == -1) {
printf("Error: Stack underflow!\n");
exit(1);
}
int val = stack[top];
top--;
return val;
}
int evaluate(char *expr) {
char *ptr = expr;
while (*ptr != '\0') {
if (*ptr >= '0' && *ptr <= '9') {
int val = 0;
while (*ptr >= '0' && *ptr <= '9') {
val = val * 10 + (*ptr - '0');
ptr++;
}
push(val);
} else if (*ptr == '+') {
int val1 = pop();
int val2 = pop();
push(val2 + val1);
ptr++;
} else if (*ptr == '-') {
int val1 = pop();
int val2 = pop();
push(val2 - val1);
ptr++;
} else if (*ptr == '*') {
int val1 = pop();
int val2 = pop();
push(val2 * val1);
ptr++;
} else if (*ptr == '/') {
int val1 = pop();
int val2 = pop();
push(val2 / val1);
ptr++;
} else {
ptr++;
}
}
int result = pop();
if (top != -1) {
printf("Error: Invalid expression!\n");
exit(1);
}
return result;
}
int main() {
char expr[MAX_SIZE];
printf("Enter an expression: ");
fgets(expr, MAX_SIZE, stdin);
printf("Result: %d\n", evaluate(expr));
return 0;
}
```
该代码使用了一个栈来实现表达式求值。它首先遍历表达式中的每个字符,如果是数字,则将其转换为整数并将其压入栈中;如果是运算符,则将栈顶的两个元素弹出,进行相应的运算,并将结果压入栈中。最后,栈中只会剩下一个元素,即表达式的值。如果栈中有多个元素,或者表达式不合法,则会抛出错误并退出程序。