用C语言顺序栈写一个计算器
时间: 2024-10-14 17:05:31 浏览: 11
在C语言中,我们可以利用顺序栈(数组实现)来设计一个简单的四则运算计算器。由于这里是一个文本环境,我会给出核心代码示例,但请注意,为了完整运行这个程序,你需要在实际环境中编写,并处理用户输入、错误检查和边界条件。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct Stack {
int top;
int data[MAX_SIZE];
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 将元素压入栈
void push(Stack *s, int val) {
if (isEmpty(s)) {
s->top++;
}
s->data[s->top] = val;
}
// 弹出栈顶元素并返回
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty.\n");
return -1;
}
int temp = s->data[s->top];
s->top--;
return temp;
}
// 简单的四则运算计算函数
int calculate(Stack *s) {
int num1 = pop(s);
char op = pop(s); // 操作符
int num2 = pop(s);
switch (op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
if (num2 != 0)
return num1 / num2;
else
return -1; // 防止除数为零错误
default:
printf("Invalid operator.\n");
return -1;
}
}
int main() {
Stack calculatorStack;
init(&calculatorStack);
char input[10];
while (scanf("%s", input) == 1) {
if (!isspace(input[0])) { // 输入数字
push(&calculatorStack, atoi(input));
} else { // 输入操作符
int result = calculate(&calculatorStack);
if (result != -1)
printf("%d\n", result);
}
}
return 0;
}
```
阅读全文