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