C语言 用栈实现表达式求值,并给我呈现出这段代码
时间: 2024-05-10 15:21:08 浏览: 109
好的,以下是C语言用栈实现表达式求值的示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAXSTACK 20 // 栈的最大容量
char stack[MAXSTACK]; // 定义字符型栈
int top = -1; // 栈顶指针初始化为-1
void push(char item) {
if (top >= MAXSTACK-1) {
printf("Error: Stack overflow\n");
return;
}
stack[++top] = item;
}
char pop() {
if (top < 0) {
printf("Error: Stack is empty\n");
return -1;
}
return stack[top--];
}
int precedence(char op) {
switch (op) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '^':
return 3;
default:
return -1;
}
}
int evaluate(char *expr) {
char *p = expr;
int num1, num2, i, val;
while (*p) { // 循环读取表达式中的每个字符
if (isdigit(*p)) { // 如果是数字则直接入栈
push(*p - '0');
} else if (*p == '+' || *p == '-' || *p == '*' || *p == '/' || *p == '^') {
num2 = pop(); // 取出栈顶元素作为右操作数
num1 = pop(); // 再取出栈顶元素作为左操作数
switch (*p) { // 通过判断运算符来进行相应的计算
case '+':
val = num1 + num2;
break;
case '-':
val = num1 - num2;
break;
case '*':
val = num1 * num2;
break;
case '/':
val = num1 / num2;
break;
case '^':
val = 1;
for (i = 0; i < num2; i++)
val *= num1;
break;
}
push(val); // 计算结果入栈
}
p++;
}
return pop(); // 最终栈顶元素即为表达式的值
}
int main() {
char str[MAXSTACK];
printf("Enter an expression: ");
fgets(str, MAXSTACK, stdin); // 从标准输入读取表达式
printf("The result is: %d\n", evaluate(str));
return 0;
}
```
这个程序可以从标准输入读取表达式,然后利用栈来实现表达式求值。它支持加、减、乘、除、幂等五种基本运算,同时也支持多位数字和负数。您只需要在输入框中输入表达式,程序就会计算并输出结果。
阅读全文