计算后缀表达式的C语言
时间: 2023-12-20 09:05:14 浏览: 70
计算后缀表达式的C语言程序需要用到栈来辅助实现。具体步骤如下:
1. 从控制台输入后缀表达式,以空格为分割输入。
2. 遍历输入的字符串,如果是数字则直接入栈,如果是运算符则弹出栈顶的两个元素进行运算,并将结果入栈。
3. 如果遍历完字符串后栈中只有一个元素,则该元素即为表达式的结果。
4. 在运算过程中需要注意表达式错误检测异常,例如除数为0等情况。
下面是一个简单的计算后缀表达式的C语言程序:
```
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX_STACK_SIZE 100
typedef struct {
int top;
int data[MAX_STACK_SIZE];
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAX_STACK_SIZE - 1;
}
void push(Stack *s, int x) {
if (isFull(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
int calculate(char *expr) {
Stack s;
initStack(&s);
int i = 0;
while (expr[i] != '\0') {
if (isdigit(expr[i])) {
int num = 0;
while (isdigit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
push(&s, num);
} else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') {
int op1 = pop(&s);
int op2 = pop(&s);
int result;
switch (expr[i]) {
case '+':
result = op2 + op1;
break;
case '-':
result = op2 - op1;
break;
case '*':
result = op2 * op1;
break;
case '/':
if (op1 == 0) {
printf("Divide by zero\n");
exit(1);
}
result = op2 / op1;
break;
}
push(&s, result);
i++;
} else {
printf("Invalid character\n");
exit(1);
}
}
if (isEmpty(&s)) {
printf("Empty expression\n");
exit(1);
}
int result = pop(&s);
if (!isEmpty(&s)) {
printf("Invalid expression\n");
exit(1);
}
return result;
}
int main() {
char expr[100];
printf("Enter postfix expression: ");
fgets(expr, 100, stdin);
int result = calculate(expr);
printf("Result: %d\n", result);
return 0;
}
```