功能完备c++计算器11_第1页
功能完备c++计算器11_第2页
功能完备c++计算器11_第3页
功能完备c++计算器11_第4页
功能完备c++计算器11_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论