自己编写的科学计算器C++代码

上传人:pu****.1 文档编号:507420316 上传时间:2023-03-02 格式:DOC 页数:10 大小:10.27KB
返回 下载 相关 举报
自己编写的科学计算器C++代码_第1页
第1页 / 共10页
自己编写的科学计算器C++代码_第2页
第2页 / 共10页
自己编写的科学计算器C++代码_第3页
第3页 / 共10页
自己编写的科学计算器C++代码_第4页
第4页 / 共10页
自己编写的科学计算器C++代码_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《自己编写的科学计算器C++代码》由会员分享,可在线阅读,更多相关《自己编写的科学计算器C++代码(10页珍藏版)》请在金锄头文库上搜索。

1、/vc+6.0/#include#include#include#include#include#includeusing namespace std;/*当代码不是特别长时本人喜欢将主函数main放于末尾定义可能还存在很多漏洞,待日后慢慢完善吧*/*反转字符串*/void revers(string& s)string:size_type i,n;string:value_type t;n=s.size()/2;for(i=0; in; +i)t=si; si=ss.size()-1-i; ss.size()-1-i=t;/*从间断的字符串表达式获取相应的double型数值*/double

2、get_d_from_e(string& s)string _s=s;stringstream _ss;double _d;int i=0;for(; is.size(); +i)if(si=#)_si=-;_ss_d;return _d;/*将double型数值转换为适合函数cal计算的字符串表达式*/string get_e_from_d(double d)string _s;stringstream _ss;_ss_s;for(int i=0; i=0; -i)if(isdigit(si) | si=. | si=#| (si=+ & i=2 & si-1=e)| (si=e & (si

3、+1=+ | si+1=# | isdigit(si+1) )_s+=si;else break;revers(_s);return _s;/*get_right函数用于获取运算符右边的数字*/string get_right(const string& s,int posofop)int i=posofop+1;string _s;for(; is.size(); +i)if(isdigit(si) | si=. | si=#| (si=e & is.size()-1 & (si+1=+ | si+1=# | isdigit(si+1)| (si=+ & si-1=e)_s += si;el

4、se break;return _s;string get_next(string& s,string& l,string& r,double d,int pos)string _s;int i;for(i=0; ipos-l.size(); +i)_s+=si;_s+=get_e_from_d(d);for(i=pos+1+r.size(); is.size(); +i)_s+=si;return _s;/* cal函数用于计算不含括号的表达式的值,在计算过程中用符号 # 表示符号,以区别于减法符号 -/void cal(string& s,string& re,string& errmsg

5、, bool& f)if(!f)return;int i;for(i=0; is.size(); +i)if(si=)/乘方运算string left,right;left = get_left(s,i);right = get_right(s,i);if(left.size()=0 | right.size()=0)f=false; errmsg=操作数缺失!; return ;elsedouble d,d1,d2;if(left0=#)string _left=left;_left.erase(0,1);d1=-get_d_from_e(_left);d2=get_d_from_e(rig

6、ht);if(d10 & d2!=0 & (1/d2-int(1/d2)=0 & int(1/d2)%2=0)f=false; errmsg=负数不能开偶次方根!; return;elsed1=get_d_from_e(left);d2=get_d_from_e(right);d=pow(d1,d2);string _s;_s=get_next(s,left,right,d,i);s=_s; _s=; left=; right=;cal(s,re,errmsg,f);break;for(i=0; is.size(); +i)if(si=)/乘法运算string left,right;left

7、= get_left(s,i);right = get_right(s,i);if(left.size()=0 | right.size()=0)f=false; errmsg=操作数缺失!; return ;elsedouble d=get_d_from_e(left)*get_d_from_e(right);string _s;_s=get_next(s,left,right,d,i);s=_s; _s=; left=; right=;cal(s,re,errmsg,f);break;if(si=/)/除法运算string left,right;left = get_left(s,i);r

8、ight = get_right(s,i);if(left.size()=0 | right.size()=0)f=false; errmsg=操作数缺失!; return ;elsedouble d1=get_d_from_e(left),d2=get_d_from_e(right),d;if(d2-1e-300)f=false; errmsg=除法错误:除数为0!; return;d=d1/d2;string _s;_s=get_next(s,left,right,d,i);s=_s; _s=; left=; right=;cal(s,re,errmsg,f);break;for(i=0;

9、 is.size(); +i)if(si=+)/加法运算if(i=0)/开头的 + 可忽略s.erase(0,1); cal(s,re,errmsg,f);else if(si-1=e)continue;elsestring left, right;left = get_left(s,i);right = get_right(s,i);if(left.size()=0 | right.size()=0)f=false; errmsg=操作数缺失!; return;elsedouble d=get_d_from_e(left)+get_d_from_e(right);string _s;_s=g

10、et_next(s,left,right,d,i);s=_s; _s=; left=; right=;cal(s,re,errmsg,f);break;if(si=-)/加法运算if(i=0)/若符号 - 位于表达式开头则视其为负号s0=#;continue;else if(si-1=e)/指数性表达式中视为负号si=#;continue;elsestring left, right;left = get_left(s,i);right = get_right(s,i);if(left.size()=0 | right.size()=0)f=false; errmsg=操作数缺失!; retu

11、rn;elsedouble d=get_d_from_e(left)-get_d_from_e(right);string _s;_s=get_next(s,left,right,d,i);s=_s; _s=; left=; right=;cal(s,re,errmsg,f);break;if(i=s.size()/若已无两元运算符则直接返回( 将 # 表示的负号还原为 - )re=s;for(int i=0; i1)re *= n; -n;return re;double FUN(string& s,string& par)/s为函数名,par为s函数的参数if(s=sin)return sin(get_d_from_e(par);if(s=cos)return cos(get_d_from_e(par);if(s=asin)return asin(get_d_from_e(par);if(s=acos)retu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号