c语言用栈实现可以计算小数的计算器
时间: 2023-05-29 19:05:40 浏览: 184
以下是使用栈实现可以计算小数的计算器的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> // 包含isdigit()函数的头文件
// 定义栈结构体
typedef struct {
double *data; // 存储栈元素的数组指针
int top; // 栈顶指针
int size; // 栈的最大容量
} Stack;
// 初始化栈
Stack *init(int size) {
Stack *stack = (Stack *) malloc(sizeof(Stack));
stack->data = (double *) malloc(size * sizeof(double));
stack->top = -1;
stack->size = size;
return stack;
}
// 判断栈是否为空
int is_empty(Stack *stack) {
return stack->top == -1;
}
// 判断栈是否已满
int is_full(Stack *stack) {
return stack->top == stack->size - 1;
}
// 入栈
void push(Stack *stack, double x) {
if (is_full(stack)) {
printf("Stack overflow!\n");
exit(1);
}
stack->data[++(stack->top)] = x;
}
// 出栈
double pop(Stack *stack) {
if (is_empty(stack)) {
printf("Stack underflow!\n");
exit(1);
}
return stack->data[(stack->top)--];
}
// 获取栈顶元素
double top(Stack *stack) {
if (is_empty(stack)) {
printf("Stack is empty!\n");
exit(1);
}
return stack->data[stack->top];
}
// 计算表达式的值
double evaluate(char *expr) {
Stack *stack = init(100);
int i = 0;
while (expr[i] != '\0') {
if (isdigit(expr[i]) || expr[i] == '.') { // 数字或小数点
double num = atof(&expr[i]); // 将字符串转换为浮点数
push(stack, num);
while (isdigit(expr[i]) || expr[i] == '.') i++; // 跳过数字和小数点
} else if (expr[i] == '+' || expr[i] == '-' || expr[i] == '*' || expr[i] == '/') { // 运算符
double num2 = pop(stack);
double num1 = pop(stack);
double result;
switch (expr[i]) {
case '+': result = num1 + num2; break;
case '-': result = num1 - num2; break;
case '*': result = num1 * num2; break;
case '/': result = num1 / num2; break;
}
push(stack, result);
i++;
} else { // 忽略空格和其他字符
i++;
}
}
double result = pop(stack);
free(stack->data);
free(stack);
return result;
}
int main() {
char expr[100];
printf("Please input an expression (e.g. 2.5 + 3.7 * 4.2):\n");
fgets(expr, 100, stdin);
double result = evaluate(expr);
printf("The result is: %g\n", result);
return 0;
}
```
使用示例:
```
Please input an expression (e.g. 2.5 + 3.7 * 4.2):
2.5 + 3.7 * 4.2
The result is: 18.74
```
阅读全文