//可以使用四则运算、括号和math.h中的一些函数。
//不能包含空格 3(4)会算成4,要写成3*(4)
//使用了 math.h 编译时加上 -lm 参数
//运用了后缀表达式的相关知识
//例 1+sqrt(4)*3 =7.000000
//例 2*(2+3) =10.000000
#include<math.h>
#include<stdio.h>
//compute函数使用
#define FNX0 3//常数数组
#define FNX1 8//指向有一个参数的函数的指针的数组
#define FNX2 1//指向有二个参数的函数的指针的数组
//xin为表达式字符串,length为长度,错误时 *error为零。
double compute(char *xin,int length,int *error);
int main(){
int error=1;
char qus[200]={0};
for(;;){
scanf("%s",qus);
printf("=%lf \n",compute(qus,-1,&error));
fflush(stdout);
if(error==0) printf("error\n");
error=1;
}
return 0;
}
char *fn0[FNX0]={"pi","e","m"};
double fx0[FNX0]={3.14159265358979323846,2.71828182845904523536,0};
char *fn1[FNX1]={"acos","asin","atan","cos","sin","tan","ln","sqrt"};
double (*fx1[FNX1])(double)={acos,asin,atan,cos,sin,tan,log,sqrt};
char *fn2[FNX2]={"pow"};
double (*fx2[FNX2])(double,double)={pow};
//计算算式字符串的值
double compute(char *xin,int length,int *error){//算式字符串,字符串长度,错误信息
signed char o[3]={0};//运算符栈 +-*/ 为1234 0为空
signed char s[3]={1,1,1};//数字栈符号
short Now0=0;//运算符下标
short Now1=0;//数