教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 外语考试 >

C++编程简单的计算器

来源:网络收集 时间:2026-10-06
导读: //输入表达式要完整,例如:输入“2+8=”,然后再按回车键 //本程序只可计算两个多项式之间的四则运算 //输入表达式要完整,例如:输入“2+8=”,然后再按回车键 //本程序只可计算两个多项式之间的四则运算 //date;2012-7 #include iostream.h #include strin

//输入表达式要完整,例如:输入“2+8=”,然后再按回车键 //本程序只可计算两个多项式之间的四则运算

//输入表达式要完整,例如:输入“2+8=”,然后再按回车键 //本程序只可计算两个多项式之间的四则运算

//date;2012-7

#include <iostream.h>

#include <string>

using namespace std;

enum Token_value{

NAME, NUMBER, END,

PLUS = '+', MINUS = '-',MUL = '*',DIV = '/',

PRINT = ';',ASSIGN = '=',LP = '(',RP = ')'

};

Token_value curr_tok = PRINT;

// fuction list//////////////////////////////////////

double expr(bool get);

double term(bool get);

double prim(bool get);

Token_value get_token();

double error(const string &s);

////////////////////////////////////////////////////////// double expr(bool get) //plus and minus

{ double left = term(get);

for(;;)

{ switch(curr_tok){

case PLUS:

left+=term(true);

break;

case MINUS:

left-=term(true);

break;

default:

return left;

}

}

}

double term(bool get) // multiply and pide

{ double left = prim(get);

for(;;)

{ switch(curr_tok){

case MUL:

left*=prim(true);

break;

case DIV:

if(double d = prim(true)){ // no zero!!

//输入表达式要完整,例如:输入“2+8=”,然后再按回车键 //本程序只可计算两个多项式之间的四则运算

break;

}

return error("pide by zero!!\n");

default :

return left;

}

}

}

double number_value;

double string_value;

double prim(bool get)

{ if(get) get_token();

switch(curr_tok){

case NUMBER:

{ double v = number_value;

get_token();

return v;

}

case NAME:

{ double v;

//double &v = table[string_value];

//this table reserved the name mapped with variable //now we don't use it!

if(get_token()==ASSIGN)

v = expr(true);

return v;

}

case MINUS: // negative

{ return -prim(true);

}

case LP:

{ double e = expr(true);

if(curr_tok!=RP)return error(")expected"); get_token(); // absorb )

return e;

}

default:

return error("primary expected"); // no primary }

}

Token_value get_token()

{ char ch =0;

cin>>ch;

//输入表达式要完整,例如:输入“2+8=”,然后再按回车键 //本程序只可计算两个多项式之间的四则运算

case 0:

return curr_tok=END; //return and assignment case ';':

case '*':

case '/':

case '+':

case '-':

case '(':

case ')':

case '=':

return curr_tok = Token_value(ch);

case '0':case '1':case '2':case '3':case '4': case '5':case '6':case '7':case '8':case '9': case '.':

cin.putback(ch);

cin>>number_value;

return curr_tok = NUMBER;

default:

if(isalpha(ch))

{ cin.putback(ch);

cin>>string_value;

return curr_tok = NAME;

}

error("bad token!");

return curr_tok = PRINT;

}

}

int no_of_error;

double error(const string &s)

{ no_of_error++;

cout<<"error:"<<s.data()<<"\n";

return 1;

}

int main()

{ while(cin)

{ get_token();

if(curr_tok==END)break;

if(curr_tok==PRINT) continue;

cout<<expr(false)<<'\n';

}

return no_of_error;

}

…… 此处隐藏:491字,全部文档内容请下载后查看。喜欢就下载吧 ……
C++编程简单的计算器.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1691503.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150份
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)