欢迎来到天天文库
浏览记录
ID:22757017
大小:69.01 KB
页数:6页
时间:2018-10-31
《功能完备c++计算器(2)》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、#include#include#include#includeusingnamespacestd;enumtypes{DELIMITER=1,VARIABLE,NUMBER};//定义枚举类型把DELIMITER初试化为后面的相应的是前面值+1interror_type=-1;classcalculator{char*cal_p;//定义一个指向表达式的指针chartoken[80];//存储表达式中的字符变量chartok_type;//存储具体是什么类型voidcal_p2(double&result);voidc
2、al_p3(double&result);voidcal_p4(double&result);voidcal_p5(double&result);voidcal_p6(double&result);voidatom(double&result);//把字符串转换为浮点数voidget_token();//取得下一个字符voiderror(interr);//显示打印出错信息intisdelim(charc);//判断是否为分隔符public:calculator();//类的构造函数doublecal(char*exp);interror_type;//存储错误信息};//类构照函数的具体实
3、现calculator::calculator(){cal_p=NULL;//把exp_ptr的指针初始化为空error_type=-1;}//方法eval_exp的具体实现过程doublecalculator::cal(char*p){doubleresult;cal_p=p;//把传递过来的参数p赋给cal_pget_token();if(!*token){error(2);//输出没有任何表达式的错误信息return0.0;}cal_p2(result);if(*token){error(0);//lasttokenmustbenull}returnresult;}//两个变量字符是加
4、或者减操作voidcalculator::cal_p2(double&result){registercharop;doubletemp;cal_p3(result);while((op=*token)=='+'
5、
6、op=='-'){get_token();cal_p3(temp);switch(op){case'-':result=result-temp;break;case'+':result=result+temp;break;}}}//两个变量是乘或者除操作或者是取余voidcalculator::cal_p3(double&result){registercharop;double
7、temp;cal_p4(result);while((op=*token)=='*'
8、
9、op=='/'
10、
11、op=='%'){get_token();cal_p4(temp);switch(op){case'*':result=result*temp;break;case'/':if(temp==0)error(3);elseresult=result/temp;//除数为零的情况要考虑进去break;case'%':result=(int)result%(int)temp;break;}}}//进行^运算voidcalculator::cal_p4(double&result){double
12、temp,ex;registerintt;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;t>0;--t)result=result*(double)ex;}}voidcalculator::cal_p5(double&result){registercharop;op=0;if((tok_type==DELIMITER)&&*token=='+'
13、
14、*token=='-'){op=*token;get_to
15、ken();}cal_p6(result);if(op=='-')result=-result;}//进行有括号的算法voidcalculator::cal_p6(double&result){if((*token=='(')){get_token();cal_p2(result);if(*token!=')'){error(1);}get_token();}elseatom(result);}//取得数值v
此文档下载收益归作者所有