请问有大神知道关于计算器中小数点的优先级和其他运算符号相比谁大谁小吗?,换言之有哪位大神有编过能得出浮点型结果的计算器吗?本人想用stm32编一个触屏计算器并能得出浮点结果。以下是本人编的只能得出整型结果的计算器:
#include"stdio.h"
#define maxsize 20
typedef struct arithentic
{
char fu[maxsize];
int shu[maxsize];
int top;
}stu;
struct advence
{
char letter;
int ch;
}pro[]={{'+',1},{'-',1},{'*',2},{'/',2},{')',0},{'(',0}};
int advence_com(char k)
{
int i;
for(i=0;i<6;i++)
if(pro[i].letter==k)
return pro[i].ch;
}
int yunsuan(char *s)
{
stu op;
stu num;
int a,b,c,d,i,sum=0,n=0,k;
op.top=num.top=-1;
while(*s!=' ')
{
if(*s>='0'&&*s<='9')
{
num.top++;
num.shu[num.top]=*s-'0';
s++;
n++;
}
else
if(*s=='+'||*s=='-'||*s=='*'||*s=='/'||*s=='('||*s==')')
{
if(n>=2)
{
k=num.top;
i=k+1-n;
while(n--)
{
d=num.shu[i];
num.top--;
sum=sum*10+d;
i++;
}
num.top++;
num.shu[num.top]=sum;
sum=0;
}
n=0;
if(op.top==-1||*s=='('||advence_com(op.fu[op.top])<advence_com(*s))
{
op.top++;
op.fu[op.top]=*s;
s++;
}
else
if(*s==')'&&op.fu[op.top]=='(')
{
op.top--;
s++;
}
else
if(advence_com(op.fu[op.top])>=advence_com(*s))
{
switch(op.fu[op.top])
{
case '+':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
c=b+a;
num.top++;
num.shu[num.top]=c;break;
case '-':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
c=b-a;
num.top++;
num.shu[num.top]=c;break;
case '*':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
c=b*a;
num.top++;
num.shu[num.top]=c;break;
case '/':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
if(a!=0)
{
c=b/a;
num.top++;
num.shu[num.top]=c;break;
}
else
{
printf("计算错误
");
break;
}
}
op.top--;
}
}
}
if(n>=2)
{
k=num.top;
i=k+1-n;
while(n--)
{
d=num.shu[i];
num.top--;
sum=sum*10+d;
i++;
}
num.top++;
num.shu[num.top]=sum;
sum=0;
}
n=0;
while(op.top!=-1)
{
switch(op.fu[op.top])
{
case '+':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
c=b+a;
num.top++;
num.shu[num.top]=c;break;
case '-':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
c=b-a;
num.top++;
num.shu[num.top]=c;break;
case '*':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
c=b*a;
num.top++;
num.shu[num.top]=c;break;
case '/':a=num.shu[num.top];
num.top--;
b=num.shu[num.top];
num.top--;
if(a!=0)
{
c=b/a;
num.top++;
num.shu[num.top]=c;break;
}
else
{
printf("计算错误
");
break;
}
}
op.top--;
}
return num.shu[0];
}
int main()
{
char s[maxsize];
int sum;
while(1)
{
printf("please input arithentic:
");
scanf("%s",s);
sum=yunsuan(s);
printf("=%d
",sum);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>