




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验1简易计算器:第一步:程序基本架构:#include <iostream>#include <fstream>#include <string>using namespace std;#define maxlength 1024bool fail = false;数据结构:操作数栈struct stack_cchar datamaxlength;int top; od;操作符栈struct stack_ddouble datamaxlengthl;int top; op;int main()ifstream infile;ofstream outfile
2、;string expr;infile.open("infile.txtn);outfile.open(ncalc.logn);if (infile.fail()outfile « ”无法读取表达式! ” « endl;elsewhile (!infile.eof()infile » expr;calc(expr);outfile « endl « endl;infile.close(); outfile.close();return 0;第二步:对calc (expr)进行精细主程序void calc(string s) bool
3、b = check(s); if(b=false)cout « "表达式不合法"« endl; else mycalc(s);计算void mycalc(string s)表达式合法性检查bool check(string s)第三步:对 check(),mycalc()函数精细bool check(string s) if(bool check _bars(s) return false;if(bool check_all_letters(s) return false;return true;bool check _bars(string s)boo
4、l check_all_letters(string s) void mycalc(string expr) op.top = od.top = 0;int now = 0;double tmp = 0, weg;bool point = false;fail = false;while (now < expr.length()if (now = 0)od.data+od.top =开始读入表达式时,将压入符号栈中switch (exprnow)/m读入的表达式中的字符进彳亍分枝操作 一case : opl(exprnow);/遇到时,进行 opl 操作break;case *('
5、;: op2(exprnow); /遇到'('时,进行 op2 操作break;case : op3(exprfnow); 遇到'+'吋,进彳亍 op3 操作break;case : op4(exprnow); 遇至时,进行 op4 操作break;case' 1 case 2case 3case 4case 5case 6case 7case !8'case 9op5(exprnow); 遇到数字时,进彳亍op5操作 break;case y:op6(exprnow); 遇到了吋,进彳亍op6操作 break;case 7:point = tr
6、ue;/遇到t吋开启小数模式 weg = 0.1;break;now+;if (fail)break;void opl(exprnow)void op2(exprnow)void op3(exprnow)void op4(exprnow)void op5(exprnow)void op6(exprnow)第四步:对 check_bars(),check_all_letters(),opl(),op2(),op3(),op4(),op5(),op6()函 数精细bool check_alletters(string e)for (int i = 0; i < e.length(); i+)
7、操作数if (ei >= 48) && (ei <= 57) continue;if (efi = t) continue;运算符if (ei = 4)continue; if (ei = '-*) continue;讦(efi ='*') continue;if (ei = 7)continue;界限符讦(ei = continue; if (ei = *(*) continue;if (ei = 7) continue;return false; return true;bool check_bars(string e)int r=0,1
8、=0;for (int i = 0; i < eength(); i+) 讦(ei = *)') r+4-;else if (efi = '(') 1+;if (r != 1)outfilevv”发现不匹配的括号,请检查您的表达式:” vvevvendl; outfilevv” 中止计算!” « endl;return false;return true;void opl(exprnow)if ( now = expr.length。-1)while (od.dataod.top !=if (od.top <= 0) ii (op.top <
9、= 0) fail_op_od(); op.dataop.top-l=mycalc(op.dataop.top-l,od.dataod.top, op.dataop.top);od.top-;op.top-;if (fail) break;讦(op.top != 1) ii (od.top != 1) fail_op_od();讦(fail) break;expr.erase(exp r.length()-l, 1);outfile « expr « "=outfile « op.dataop.top « endl;else fail = tr
10、ue;void op2(exprnow)od.data+od.top = exprnow;void op3(exprnow)if (getpid(od.dataod.top) >=getpid(exprnow) && (getpid(od.dataod.top) <3)讦(od.top <= 0) ii (op.top <= 0) fail_op_od();op.dataop.top-ll = mycalc(op.dataf op.top-11, od.datafod.top, op.dataop.top);op.top;od.top;讦(fail) b
11、reak;od.data+od.top = exprnow;void op4(exprnow)od.data+od.top = exprnow;void op5(exprnow)if (!point)tmp = tmp*10 + (exprnow-48);tmp += weg * (exprnow-48);weg /= 10;if (exprnow+l = t)now+;continue;if (exprnow+l < 48) ii (exprnow+l > 57)point = false;op.data+op.top = tmp;tmp = 0;if (getpid(od.da
12、taod.top)>getpid(od.dataod. top-1 )&&(od.dataod.top != '(*)if (od.top <= 0) ii (op.top <= 0) fail_op_od();op.datafop.top 1= mycalc(op.dataop.topl,od.dataf od.top, op.dataop.top);op.top;od.top-;if (fail) break;void op6(exprfnow)while (od.dataod.top) != '(*)讦(od.top <= 0) i
13、i (op.top <= 0) fail_op_od();op.dataop.top-l = mycalc(op.dataop.top-1, od.dataod.top,op.datafop.top);op.top;od.top;if (fail) break;if (od.datafod.top = *(') od.top;else fail_op_od();第四步:对 void fail_op_od(), int getpid(char tmp)进彳亍精细 void fail_op_od()if (fail) return;outfile « ”发现无效的运算操作,可能您的操作数与操作符不相匹配” vv endl;outfile « "屮止计算! “vvendl;fail = true; int getpid(char tmp)if (tmp = '+') return 1; if (tmp = '-*) return 1;if (tmp = '*) return 2; if (tmp = 7') return 2;if (tmp = '(') return 3;return 100;实
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽合肥长虹美菱生活电器有限公司招聘技术支持岗位模拟试卷附答案详解(模拟题)
- 2025年河南省职工医院-国际口腔中心招聘18人模拟试卷及答案详解(各地真题)
- 2025广东惠州市惠城区招聘公办义务教育学校硕博教育人才30人(第二批)模拟试卷及答案详解(必刷)
- 张家口市中医院输血检验师资格认证
- 2025内蒙古通辽经济技术开发区事业单位急需紧缺人才引进26人模拟试卷及一套参考答案详解
- 2025人民医院术后快速康复护理考核
- 秦皇岛市人民医院腹部超声医师资格认证
- 2025湖南邵阳市湘中幼儿师范高等专科学校招聘24人模拟试卷及答案详解(有一套)
- 上海市中医院皮肤软组织感染诊疗考核
- 天津市人民医院凝血功能评估考核
- 急性重症胰腺炎个案护理
- 生物医药强国战略研究
- 舒适护理:床上擦浴
- 浙江金华市中心医院医疗集团(医学中心)招聘工作人员(2022年第一批)笔试备考题库及答案解析
- GB/T 23985-2009色漆和清漆挥发性有机化合物(VOC)含量的测定差值法
- 卓乐对刀仪说明书
- 拆房协议书模板
- 《斐波那契数列》课件
- 带式电磁除铁器检修作业指导书
- 生命体征测量操作流程及评分标准
- 部编版道德与法治小学四年级上册同步配套教案(全册)
评论
0/150
提交评论