c语言使用栈实现表达式计算器
时间: 2023-10-11 20:08:46 浏览: 176
下面是使用栈实现的简单表达式计算器的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100
// 定义栈结构体
typedef struct {
double data[MAX_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int is_empty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈
void push(Stack *s, double value) {
if (is_full(s)) {
printf("Stack is full.\n");
exit(1);
}
s->data[++s->top] = value;
}
// 出栈
double pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top--];
}
// 获取栈顶元素
double top(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
exit(1);
}
return s->data[s->top];
}
// 判断是否为数字
int is_digit(char c) {
return c >= '0' && c <= '9';
}
// 计算表达式
double calculate(char *expr) {
Stack s;
init(&s);
int len = strlen(expr);
int i = 0;
while (i < len) {
if (is_digit(expr[i])) {
double num = 0;
while (i < len && is_digit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
push(&s, num);
} else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') {
double num1 = pop(&s);
double num2 = pop(&s);
switch (expr[i]) {
case '+':
push(&s, num2 + num1);
break;
case '-':
push(&s, num2 - num1);
break;
case '*':
push(&s, num2 * num1);
break;
case '/':
push(&s, num2 / num1);
break;
}
i++;
} else {
i++;
}
}
return pop(&s);
}
int main() {
char expr[MAX_SIZE];
printf("Enter an expression: ");
fgets(expr, MAX_SIZE, stdin);
double result = calculate(expr);
printf("Result: %.2f\n", result);
return 0;
}
```
运行程序后,可以输入一个表达式,程序会计算表达式的值并输出。例如输入`2*3+5/2-1`,程序会输出`Result: 6.50`。
阅读全文