C++四则运算程序代码(共7页).doc

上传人:飞****2 文档编号:13995215 上传时间:2022-05-02 格式:DOC 页数:7 大小:40.50KB
返回 下载 相关 举报
C++四则运算程序代码(共7页).doc_第1页
第1页 / 共7页
C++四则运算程序代码(共7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《C++四则运算程序代码(共7页).doc》由会员分享,可在线阅读,更多相关《C++四则运算程序代码(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上四则表达式计算一、程序分析和设计 把整个表达式存为字符数组,按照四则运算规则寻找其中的运算符号,然后提取左右两侧操作数计算,用计算结果替换掉计算的表达式,这样整体表达式会被简化,继续重复这个过程,直到找不到运算符为止。1) 运算表达式的存储定义字符数组来存储即可,注意由于运算过程中可能会出现小数,而小数会导致表达式长度增加,所以定义时字符数组长度应该足够(比如1000)并且计算结果应该减少精度,比如保留小数点后面三位。2) 数和字符数组之间的转化提取出来的操作数实际为字符序列,计算前我使用 atof(定义在stdlib.h) 转化为浮点数运算,同样的,运算结果要替换表

2、达式中的字符序列也需要先转化为字符串才行,我使用 sprintf 函数,该函数定义在 stdio.h 中字符串的连接使用了 strcat(string.h) 等函数。3) 计算逻辑设pstr 为计算表达式/先算乘除for(int i=1;istrlen(pstr);i+) If(如果当前位置字符为*或者/) 把运算符保存在ysf中 从该位置左边找前边的操作符获取左边要计算的数据coml和该数据前的字符串strleft从该位置右边找后边的操作符获取右边要计算的数据comr和该数据后的字符串 strright将数据变换成浮点型运算再转换为字符型的结果连接 strleft + 结果 + strigh

3、t 组成新字符串替换掉 pstr /再找加减/代码与找乘除的过程类似为了代码简单,中途设计了几个计算函数double jia(char x,char y);/字符加法返回double的值double jian(char x,char y);/字符减法返回double的值double cheng(char x,char y);/字符乘法返回double的值double chu(char x,char y);/字符除法返回double的值double xsd(char x);/字符检测是否有小数,返回double的值为了可以重复输入,开头使用了个do while ,为了可以输入-1+2这种表达式,

4、我设计了个判断,如果第一字符是+或-我给整体表达式前加了个0字符这样就转化为一般的字符了!如果是* /则提示出错,别重新输入!二、程序主要代码#include#include/atof函数的头文件#include/sprintf函数的头文件#define MAX 255/宏定义常量#includedouble cmjia(char x,char y);/声明函数double cmjian(char x,char y);double cmcheng(char x,char y);double cmchu(char x,char y);double compute(char pstr);doubl

5、e xsd(char x);/主函数void main()do double t;/存储运算结果char a=0;char linshiMAX;/计算临时用的 char biaodashiMAX;/用来存放表达式 for(;)/输入表达式 cout请输入一个正确的数学表达式,形如7+8*6,按回车结束biaodashi; if(biaodashi0=*|biaodashi0=/) cout您输入的表达式有误,请重新输入endl;/判断首字符是否为*/,如果是提示错误别返回重新输入else break;if(biaodashi0=-|biaodashi0=+)/判断首字符是否为+-,如果是给字符

6、前加字符0 strcat(a,biaodashi);strcpy(biaodashi,a);strcpy(linshi,biaodashi); t=compute(linshi);/计算cout运算结果是:biaodashi=tendl;/输出结果while(1);/计算完返回,接着输入 /自定义函数double xsd(char x)/判断是否有小数点,并把字符型转化为浮点型for(int i=0;istrlen(x);i+)if(xi=.) double num = 0.0; sscanf(x, %f, &num);/return num; else return atof(x);doub

7、le cmjia(char x,char y)/计算两字符加法,并返回double型值 double a,b;a=xsd(x);b=xsd(y);double c=a+b;return c;double cmjian(char x,char y)/计算两字符减法,并返回double型值double a,b;a=xsd(x);b=xsd(y);double c=a-b;return c;double cmcheng(char x,char y)/计算两字符乘法,并返回double型值 double a,b;a=xsd(x);b=xsd(y);double c=a*b;return c;doubl

8、e cmchu(char x,char y)/计算两字符除法,并返回double型值 double a,b;a=xsd(x);b=xsd(y);double c=a/b;return c;double compute(char pstr)/char strleftMAX,strrightMAX,comlMAX,comrMAX,comMAX,ysf;/ysf代表运算符double comzhi,zhi;/comzhi代表中途计算的值,com代表comzhi所对应的字符型 int n=0;/先算乘除for(int i=0;i=0;j-)if(pstrj=-|pstrj=+)for(int k=0;

9、k=j;k+) strleftk=pstrk;strleftk=0;/获取左边要计算数据前的字符串strleft for(k=j+1,n=0;ki;k+,n+) comln=pstrk;comln=0;/获取左边要计算的数据comlbreak;elsefor(int k=0;ki;k+) comlk=pstrk; strleft0=0;/获取右边要计算的数据comr和该数据后的字符串 strrightfor(j=i+1;j=strlen(pstr);j+) if(pstrj=-|pstrj=+|pstrj=*|pstrj=/|pstrj=0)for(int k=0,n=j;kstrlen(ps

10、tr)-i-1;k+,n+) strrightk=pstrn;strrightk=0; for(k=i+1,n=0;kj;k+,n+) comrn=pstrk;comrn=0;break; if(ysf=*)/如果是* comzhi=cmcheng(coml,comr); sprintf(com,%.3f,comzhi);else/如果是/comzhi=cmchu(coml,comr);sprintf(com,%.3f,comzhi);strcat(strleft,com);/把数据前的字符和运算后的字符连接strcat(strleft,strright);/把数据后的字符和运算后的字符连接

11、strcpy(pstr,strleft);/替换pstr/重新找操作符/再找加减for(i=0;istrlen(pstr);i+)if(pstri=+|pstri=-)ysf=pstri; /获取左边要计算的数据comlfor(int k=0;ki;k+) comlk=pstrk;comlk=0;/获取右边要计算的数据和该数据后的字符串 strright for(int j=i+1;j=strlen(pstr);j+) if(pstrj=-|pstrj=+|pstrj=0)for(int k=0,n=j;k=strlen(pstr)-j;k+,n+) strrightk=pstrn; strr

12、ightk=0; for(k=i+1,n=0;kj;k+,n+) comrn=pstrk; comrn=0; break; if(ysf=+)comzhi=cmjia(coml,comr); sprintf(com,%.3f,comzhi); elsecomzhi=cmjian(coml,comr); sprintf(com,%.3f,comzhi);strcat(com,strright); strcpy(pstr,com);/没找到,说明全部+-都计算完了zhi=atof(pstr);return zhi;三、运行效果四、总结 还无法提醒形如3-45*+或输入sgfs-34等式的错误,别重新输入,无法计算带括号和函数的表达式等更复杂的四则表达式。另外程序虽然可以运行,但是仍有4个warnings,而且代码显得有点长,其实可以再简练一点。 专心-专注-专业

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

当前位置:首页 > 教育专区 > 教案示例

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

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