怎么利用c语言的数组编写一个能够四则混合运算的计算器
时间: 2024-05-09 22:20:49 浏览: 107
能进行四则混合运算的计算器
4星 · 用户满意度95%
以下是一个简单的四则混合运算的计算器,它可以执行加、减、乘和除法运算。它使用一个数组来存储输入的表达式,并使用逆波兰表示法来计算结果。
逆波兰表示法是一种将运算符放在操作数之后的表示法。例如,表达式“3+4”在逆波兰表示法中为“3 4 +”。逆波兰表示法的优点是它不需要使用括号,因此更容易实现。
代码如下:
```c
#include <stdio.h>
#define STACK_SIZE 100
void push(double stack[], int *top, double value) {
if (*top >= STACK_SIZE) {
printf("Error: Stack overflow\n");
return;
}
stack[++(*top)] = value;
}
double pop(double stack[], int *top) {
if (*top < 0) {
printf("Error: Stack underflow\n");
return 0;
}
return stack[(*top)--];
}
double calculate(char expr[]) {
double stack[STACK_SIZE];
int top = -1;
for (int i = 0; expr[i] != '\0'; i++) {
if (expr[i] >= '0' && expr[i] <= '9') {
double num = 0;
while (expr[i] >= '0' && expr[i] <= '9') {
num = num * 10 + (expr[i] - '0');
i++;
}
push(stack, &top, num);
i--;
} else if (expr[i] == '+') {
double op1 = pop(stack, &top);
double op2 = pop(stack, &top);
push(stack, &top, op2 + op1);
} else if (expr[i] == '-') {
double op1 = pop(stack, &top);
double op2 = pop(stack, &top);
push(stack, &top, op2 - op1);
} else if (expr[i] == '*') {
double op1 = pop(stack, &top);
double op2 = pop(stack, &top);
push(stack, &top, op2 * op1);
} else if (expr[i] == '/') {
double op1 = pop(stack, &top);
double op2 = pop(stack, &top);
push(stack, &top, op2 / op1);
}
}
return pop(stack, &top);
}
int main() {
char expr[STACK_SIZE];
printf("Enter an expression in postfix notation: ");
scanf("%s", expr);
double result = calculate(expr);
printf("Result: %f\n", result);
return 0;
}
```
该程序首先定义了一个大小为100的数组来存储操作数和运算符。它还定义了两个函数push()和pop(),用于将值压入栈中并从栈中弹出值。
计算器主函数calculate()接受一个以逆波兰表示法编写的表达式作为输入,并使用栈来计算表达式的值。它遍历表达式中的每个字符,并根据字符的类型执行相应的操作。如果字符是数字,则将其转换为double类型并将其压入栈中。如果字符是运算符,则从栈中弹出两个操作数并执行相应的运算。运算结果再次被压入栈中。最后,该函数从栈中弹出最后一个值,它就是表达式的结果。
主函数main()提示用户输入一个逆波兰表示法的表达式,并使用calculate()函数计算表达式的结果。计算结果被打印到标准输出中。
阅读全文