1、/ 定义stack_char S_char;char fu18 = n, )+-*, T,%A,QLCSTcst(;int compare1000;/ 表现出各运算符号的优先级double shu1000;/ 存储 数 的数组double dai_result;运算的结果,是为了处理 M运算(简介函数里有 M的定义)int biao = 0;/ 和 dia_result 一样,为了处理 M 运算char lineSIZE;/ 输入的所要计算的表达式void init()/ 初始化comparefu0 = -2;/ 用数字的大小表现出符号的优先级comparefu1 = -1; comparef
2、u2 = 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 = S_char.ba
3、se;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 ope
4、rate(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; i+)r *= x;int r0 = (int)x % (int)y;r = double(r0);return r;double operate_one(double one, char cc)对一个数运算(含单目运算符:如 log(L), sin(S)等等
5、) 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();/ 进行初始化push_char();
6、linestrlen(line) = ; linestrlen(line)+1 = 0if(biao)push_num(dai_result);把运算的结果先进栈,在这个结果的基础上继续进行运算 biao = 0;for(i = 0; linei != )/ 把表达式中的数字字符串转化成可计算的数字int flag = 0;int flag1 = 1;/ 标记是否是运算符号/ int flag2 = 1;/ 标记是否出现 _double h = 0;in t ge;/ 位数int biao_dian = 0;/ 是否是小数的类型while(1)flag1 = 1;for(j = 0; j =
7、16; j+)if(linei = fuj)flag1 = 0;break;if(linei = break; if(linei = . i+; ge = 0; biao_dian = 1;P shu+p = pi; i+; break;E shu+p = e; if(flag1) h = h * 10 + (linei - 0 flag = 1;if(biao_dian) ge+; else break; if(flag) if(biao_dian) int r = 1;for(int k = 1; k push_num(m); elseif(m = -1)c =else if(m= -2)1J= -3)1*1.= -4)= -5)= -6);j= -7)= -8)= -9)= -10)= -11)= -12)= -13)= -14)= -15)= -16)= -17)char ch = get_top_char();/ 得到最顶端运算符号 if(comparech = comparec & ch !if(ch = | ch = | ch = | ch =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1