




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #include #include using namespace std; enum types DELIMITER = 1, VARIABLE, NUMBER; /定义枚举类型把DELIMITER初试化为后面的相应的是前面值+1 int error_type = -1;class calculator char *cal_p; / 定义一个指向表达式的指针char token80; / 存储表达式中的字符变量char tok_type; / 存储具体是什么类型void cal_p2(double void cal_p3(double void cal_p4(double void cal_p5(double void cal_p6(double void atom(double /把字符串转换为浮点数void get_token(); /取得下一个字符void error(int err); /显示打印出错信息int isdelim(char c); /判断是否为分隔符public: calculator();/类的构造函数double cal(char *exp); int error_type; / 存储错误信息; / 类构照函数的具体实现calculator:calculator() cal_p = NULL;/把exp_ptr的指针初始化为空error_type = -1; / 方法eval_exp的具体实现过程double calculator:cal(char *p) double result; cal_p = p;/把传递过来的参数p赋给cal_pget_token(); if(!*token) error(2); /输出没有任何表达式的错误信息return 0.0; cal_p2(result); if(*token)error(0); / last token must be null return result; / 两个变量字符是加或者减操作void calculator:cal_p2(double double temp; cal_p3(result); while(op = *token) = +|op = -) get_token(); cal_p3(temp); switch(op) case -: result = result - temp; break; case +: result = result + temp; break; / 两个变量是乘或者除操作或者是取余void calculator:cal_p3(double double temp; cal_p4(result); while(op = *token) = * |op = / | op = %) get_token(); cal_p4(temp); switch(op) case *: result = result * temp; break; case /:if (temp = 0)error(3);else result = result / temp; /除数为零的情况要考虑进去break; case %: result = (int) result % (int) temp; break; / 进行运算void calculator:cal_p4(double register int t; cal_p5(result); if(*token= ) get_token(); cal_p4(temp); ex = result; if(temp=0.0) result = 1.0; return; for(t=(int)temp-1; t0; -t) result = result * (double)ex; void calculator:cal_p5(double op = 0; if(tok_type = DELIMITER) get_token(); cal_p6(result); if(op=-) result = -result; / 进行有括号的算法void calculator:cal_p6(double cal_p2(result); if(*token != ) error(1); get_token(); else atom(result); / 取得数值void calculator:atom(double /atof()把字符串转换成浮点数double atof( const char *str );get_token(); return; default: error(0); / 输出出错信息. void calculator:error(int err) error_type = err;static char *e= “语法错误!请核对后重新输入“, “缺少一个括号!请核对后再输入“, “您没有输入任何表达式!“,“除数不能为!请核对后重新输入“; cout 若参数c为空格字符,则返回TRUE,否则返回NULL(0)if(strchr(“+-*/%=()“, *cal_p) /用strchr函数在字符串“+-*/%=()“中查找*exp_ptr指向的字符所在位置,判断返回值(非为真就执行)以便是否执行以下语句tok_type = DELIMITER;/把tok_type置为DELIMITER / advance to next char *temp+ = *cal_p+; else if(isalpha(*cal_p) /当参数c为大写英文字母(A-Z)时,返回非零值,否则返回零while(!isdelim(*cal_p) *temp+ = *cal_p+; /isdelim判断是否是分隔符,当*exp_ptr指向的字符不为分隔符时把值赋给*temp tok_type = VARIABLE;/把tok_type置为VARIABLE else if(isdigit(*cal_p) / isdigit判断*exp_ptr指向的字符是否为数字while(!isdelim(*cal_p) *temp+ = *cal_p+; /isdelim判断是否是分隔符,当*exp_ptr指向的字符不为分隔符时把值赋给*temptok_type = NUMBER; *temp = 0; /空格 / isdelim函数的具体实现,如果参数是一个分隔符则返回真int calculator:isdelim(char c) if(strchr(“ +-/*%=()“, c) /把“+-/*%=()09r定义非分隔符,/r回车return 1; return 0; /strchr(const char *s,char c),返回首次出现c的位置的指针,如果s中不存在c则返回NULL。int main() char calchar80; calculator ob; / 创建一个calculator类型的实例double result;for(;) cout “请输入你要计算的表达式: “endl; ci
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 探秘文学巨著
- 外贸英文函电课件Unit10
- 四川外国语大学《德语视听》2023-2024学年第一学期期末试卷
- 苏州工艺美术职业技术学院《园艺疗法》2023-2024学年第一学期期末试卷
- 江苏省建湖县2025届初三下学期期末仿真模拟生物试题含解析
- 上海市松江区市级名校2025年高三4月阶段性检测试题(模拟)数学试题试卷含解析
- 山东省泰安市新城实验中学2024-2025学年第五中考测评活动初三元月调考物理试题含解析
- 辽宁省大连市高新园区重点名校2025届初三第三次(4月)考试数学试题含解析
- 七台河职业学院《创新创业》2023-2024学年第二学期期末试卷
- 上海市黄埔区达标名校2024-2025学年初三毕业生3月学习质量检测试题语文试题试卷含解析
- 交通驾驶员安全培训课件
- 成语使用课件
- 基于PLC交流变频调速系统的设计 毕业设计(论文)
- 2023年版劳动实践河北科学技术出版社一年级下册全册教案
- 人教版三年级科学(下)第二单元综合测试卷种凤仙花(二)含答案
- 小儿手足口病课件
- 发展少数民族医药实施方案
- 五年级下册热带雨林探险之旅(优秀5篇)
- 教学课件Arduino零基础C语言编程-2
- 乳腺的影像诊断课件
- 说明书hid500系列变频调速器使用说明书s1.1(1)
评论
0/150
提交评论