C++语言编写。。 #include #include #include using namespace std; const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000; typedef struct node//为了处理符号而建立的链表(如: 1+(-2)) { char data; node *next; }node; typedef struct stack_num//存储 数 的栈 { double *top; double *base; }stack_num; typedef struct stack_char//存储 运算符号 的栈 { char *top; char *base; }stack_char; stack_num S_num;//定义 stack_char S_char;//定义 char fu[18] = {'\n', ')', '+', '-', '*', '/', '%', '^', 'Q', 'L', 'C', 'S', 'T', 'c', 's', 't', '('}; int compare[1000];//表现出各运算符号的优先级 double shu[1000];//存储 "数" 的数组 double dai_result;//运算的结果,是为了处理 M 运算(简介函数里有 M 的定义) int biao = 0;//和 dia_result 一样,为了处理 M 运算 char line[SIZE];//输入的所要计算的表达式 void init()//初始化 { compare[fu[0]] = -2;//用数字的大小表现出符号的优先级 compare[fu[1]] = -1; compare[fu[2]] = 2; compare[fu[3]] = 2; compare[fu[4]] = 4; compare[fu[5]] = 4; compare[fu[6]] = 4; compare[fu[7]] = 5; for(int i = 8; i <= 15; i++) compare[fu[i]] = 6; compare[fu[16]] = 7; S_num.base = (double*)malloc(sizeof(double)*SIZE);//为栈开辟空间 S_char.base = (char*)malloc(sizeof(char)*SIZE);//同上 S_num.top = S_num.base; S_char.top = S_char.base; } void push_num(double n)//数字进栈 { * ++S_num.top = n; } void push_char(char c)//运算符号进栈 { * ++S_char.top = c; } double pop_num()//数字出栈 { double m = *S_num.top; S_num.top--; return m; } char pop_char()//运算符号出栈 { char cc = *S_char.top; S_char.top--; return cc; } char get_top_char()//得到运算符号的栈中最顶端的运算符号 { return *S_char.top; } double operate(double y, char c, double x)//对两个数计算(含是双目运算符:如 *, / 等等) { double r; if(c == '-') r = x - y; else if(c ==...