数据结构C语言编写一个计算器
时间: 2024-11-25 08:22:29 浏览: 5
在C语言中,我们可以创建一个简单的命令行计算器程序,通过不同的数据结构如数组或结构体来存储操作数和运算符,然后根据用户输入的指令进行计算。这里我们选择使用字符数组作为栈来模拟运算过程,因为可以方便地实现加、减、乘、除等基本运算。
```c
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct {
double num;
char op; // 运算符,如 '+','-','*','/'
} CalculatorStackItem;
// 创建一个新的栈项并添加到栈顶
CalculatorStackItem* push(double num, CalculatorStackItem stack[]) {
CalculatorStackItem *top = (CalculatorStackItem*)malloc(sizeof(CalculatorStackItem));
top->num = num;
top->op = '\0';
if(stack == NULL) {
stack = top;
} else {
stack = (CalculatorStackItem*)realloc(stack, sizeof(CalculatorStackItem) * (sizeof(stack)/sizeof(stack[0])+1));
stack[-1].op = top->op;
stack[-1].num = top->num;
}
return stack;
}
// 根据运算符执行相应的计算
double applyOp(double a, double b, char op) {
switch(op) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
if(b != 0)
return a / b;
else
printf("Error: Division by zero!\n");
break;
default:
printf("Invalid operator.\n");
return 0;
}
}
int main() {
CalculatorStackItem stack[] = {0};
double result = 0;
char input;
while(scanf("%lf %c", &result, &input) == 2) {
switch(input) {
case '(': // 开始新的运算
push(result, stack);
scanf("%c", &input); // 消耗左括号
continue;
case ')': // 结束当前运算并应用结果
result = applyOp(stack[-1].num, result, stack[-1].op);
stack--;
break;
default: // 应用运算符
if(stack && stack[-1].op != '\0') {
result = applyOp(stack[-1].num, result, input);
}
push(input - '0', stack); // 将数字压入栈
break;
}
}
printf("%.2f\n", result);
return 0;
}
阅读全文