我试图用c支持+, - ,*和/运算符括号中的简单计算器。例如((2.1 - 5.6)*4)+(2.8+2 / 2.2)
应该是-10.29 ...我试过这样但是它只适用于没有barckets。如果用户的输入包括括号,我不知道如何处理。
float calc(void)
{
float x,y, parse;
char c;
int test = scanf("%f %c %f", &x,&c,&y);
if (test == 0){ // if '(' starts equation
parse = calc();
}
else{
if (c == '-'){
return x - y;
}
else if (c == '/'){
return x / y;
}
else if (c == '+'){
return x + y;
}
else if (c == '*'){
return x * y;
}
}
}
答案 0 :(得分:2)
这里有算法: http://en.wikipedia.org/wiki/Shunting-yard_algorithm
顺便提一下,你所使用的是中缀符号。该算法似乎做的是将其转换为后缀表示法(由于您只需要一个堆栈,因此更容易计算)。
另外,只是为了好奇,旧的计算器使用后缀表示法(还有som编程语言仍然使用它)所以,要计算3 + 5,你写3 5 +
答案 1 :(得分:1)
你不能用这种简单的方法解决复杂括号的方程式。您必须遵循一些算法。其中一个用于某些计算器的是反转波兰表示法,您可以将公式转换为特定形式,然后使用堆栈开始推送和弹出以考虑优先级进行计算。