1、大学计算机C+语言计算器源代码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
2、struct stack_char/ 存储 运算符号 的栈char *top;char *base;stack_char;stack_num S_num;/ 定义stack_char S_char;/ 定义char fu18 = n, ), +, -, *, T,%, A,Q, L, C, S, T, c, s, t, (;int compare1000;/ 表现出各运算符号的优先级double shu1000;/ 存储 数 的数组double dai_result;运算的结果,是为了处理 M运算(简介函数里有 M的定义)int biao = 0;/ 和 dia_result 一样,为了处理
3、M 运算char lineSIZE;/ 输入的所要计算的表达式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)
4、;/ 为栈开辟空间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 =
5、 *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 = +)r = x + y;else if(c = / & y != 0)r = x / y;else if(c = *)r = x * y;else if(c = A)r = 1;f
6、or(int i = 1; i = 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; linest
8、rlen(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;in t ge;/ 位数int biao_dian = 0;/ 是否是小数的类型while(1)flag1 = 1;for(j = 0; j = 16; j+)if(linei = fuj)f
9、lag1 = 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); els
10、eif(m = -1)c =+;else if(m= -2)c =1Jelse if(m= -3)c =1*1.Jelse if(m= -4)c =/;else if(m= -5)c =%;else if(m= -6)c =A;jelse 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;else if(m= -12)c =c;else if(m= -13)c =s;else if(m= -14)c =t;else if(m= -15)c =(;else if(m= -16)c =);else if(m= -17)c =n;char ch = get_top_char();/ 得到最顶端运算符号 if(comparech = comparec & ch != ( & ch != n)if(ch = Q | ch = C | ch = S| ch = T| ch = c | ch = s | ch =
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1