1、stack_num S_num;/定义stack_char S_char;char fu18 = n, )+-*/%, QLCSTcst(;int compare1000;/表现出各运算符号的优先级double shu1000;/存储 数 的数组double dai_result;/运算的结果,是为了处理 M 运算(简介函数里有M的定义)int biao = 0;/和dia_result 一样,为了处理 M 运算char lineSIZE;/输入的所要计算的表达式void init()/初始化 comparefu0 = -2;/用数字的大小表现出符号的优先级 comparefu1 = -1;
2、comparefu2 = 2; comparefu3 = 2; comparefu4 = 4; comparefu5 = 4; comparefu6 = 4; comparefu7 = 5; for(int i = 8; i = 15; i+) comparefui = 6; comparefu16 = 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
3、= 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;
4、double operate(double y, char c, double x)/对两个数计算(含是双目运算符:如 *, / 等等) double r; if(c = ) r = x - y; else if(c = r = x + y; & y != 0) r = x / y; r = x * y; r = 1; for(int i = 1;= y; r *= x; int r0 = (int)x % (int)y; r = double(r0); return r;double operate_one(double one, char cc)/对一个数运算(含单目运算符:如log(L)
5、, sin(S) 等等) if(cc = r = sqrt(one); else if(cc = r = cos(one); r = sin(one); r = tan(one); r = acos(one); r = asin(one); r = atan(one);double operate_L(double a, double b, char dian)/求对数的值 double r = log(b) / log(a);double compute()/对整个表达式的计算 char c;/表示运算符号 int p = 0;/用于shu+p, 先初始化 int i, j; init();
6、/进行初始化 push_char(); linestrlen(line) = ; linestrlen(line)+1 = 0 if(biao) push_num(dai_result);/把运算的结果先进栈, 在这个结果的基础上继续进行运算 biao = 0; for(i = 0; linei != )/把表达式中的数字字符串转化成可计算的数字 int flag = 0; int flag1 = 1;/标记是否是运算符号 / int flag2 = 1;/标记是否出现_ double h = 0; int ge;/位数 int biao_dian = 0;/是否是小数的类型 while(1)
7、 flag1 = 1; for(j = 0; j = 16; j+) if(linei = fuj) flag1 = 0; break; if(linei = break;. i+; ge = 0; biao_dian = 1;P shu+p = pi;E shu+p = e; if(flag1) h = h * 10 + (linei - 0 flag = 1; if(biao_dian) ge+; else if(flag) if(biao_dian) int r = 1; for(int k = 1; k push_num(m); i+; else if(m = -1) c = else if(m = -2) else if(m = -3) else if(m = -4) else if(m = -5) else if(m = -6) else if(m = -7) else if(m = -8) else if(m = -9) else if(m = -10) else if(m = -11) c =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1