c语言实现后缀表达式计算的代码
时间: 2024-11-12 08:44:48 浏览: 24
在C语言中,实现后缀表达式的计算通常会使用栈数据结构。后缀表达式,也称为逆波兰表示法(RPN),是一种不需要括号就能明确解析优先级的数学运算表达式形式。下面是一个简单的C程序示例,展示了如何使用递归函数来处理后缀表达式:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义操作数栈
typedef struct Stack {
int top;
double data[100];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 入栈
void push(Stack *s, double num) {
s->data[++s->top] = num;
}
// 出栈
double pop(Stack *s) {
return s->data[s->top--];
}
// 后缀表达式求值
double evaluate(char* exp) {
Stack stack;
init(&stack);
// 遍历后缀表达式
for(char *token = exp; *token != '\0'; token++) {
if(*token != ' ') { // 如果不是空格,处理数字或操作符
double op1 = pop(&stack);
double op2 = pop(&stack);
switch(*token) {
case '+':
push(&stack, op2 + op1);
break;
case '-':
push(&stack, op2 - op1);
break;
case '*':
push(&stack, op2 * op1);
break;
case '/':
if(op1 != 0)
push(&stack, op2 / op1);
else
printf("Error: Division by zero\n");
break;
default:
printf("Invalid operator '%c'\n", *token);
return 0;
}
} else { // 遇到空格,跳过
continue;
}
}
// 检查栈顶是否有剩余的操作数
if(isEmpty(&stack)) {
printf("Error: Invalid expression\n");
return 0;
}
return pop(&stack);
}
int main() {
char* expr = "2 3 + 4 *";
printf("Result of %s is %.2f\n", expr, evaluate(expr));
return 0;
}
```
阅读全文