自己写的程序有错误找不出
#include<stdio.h>#include<conio.h>
#include<math.h>
int is_operation(char op)/*判断操作符*/
{
switch(op)
{case '+':
case '-':
case '*':
case '/':return 1;
default:return 0;
}
}
int priority(char op) /*求优先级*/
{
switch(op)
{
case '=':return -1;
case '(':return 0;
case '+':
case '-':return 1;
case '*':
case '/':return 2;
default:return -1;
}
}
void postfix(char e[],char f[])/*中缀转后缀*/
{
int i=0,j=0;
char opst[100];
int top,t;
top=0;
opst[top]='=';top++;
while(e[i]!='=')
{
if ((e[i]>='0'&&e[i]<='9')||e[i]=='.')
f[j++]=e[i];
else if (e[i]=='(')
{opst[top]=e[i];top++;}
else if (e[i]==')')
{t=top-1;
while (opst[t]!='(') {f[j++]=opst[--top];t=top-1;}
top--;
}
else if (is_operation(e[i]))
{f[j++]=' ';
while (priority(opst[top-1])>=priority(e[i]))
f[j++]=opst[--top];
opst[top]=e[i];top++;
}
i++;
}while (top) f[j++]=opst[--top];
}
double readnumber(char f[],int *i)/*字符转变成相应数*/
{
double x=0.0;
int k=0;
while(f[*i]>='0'&&f[*i]<='9')
{ x=x*10+(f[*i]-'0');
(*i)++;
}
if (f[*i]=='.')
{ (*i)++;
while (f[*i]>='0'&&f[*i]<='9')
{ x=x*10+(f[*i]-'0');
(*i)++;
k++;
}
}
while (k!=0)
{ x=x/10.0;
k=k-1;
}
return(x);
}
double evalpost(char f[])/*后缀求值*/
{
double obst[100];
int top=0;
int i=0;
double x1,x2;
while (f[i]!='=')
{ if (f[i]>='0'&&f[i]<='9')
{obst[top]=readnumber(f,&i);top++;}
else if (f[i]==' ') i++;
else if (f[i]=='+')
{ x2=obst[--top];
x1=obst[--top];
obst[top]=x1+x2;top++;
i++;
}
else if (f[i]=='-')
{ x2=obst[--top];
x1=obst[--top];
obst[top]=x1-x2;top++;
i++;
}
else if (f[i]=='*')
{ x2=obst[--top];
x1=obst[--top];
obst[top]=x1*x2;top++;
i++;
}
else if (f[i]=='/')
{ x2=obst[--top];
x1=obst[--top];
obst[top]=x1/x2;top++;
i++;
}
}
return obst[0];
}
void fuhao(char a[])/*处理负号*/
{
int i=0,j,k,z,n=0;
while(a[i]!='=')
{i++;}
while(a[n]!='=')
{
if (a[n]=='(' && a[n+1]=='-')
{ z=n+2;
while(a[z]>='0'&&a[z]<='9')
{z++;}
for(k=i;z<=k;k--)
{
a[k+3]=a[k];
a[z]=')';
}
for(k=z;k>n;k--)
{
a[k+2]=a[k];
}
a[n+1]='(';
a[n+2]='0';
}
n++;
}
if(a[0]=='-')
{ z=1;
while(a[z]>='0'&&a[z]<='9')
{z++;}
for(j=i;j>=z;j--)
{
a[j+3]=a[j];
}
a[j+3]=')';
for(;j>=0;j--)
{a[j+2]=a[j];}
a[1]='0';
a[0]='(';
}
}
void main()
{ char e[100];
char f[100];
int i=0;
double s;
printf("*********************欢迎使用计算器********************\n");
printf("请输入需计算的(以“=”结尾):\n");
scanf("%c",&e[i]);
while(e[i]!='=')
{ i++;
scanf("%c",&e[i]);
}
fuhao(e);
postfix(e,f);
s=evalpost(f);
printf("%f",s);
getch();
}