欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年C++语言计算器源代码.pdf

    • 资源ID:12785548       资源大小:152.98KB        全文页数:26页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年C++语言计算器源代码.pdf

    C+语言编写。#include #include #include usingnamespacestd; constdoublepi=3.14159265; constdoublee=2.718281828459; constintSIZE=1000; typedefstructnode/ 为了处理符号而建立的链表(如:1+(-2) chardata; node*next; node; typedefstructstack_num/ 存储数的栈 double*top; double*base; stack_num; typedefstructstack_char/ 存储运算符号的栈精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 26 页 - - - - - - - - - - char*top; char*base; stack_char; stack_numS_num;/ 定义stack_charS_char;/ 定义charfu18=n,),+,-,*,/,%, Q,L,C,S,T,c,s,t,(; intcompare1000;/表现出各运算符号的优先级doubleshu1000;/存储数的数组doubledai_result;/运算的结果,是为了处理M 运算(简介函数里有 M 的定义 ) intbiao=0;/和 dia_result一样,为了处理 M 运算charlineSIZE;/ 输入的所要计算的表达式voidinit()/ 初始化 comparefu0=-2;/ 用数字的大小表现出符号的优先级comparefu1=-1; comparefu2=2; comparefu3=2; comparefu4=4; comparefu5=4; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 2 页,共 26 页 - - - - - - - - - - comparefu6=4; comparefu7=5; for(inti=8;i=15;i+) comparefui=6; comparefu16=7; S_num.base=(double*)malloc(sizeof(double)*SIZE);/为栈开辟空间S_char.base=(char*)malloc(sizeof(char)*SIZE);/同上S_num.top=S_num.base; S_char.top=S_char.base; voidpush_num(doublen)/数字进栈 *+S_num.top=n; voidpush_char(charc)/ 运算符号进栈 *+S_char.top=c; doublepop_num()/数字出栈精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 3 页,共 26 页 - - - - - - - - - - doublem=*S_num.top; S_num.top-; returnm; charpop_char()/运算符号出栈 charcc=*S_char.top; S_char.top-; returncc; charget_top_char()/ 得到运算符号的栈中最顶端的运算符号 return*S_char.top; doubleoperate(doubley,charc,doublex)/ 对两个数计算 (含是双目运算符 :如*,/等等) doubler; if(c=-) r=x-y; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 26 页 - - - - - - - - - - elseif(c=+) r=x+y; elseif(c=/&y!=0) r=x/y; elseif(c=*) r=x*y; elseif(c=) r=1; for(inti=1;i=y;i+) r*=x; elseif(c=%) intr0=(int)x%(int)y; r=double(r0); returnr; doubleoperate_one(doubleone,charcc)/ 对一个数运算 (含单目运算符 :如 log(L),sin(S)等等) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 26 页 - - - - - - - - - - doubler; if(cc=Q) r=sqrt(one); elseif(cc=C) r=cos(one); elseif(cc=S) r=sin(one); elseif(cc=T) r=tan(one); elseif(cc=c) r=acos(one); elseif(cc=s) r=asin(one); elseif(cc=t) r=atan(one); returnr; doubleoperate_L(doublea,doubleb,chardian)/ 求对数的值 doubler=log(b)/log(a); returnr; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 26 页 - - - - - - - - - - doublecompute()/对整个表达式的计算 charc;/表示运算符号intp=0;/用于 shu+p,先初始化inti,j; init();/ 进行初始化push_char(n); linestrlen(line)=n; linestrlen(line)+1=0; if(biao) push_num(dai_result);/把运算的结果先进栈,在这个结果的基础上继续进行运算biao=0; for(i=0;linei!=0;)/ 把表达式中的数字字符串转化成可计算的数字 intflag=0; intflag1=1;/标记是否是运算符号/ intflag2=1;/标记是否出现 _; doubleh=0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 26 页 - - - - - - - - - - intge;/位数intbiao_dian=0;/是否是小数的类型while(1) flag1=1; for(j=0;j=16;j+) if(linei=fuj) flag1=0; break; if(linei=_) break; if(linei=.) i+; ge=0; biao_dian=1; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 26 页 - - - - - - - - - - if(linei=P) shu+p=pi; i+; break; if(linei=E) shu+p=e; i+; break; if(flag1) h=h*10+(linei-0); flag=1; i+; if(biao_dian) ge+; else break; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 26 页 - - - - - - - - - - if(flag) if(biao_dian) intr=1; for(intk=1;k=0) push_num(m); i+; else if(m=-1) c=+; elseif(m=-2) c=-; elseif(m=-3) c=*; elseif(m=-4) c=/; elseif(m=-5) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 12 页,共 26 页 - - - - - - - - - - c=%; elseif(m=-6) c=; elseif(m=-7) c=Q; elseif(m=-8) c=L; elseif(m=-9) c=C; elseif(m=-10) c=S; elseif(m=-11) c=T; elseif(m=-12) c=c; elseif(m=-13) c=s; elseif(m=-14) c=t; elseif(m=-15) c=(; elseif(m=-16) c=); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 13 页,共 26 页 - - - - - - - - - - elseif(m=-17) c=n; charch=get_top_char();/ 得到最顶端运算符号if(comparech=comparec&ch!=(&ch!=n) if(ch=Q|ch=C|ch=S|ch=T |ch=c|ch=s|ch=t) doubleone=pop_num(); chardian=pop_char(); push_num(operate_one(one,dian); elseif(ch=L) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 14 页,共 26 页 - - - - - - - - - - doubleone_L=pop_num(); doubletwo_L=pop_num(); chardian=pop_char(); push_num(operate_L(two_L,one_L,dian); else doublex=pop_num(); doubley=pop_num(); chardian=pop_char(); if(dian=/&x=0)/ 判断是否除了 零 cout由于您除了零,结果将是错误的=3) return0; else return1; voidoutput(doubleresult)/打出结果 printf( 所得结果是 :); coutresultendl; voidcheck()/检查表达式是否合法 voidintroduce(); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 18 页,共 26 页 - - - - - - - - - - charcc;/决定计算器按哪种功能进行计算doubleresult;/结果voidinput();/ 定义if(check_kuohao()&check_char()/看是否合法 ,合法则计算 result=compute(); output(result); cout输入一个字符 M或D或F,决定是否继续 :cc) if(cc=M) system(cls); introduce(); printf( 您上次所得结果为 :); coutresultendl; cout在上次计算结果的基础上,请继续输入想计算的表达式endl; dai_result=result; biao=1; input();/输入表达式break; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 19 页,共 26 页 - - - - - - - - - - elseif(cc=D) system(cls); introduce(); cout计算器已清零 ,请输入您所要计算的表达式endl; input();/输入表达式break; elseif(cc=F) system(cls); cout计算器关闭 ,谢谢使用 !endl; break; else cout所输入字符无效 ,请输入一个字符 M或D或F!endl; continue; else/不合法,分两种不合法精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 20 页,共 26 页 - - - - - - - - - - if(check_kuohao()=0&check_char()=1) cout您所输入的表达式括号不匹配,请重新输入 :endl; input();/输入表达式 else cout您所输入的表达式不合法,请重新输入 :next=NULL; inti; for(i=0;linei!=0;i+)/ 建立链表 p=newnode; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 21 页,共 26 页 - - - - - - - - - - p-data=linei; p-next=head-next; head-next=p; head=p; /deletep; q=(node*)malloc(sizeof(node); head=root; if(root-next-data=+|root-next-data=-)/处理第一个字符 p=newnode; p-data=0; p-next=head-next; head-next=p; if(root-next!=NULL) for(q=root-next;q;q=q-next) if(q-data=(&(q-next-data=-|q-next-data=+) p=newnode; p-data=0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 22 页,共 26 页 - - - - - - - - - - p-next=q-next; q-next=p; /deleteq; p1=newnode; intqi=-1; for(p1=root-next;p1;p1=p1-next) line+qi=p1-data; line+qi=0; voidinput()/ 输入 cinline; if(biao=0) tackle_fuhao();/处理负号check();/检查表达式是否合法 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 23 页,共 26 页 - - - - - - - - - - voidintroduce()/对计算器的符号功能的简要介绍 cout计算器简要介绍 endl; coutC(cos)S(sin)T(tan)a(arccos)c(arcsin)endl; cout789/ont(arctan)endl; cout456*%L(log)endl; cout123-M(M+)Q(sqrt)endl; cout0.+(乘方)F(off)Enter(=)endl; cout对于对数输入 L2_5 表示以 2 为底 5 的对数 endl; coutM( 在 前 面 结 果的 基 础 上继 续 计 算 , 如 : 上次 结 果 为 10, 现 输入+10.5*2)endl; coutD(清零并继续输入 )endl; coutF(计算机关闭 )endl; cout输入 P就代表输入圆周率 ,输入 E代表输入自然对数 endlendl; voidprint() system(color2); cout欢迎使用本计算器 endl; cout输入一个字符串 on,计算器开始启动 start) if(start!=on) cout您所输入的字符无效 ,请按照介绍的继续输入 :endl; continue; else break; if(start=on) system(color5);/颜色的处理system(cls);/刷屏 introduce();/对计算器的简要介绍cout现在,请输入您所要计算的表达式endl; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 25 页,共 26 页 - - - - - - - - - - input();/输入所要计算的表达式 intmain() if_start();/调用是否启动计算器函数return0; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 26 页,共 26 页 - - - - - - - - - -

    注意事项

    本文(2022年C++语言计算器源代码.pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开