c语言计算器括号怎么解决,C语言计算器,该如何解决

C语言计算器

要求 是自己输入算式,要考虑括号,可以实现小数的加减乘除和幂运算

下面这个是老师的示例,只能实现整数并且不能考虑括号

望大神赐教

奉献出100的分数

#include 

#define smax 10

#define emax 255

int power(int x,int y)

{

int t,s=1;

for (t=0; t

s=s*y;

return s;

}

int calc(char op, int x, int y)

{

int num;

if (op=='+')

num=x+y;

else if (op=='-')

num=y-x;

else if (op=='*')

num=y*x;

else if (op=='/')

num=y/x;

else if (op=='^')

num=power(x,y);

return num;

}

int rank(char op)

{

int r;

if (op=='+') r=0;

else if (op=='-') r=1;

else if (op=='*') r=2;

else if (op=='/') r=2;

else if (op=='^') r=3;

return r;

}

void main()

{

//栈

int s[smax];

char op[smax];

int top=0;

int otop=0;

//其他变量

int i,num,x,y;

int ans=0;

int rtop,rinput;

char o;

//表达式存储

char ex[emax];

//实现计算器的功能

//输入表达式

scanf("%s", ex);

i=0;

num=0;

//读出每个字符

s[0]=0;

top=1;

op[0]='+';

otop=1;

while (1)

{

//分解每个数和符号

if (ex[i] >=48 && ex[i]<58)

{

//读到数字

num=num*10+ex[i]-48;

}

else

{

//前一个数字已经输入完毕

//数字入栈

s[top]=num;

top=top+1;

num=0;

if (ex[i]==0)

break;

else

{

//判断符号优先级

//如果优先级低于当前栈顶的符号的优先级,计算栈顶符号对应的运算

rinput=rank(ex[i]);

//符号栈顶元素出栈

otop=otop-1;

o=op[otop];

rtop=rank(o);

while (rtop>=rinput && rtop!=0)

{

//计算

//数字出战

top=top-1;

你可能感兴趣的:(c语言计算器括号怎么解决)