聪明文档网

聪明文档网

最新最全的文档下载
当前位置: 首页> c++设计一个简单计算器

c++设计一个简单计算器

时间:2020-02-14 03:50:49    下载该word文档

执行代码 c++

#include

#include

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 divide

{ double left = prim(get);

for(;;)

{ switch(curr_tok){

case MUL:

left*=prim(true);

break;

case DIV:

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

left/= d;

break;

}

return error("divide 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;

switch(ch){

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:"<

return 1;

}

int main()

{ while(cin)

{ get_token();

if(curr_tok==END)break;

if(curr_tok==PRINT) continue;

cout<

}

return no_of_error;

}

7 答辩记录

8 指导教师意见

免费下载 Word文档免费下载: c++设计一个简单计算器

  • 29.8

    ¥45 每天只需1.0元
    1个月 推荐
  • 9.9

    ¥15
    1天
  • 59.8

    ¥90
    3个月

选择支付方式

  • 微信付款
郑重提醒:支付后,系统自动为您完成注册

请使用微信扫码支付(元)

订单号:
支付后,系统自动为您完成注册
遇到问题请联系 在线客服

常用手机号:
用于找回密码
图片验证码:
看不清?点击更换
短信验证码:
新密码:
 
绑定后可用手机号登录
请不要关闭本页面,支付完成后请点击【支付完成】按钮
遇到问题请联系 在线客服