版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+语言编写。 #in clude #in clude #in clude using n amespace std; const double pi = 3.14159265; const double e = 2.718281828459; const int SIZE = 1000; typedef struct node/为了处理符号而建立的链表(如:1+(-2) char data; node *n ext; n ode; 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, ), +, -, *, /, %, 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_n um.base = (double*)malloc(sizeof(do
4、uble)*SIZE); 为栈开辟空间 S_char.base = (char*)malloc(sizeof(char)*SIZE); 同上 S_nu m.top = S_nu m.base; S_char.top = S_char.base; void push_num(double n) 数字进栈 * +S _nu m.top = n; void push_char(char c)/ 运算符号进栈 * +S_char.top = c; double pop_ num() 数字出栈 double m = *S_nu m.top; S_nu m.top-; return m; char pop
5、_char()运算符号出栈 char cc = *S_char.top; S_char.top-; return cc; char get_top_char()得到运算符号的栈中最顶端的运算符号 retur n *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 = / else if(c = *) r = x * y; else if(c = A) r = 1; for(i n
6、t i = 1; i = y; i+) r *= x; else if(c = %) int r0 = (in t)x % (in t)y; r = double(r0); return r; double operate_one(double one, char cc)/对一个数运算(含单目运算符:如 :如*, /等等) log(L), sin(S)等等) double r; if(cc = Q) r = sqrt( on e); else if(cc = C) r = cos( on e); else if(cc = S) r = sin(on e); else if(cc = T) r
7、= tan(on e); else if(cc = c) r = acos( on e); else if(cc = s) r = asin(on e); else if(cc = t) r = ata n(on e); 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();/进行初始
8、化 push_char(n); lin estrle n(l in e) = n: lin estrle n(li ne)+1 = 0; if(biao) push_ num(dai_result);把运算的结果先进栈,在这个结果的基础上继续进行运算 biao = 0; for(i = 0; lin ei != 0;)/把表达式中的数字字符串转化成可计算的数字 int flag = 0; int flag1 = 1;/标记是否是运算符号 / int flag2 = 1;/ 标记是否出现_; double h = 0; in t ge;/ 位数 int biao_dian = 0;/是否是小数的
9、类型 while(1) flag1 = 1; for(j = 0; j = 16; j+) if(li nei = fuj) flag1 = 0; break; if(li nei = _) break; if(li nei=.) i+; ge = 0; biao_dia n = 1; if(li nei = P) shu+p = pi; i+; break; if(li nei = E) shu+p = e; i+; break; if(flag1) h = h * 10 + (li nei - 0); flag = 1; i+; if(biao_dia n) ge+; else break
10、; if(flag) if(biao_dia n) int r = 1; for(i nt k = 1; k = 0) push_ num (m); i+; else if(m =- 1) c = +; else if(m =-2) c = 1 1. else if(m =-3) c = 1*1. 5 else if(m =-4) c = /; else if(m =-5) c = %; else if(m =-6) c = A; 5 else if(m =-7) c = Q; else if(m =-8) c = L; else if(m =-9) c = C; else if(m =-10
11、) 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 char dia n = pop_char(); push_ num (operate. one(one, dia n); else if(c
12、h = L) double one_L = pop_ num(); double two_L = pop_ num(); char dia n = pop_char(); push_ num (operate_L(two_L, on e_L, dia n); else double x = pop _num(); double y = pop _num(); char dia n = pop_char(); if(dian = / else return 1; void output(double result)/ 打出结果 printf(所得结果是:”); coutresulte ndl;
13、void check()检查表达式是否合法 void in troduce(); char cc;/决定计算器按哪种功能进行计算 double result;/ 结果 void input();/ 定义 if( check_kuohao() output(result); cout输入一个字符M或D或F,决定是否继续: cc) if(cc = M) system(cls); in troduce(); printf(您上次所得结果为:”); e ndl; coutresulte ndl; cout在上次计算结果的基础上,请继续输入想计算的表达式 dai_result = result; bia
14、o = 1; in put();/输入表达式 break; else if(cc = D) system(cls); in troduce(); cout计算器已清零,请输入您所要计算的表达式endl; in put();输入表达式 break; else if(cc = F) system(cls); cout计算器关闭,谢谢使用!endl; break; else cout所输入字符无效,请输入一个字符M或D或F!endl; con ti nue; else/不合法,分两种不合法 if(check_kuohao() = 0 input();输入表达式 else cout您所输入的表达式不合
15、法,请重新输入: next = NULL; int i; for(i = 0; lin ei != 0; i+) 建立链表 p = new node; p-data = lin ei; p-next = head-n ext; head-next = p; head = p; / delete p; q = (no de*)malloc(sizeof( no de); head = root; if(root- next-data = + | root- next-data = -)/ 处理第一个字符 p = new no de; p-data = O; p-next = head-n ext
16、; head-next = p; if(root- n ext != NULL) for(q = root-n ext; q; q = q-n ext) if(q-data = ( p-data = O; p-next = q-n ext; q-next = p; / delete q; pl = new no de; int qi = -1; for(p1 = root-n ext; p1; pl = p1- n ext) lin e+qi = p1-data; lin e+qi = 0; void input() 输入 cin li ne; if(biao = 0) tackle_fuha
17、o(); 处理负号 check();检查表达式是否合法 void introduce()/对计算器的符号功能的简要介绍 cout计算器简要介绍 e ndl; T(ta n) a(arccos) c(arcs in) e ndl; coutC(cos) S(si n) cout7 8 9 / on t(arcta n) e ndl; cout4 5 6 * % L(log)e ndl; cout1 2 3 - M(M+)Q(sqrt) e ndl; cout0 + A(乘方)F(off) En ter(=) e ndl; cout对于对数输入L2_5表示以2为底5的对数endl; coutM(在前面结果的基础上继续计算,女口:上次结果为10,现输入+10.5*2)endl; coutD(清零并继续输入)endl; coutF(计算机关闭)endl; cout输入P就代表输入圆周率,输入E代表输入自然对数endlendl; void prin t() system(color 2); cout欢迎使用本计算器e
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建师范大学《福建地理》2022-2023学年第一学期期末试卷
- 2024年四川省安全员A证考试题库(含答案)
- 公司安全生产大培训登记表
- 2024届锡林郭勒市重点中学高三下学期4月调研数学试题
- 攻坚克难创效益多措并举保履约
- 四年级上册语文课件教学
- 2024年烟台考客运资格证
- 2024年茂名客运从业资格考试题库
- 2024年塔城道路客运驾驶员从业资格证考试题库
- 2025届上海曹杨二中数学高三上期末联考模拟试题含解析
- 期中测试卷-2024-2025学年统编版语文一年级上册
- 人教版一年级数学上册《第一、二单元测试卷》(附答案)
- 上市公司无形资产管理办法
- 人教版(2024新版)八年级上册物理第二章2.5《跨学科实践:制作隔音房间模型》教学设计
- 第10课 读依依往事 解依依情思《往事依依》教学设计-七年级语文上册同步高效课堂(统编版)
- 幼儿园中班数学活动《营救汪汪队》
- 2024年指标租赁协议模板(三篇)
- 2024年贵州黔东南州直事业单位遴选工作人员42人历年高频考题难、易错点模拟试题(共500题)附带答案详解
- 室外箱式变电站基础施工方案
- 2024年全国职业院校技能大赛高职组(社区服务实务赛项)考试题库(含答案)
- Unit 4 Weekend Activities Part B(教学设计)-2024-2025学年闽教版英语五年级上册
评论
0/150
提交评论