写一个使用栈来实现一个简单的计算器的c语言代码,加上注释
时间: 2023-04-03 14:01:15 浏览: 113
好的,下面是使用栈来实现一个简单的计算器的C语言代码:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int top;
int data[MAX_SIZE];
} 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, int x) {
if (is_full(s)) {
printf("Stack overflow\n");
exit(1);
}
s->data[++s->top] = x;
}
int pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top--];
}
int peek(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow\n");
exit(1);
}
return s->data[s->top];
}
int main() {
Stack s;
init(&s);
char c;
int num = ;
int op1, op2;
printf("Enter an expression: ");
while ((c = getchar()) != '\n') {
if (c >= '' && c <= '9') {
num = num * 10 + (c - '');
} else if (c == '+' || c == '-' || c == '*' || c == '/') {
push(&s, num);
num = ;
op2 = pop(&s);
op1 = pop(&s);
switch (c) {
case '+':
push(&s, op1 + op2);
break;
case '-':
push(&s, op1 - op2);
break;
case '*':
push(&s, op1 * op2);
break;
case '/':
push(&s, op1 / op2);
break;
}
}
}
printf("Result: %d\n", pop(&s));
return ;
}
```
这个程序使用栈来实现一个简单的计算器,可以计算加、减、乘、除四种运算。程序首先定义了一个栈的结构体,包括栈顶指针和数据数组。然后定义了一些栈的操作函数,包括初始化、判断栈是否为空或满、入栈、出栈和查看栈顶元素。在主函数中,程序读入一个表达式,逐个字符处理,如果是数字则累加到一个变量中,如果是运算符则将之前累加的数字入栈,并从栈中取出两个操作数进行计算,将结果入栈。最后输出栈顶元素作为计算结果。
阅读全文