作者根据数据结构第三版本。李云清 书上的思路和相关代码实现了。
#includedouble read(char f[],int *i)//为了能使用小数,这里使用的是double类型 { double x=0.0; int k=0; while(f[*i]>='0'&&f[*i]<='9')//处理整数部分 { x=x*10+(f[*i]-'0');//这里是为了把字符串类型改成double类型。*10就是为了凑double类型。如'9'-'0'=9 ,切记'10'-'0'!=10 (*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 eva(char f[]) { double obst[100]; int top=0; int k=0; int i=0; double x1,x2; while(f[i]!='#') { if(f[i]>='0'&&f[i]<='9') { obst[top]=read(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]; } int main() { int j=0; char g[100]; char x; scanf("%c",&x); while(x!='!') { g[j]=x; j++; scanf("%c",&x); } double s= eva(g); printf("%f",s); }



