📄 floatbck.c
字号:
#include<stdio.h>
#define maxsize 100
typedef struct
{
float data[maxsize];
int top;
}seqstack;
int empty(seqstack stack)
{
if(stack.top==-1) return 1;
else return 0;
}
int priority(char op)
{
if(op=='+'||op=='-') return 1;
else if(op=='*'||op=='/') return 2;
else if(op==')') return 3;
else if(op=='(') return 0;
}
seqstack push(seqstack stack,float value)
{
if(stack.top==maxsize-1) printf("Stack is Full\n");
else stack.data[++stack.top]=value;
return stack;
}
char GetTop(seqstack stack)
{
if(stack.top==-1) return 0;
else return(stack.data[stack.top]);
}
float count(float *backorder)
{
seqstack S;
float a,b;
int i=0;
S.top=-1;
while(backorder[i]!=9)
{
if(backorder[i]>=10) S=push(S,backorder[i++]);
else
{
b=S.data[S.top--]-10;
a=S.data[S.top--]-10;
if(backorder[i]==3) S=push(S,a+b+10);
else if(backorder[i]==5) S=push(S,a-b+10);
else if(backorder[i]==2) S=push(S,a*b+10);
else if(backorder[i]==7) S=push(S,a/b+10);
i++;
}
}
return S.data[S.top--]-10;
}
main()
{
seqstack S;
int i=0,j=0,k,k_end;
char c[100];
float backorder[100],add1,add2;
S.top=-1;
printf("Input the string:\n");
gets(c);
while(c[i]!='=')
{
if(c[i]>='0'&&c[i]<='9')
{
k=i+1;
add1=c[i]-48;
add2=0;
while(c[k]>='0'&&c[k]<='9') add1=add1*10+c[k++]-48;
i=k;
if(c[k]=='.')
{
k_end=++k;
while(c[k_end]>='0'&&c[k_end]<='9') k_end++;
i=k_end;
add2=(float)(c[--k_end]-48)/10;
while(k_end>k) add2=add2/10+(float)(c[--k_end]-48)/10;
}
backorder[j++]=add1+add2+10;
}
else
{
if(empty(S)||c[i]=='(') S=push(S,c[i++]);
else if(c[i]==')')
{
while(GetTop(S)!='(') backorder[j++]=S.data[S.top--]-40;
S.top--;
i++;
}
else
{
if(priority(c[i])>=priority(GetTop(S))||empty(S)) S=push(S,c[i++]);
else
{
while(priority(c[i])<priority(GetTop(S))&&!empty(S)) backorder[j++]=S.data[S.top--]-40;
S=push(S,c[i++]);
}
}
}
}
while(!empty(S)) backorder[j++]=S.data[S.top--]-40;
backorder[j]=9;
// for(i=0;backorder[i]!=9;i++)
// if(backorder[i]>=10) printf("%f ",backorder[i]-10);
// else printf("%c ",(int)backorder[i]+40);
printf("计算的结果为:%f\n",count(backorder));
// getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -