c++实现的完整功能计算器Word文件下载.docx

上传人:b****4 文档编号:16579083 上传时间:2022-11-24 格式:DOCX 页数:7 大小:19.04KB
下载 相关 举报
c++实现的完整功能计算器Word文件下载.docx_第1页
第1页 / 共7页
c++实现的完整功能计算器Word文件下载.docx_第2页
第2页 / 共7页
c++实现的完整功能计算器Word文件下载.docx_第3页
第3页 / 共7页
c++实现的完整功能计算器Word文件下载.docx_第4页
第4页 / 共7页
c++实现的完整功能计算器Word文件下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

c++实现的完整功能计算器Word文件下载.docx

《c++实现的完整功能计算器Word文件下载.docx》由会员分享,可在线阅读,更多相关《c++实现的完整功能计算器Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。

c++实现的完整功能计算器Word文件下载.docx

string>

cmath>

queue>

#definepi3.141592654

doublecalculate(std:

:

string);

intmain(){

//输入式子,存于s中

std:

strings;

getline(std:

cin,s);

//抛出异常

try{

//判断是否有异常字符

conststd:

stringjubge="

1234567890tansincos+-*/^%(|)loglnlgsqrtpi!

"

;

for(constauto&

i:

s)

if(jubge.find(i)==-1)

throw1;

////抛出异常

//将三角函数名化为数字与&

字符,便于识别和计算

//以及将对数函数·

·

//以及阶乘·

//以及开方·

//将pi/π化为数字

size_tn=0;

while((n=s.find("

sin"

))!

=-1)

s.replace(n,3,"

1&

);

cos"

2&

tan"

3&

ln"

s.replace(n,2,"

4&

lg"

5&

sqrt"

s.replace(n,4,"

6&

log"

@"

!

s.replace(n,1,"

$7"

pi"

s.replace(n,2,std:

to_string(pi));

//去除括号

while(s.find("

("

)!

=-1||s.find("

)"

)!

=-1){

std:

ostringstreamuout;

//存储未处理字符

autoleft=s.begin();

//记录左括号位置

autoright=s.begin();

//记录右括号位置

while(right!

=s.end()){//处理最里层括号里的字符

if(*right=='

('

){

if(*left=='

for(autoi=left;

i!

=right;

++i)

uout<

<

*i;

}

left=right;

}

elseif(*right=='

)'

if(*left!

='

)throw2;

uout<

calculate(std:

string(left+1,right));

break;

elseif(*left!

*right;

else;

++right;

}

if(*left=='

&

right==s.end())throw3;

for(autoi=right+1;

=s.end();

++i)//输出剩余未处理符

uout<

s=uout.str();

//将处理一对括号后的字符串赋给s

}

//计算最后结果

doubleresult=calculate(s);

//输出结果

std:

cout<

result<

endl;

}

catch(inte){//捕获并处理异常

usingstd:

cout;

cout<

"

InputError!

<

endl;

switch(e){

case1:

式子中有异常字符!

break;

case2:

缺左括号!

case3:

缺右括号!

case4:

运算符相连或对数等复活写错!

default:

system("

pause"

return0;

}

strings){

//将数字和运算符分别装入双向队列和队列适配器中

deque<

double>

number;

queue<

char>

symbol;

istringstreamuin(s);

symbol.push('

+'

//添加加号为第一个运算符

doubletpn;

chartpc;

while(uin>

>

tpn>

tpc)

number.push_back(tpn),symbol.push(tpc);

if(!

uin.eof())throw4;

number.push_back(tpn);

//添加最后一个数字

//计算乘方

for(inti=0,n=number.size();

i<

n;

++i){

tpc=symbol.front();

symbol.pop();

//取出运算符

tpn=number.front();

number.pop_front();

//取出数字

if(tpc=='

^'

){//计算乘方

doubletemp=number.back();

number.back()=pow(temp,tpn);

else{

symbol.push(tpc);

//放回队列,置于最后

number.push_back(tpn);

//计算三角函数以及对数

'

){//计算乘方以及对数

switch(int(number.back())){

case1:

number.back()=sin(tpn);

case2:

number.back()=cos(tpn);

case3:

number.back()=tan(tpn);

case4:

number.back()=log(tpn);

case5:

number.back()=log10(tpn);

case6:

number.back()=sqrt(tpn);

default:

elseif(tpc=='

@'

){//计算对数

number.back()=log(tpn)/log(temp);

$'

){//计算阶乘

intn=number.back();

number.back()=1;

for(inti=1;

=n;

number.back()*=i;

//计算乘除以及取模运算

||tpc=='

-'

*'

number.back()*=tpn;

//计算乘

/'

number.back()/=tpn;

//计算除

else{//取模运算

temp=int(temp)%int(tpn);

number.back()=temp;

//计算加减得出结果

doubleresult=0;

)//+

result+=tpn;

else//-

result-=tpn;

returnresult;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电力水利

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1