C语言用栈写一个计算器包含头文件
时间: 2024-11-27 09:12:45 浏览: 4
C语言写的一个计算器程序的源代码
4星 · 用户满意度95%
在C语言中,利用栈数据结构来实现一个简单的计算器可以分为几个步骤。首先,创建一个栈来存储操作数和运算符。由于栈的特点是后进先出(LIFO),所以我们可以依次将用户输入的数字和遇到的运算符入栈,然后在合适的时机执行计算。
下面是一个简化的例子,仅支持加减运算,并假设我们已经包含了必要的头文件`stdio.h`和`stdlib.h`,用于输入、输出和动态内存管理:
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> // 包含bool类型
#define MAX_STACK_SIZE 50
typedef struct {
int stack[MAX_STACK_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
bool is_empty(Stack *s) {
return s->top == -1;
}
// 入栈操作
void push(Stack *s, int value) {
if (s->top < MAX_STACK_SIZE - 1) {
s->stack[++s->top] = value;
} else {
printf("Stack overflow!\n");
}
}
// 出栈操作
int pop(Stack *s) {
if (!is_empty(s)) {
return s->stack[s->top--];
} else {
printf("Stack underflow!\n");
return 0;
}
}
// 栈内计算
int calculate(Stack *s) {
int op1 = pop(s);
int op2 = pop(s);
switch (op2) {
case '+':
push(s, op1 + op2);
break;
case '-':
push(s, op1 - op2);
break;
default:
printf("Invalid operator.\n");
break;
}
return op1; // 返回第一个操作数以便处理下一个运算
}
int main() {
Stack calculator;
init(&calculator);
char input[100];
while (scanf("%s", input) == 1 && strcmp(input, "quit") != 0) {
for (char* token = strtok(input, "+-"); token; token = strtok(NULL, "+-")) {
if (token[0] >= '0' && token[0] <= '9') {
push(&calculator, atoi(token));
} else if (token[0] == '+' || token[0] == '-') {
calculate(&calculator); // 每次遇到运算符就计算一次
} else {
printf("Unknown operator.\n");
}
}
printf("Result: %d\n", calculator.stack[calculator.top]);
}
return 0;
}
```
阅读全文