c语言实现应用栈实现四则运算
时间: 2023-08-17 11:08:13 浏览: 131
可以使用栈来实现四则运算表达式的计算。具体步骤如下:
1. 定义一个栈结构,用于存放运算符和数字。
2. 读入表达式字符串,逐个字符进行处理。
3. 遇到数字字符时,将其转换为数字并压入栈中。
4. 遇到运算符时,从栈中弹出两个数字进行计算,并将结果压入栈中。
5. 最后栈中只剩下一个数字,即为表达式的计算结果。
下面是使用C语言实现的应用栈实现四则运算的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 50
typedef struct {
int top;
int data[MAX_SIZE];
} Stack;
void push(Stack *stack, int value) {
if (stack->top == MAX_SIZE) {
printf("Error: stack overflow\n");
exit(1);
}
stack->data[++stack->top] = value;
}
int pop(Stack *stack) {
if (stack->top == -1) {
printf("Error: stack underflow\n");
exit(1);
}
return stack->data[stack->top--];
}
int calculate(char *expr) {
Stack stack = {-1};
char *p = expr;
while (*p != '\0') {
if (*p >= '0' && *p <= '9') {
int num = 0;
while (*p >= '0' && *p <= '9') {
num = num * 10 + (*p - '0');
p++;
}
push(&stack, num);
} else if (*p == '+' || *p == '-' || *p == '*' || *p == '/') {
int b = pop(&stack);
int a = pop(&stack);
switch (*p) {
case '+':
push(&stack, a + b);
break;
case '-':
push(&stack, a - b);
break;
case '*':
push(&stack, a * b);
break;
case '/':
if (b == 0) {
printf("Error: divide by zero\n");
exit(1);
}
push(&stack, a / b);
break;
}
p++;
} else {
printf("Error: invalid character '%c'\n", *p);
exit(1);
}
}
if (stack.top != 0) {
printf("Error: invalid expression\n");
exit(1);
}
return pop(&stack);
}
int main() {
char expr[100];
printf("请输入四则运算表达式:");
scanf("%s", expr);
int result = calculate(expr);
printf("计算结果:%d\n", result);
return 0;
}
```
在程序中,我们定义了一个栈结构 Stack,包含一个指向栈顶的 top 指针和一个数组 data 用于存放栈中的元素。push 函数实现元素的入栈,pop 函数实现元素的出栈。calculate 函数接收一个字符串类型的表达式,逐个字符进行处理,并使用栈来计算表达式的值。
使用示例:
```
请输入四则运算表达式:3+4*2/(1-5)^2
计算结果:3
```
阅读全文