欢迎来到天天文库
浏览记录
ID:60778382
大小:40.50 KB
页数:7页
时间:2020-12-18
《C++四则运算程序代码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、四则表达式计算一、程序分析和设计把整个表达式存为字符数组,按照四则运算规则寻找其中的运算符号,然后提取左右两侧操作数计算,用计算结果替换掉计算的表达式,这样整体表达式会被简化,继续重复这个过程,直到找不到运算符为止。1)运算表达式的存储定义字符数组来存储即可,注意由于运算过程中可能会出现小数,而小数会导致表达式长度增加,所以定义时字符数组长度应该足够(比如1000)并且计算结果应该减少精度,比如保留小数点后面三位。2)数和字符数组之间的转化提取出来的操作数实际为字符序列,计算前我使用atof(定义在stdlib.h)转化为浮点数运算,同样的,运算结果要替换表达式中的字符序列也需要先转化为字符串
2、才行,我使用sprintf函数,该函数定义在stdio.h中字符串的连接使用了strcat(string.h)等函数。3)计算逻辑设pstr为计算表达式//先算乘除for(inti=1;i3、过程类似为了代码简单,中途设计了几个计算函数doublejia(charx[],chary[]);//字符加法返回double的值doublejian(charx[],chary[]);//字符减法返回double的值doublecheng(charx[],chary[]);//字符乘法返回double的值doublechu(charx[],chary[]);//字符除法返回double的值doublexsd(charx[]);//字符检测是否有小数,返回double的值为了可以重复输入,开头使用了个dowhile,为了可以输入-1+2这种表达式,我设计了个判断,如果第一字符是+或-我给整体表4、达式前加了个0字符这样就转化为一般的字符了!如果是*/则提示出错,别重新输入!二、程序主要代码#include#include//atof函数的头文件#include//sprintf函数的头文件#defineMAX255//宏定义常量#includedoublecmjia(charx[],chary[]);//声明函数doublecmjian(charx[],chary[]);doublecmcheng(charx[],chary[]);doublecmchu(charx[],chary[]);doubleco5、mpute(charpstr[]);doublexsd(charx[]);//主函数voidmain(){do{doublet;//存储运算结果chara[]="0";charlinshi[MAX];//计算临时用的charbiaodashi[MAX];//用来存放表达式for(;;)//输入表达式{cout<<"请输入一个正确的数学表达式,形如7+8*6,按回车结束"<>biaodashi;if(biaodashi[0]=='*'6、7、biaodashi[0]=='/')cout<<"您输入的表达式有误,请重新输入"<8、是提示错误别返回重新输入elsebreak;}if(biaodashi[0]=='-'9、10、biaodashi[0]=='+')//判断首字符是否为+-,如果是给字符前加字符0{strcat(a,biaodashi);strcpy(biaodashi,a);}strcpy(linshi,biaodashi);t=compute(linshi);//计算cout<<"运算结果是:"<11、i=0;i
3、过程类似为了代码简单,中途设计了几个计算函数doublejia(charx[],chary[]);//字符加法返回double的值doublejian(charx[],chary[]);//字符减法返回double的值doublecheng(charx[],chary[]);//字符乘法返回double的值doublechu(charx[],chary[]);//字符除法返回double的值doublexsd(charx[]);//字符检测是否有小数,返回double的值为了可以重复输入,开头使用了个dowhile,为了可以输入-1+2这种表达式,我设计了个判断,如果第一字符是+或-我给整体表
4、达式前加了个0字符这样就转化为一般的字符了!如果是*/则提示出错,别重新输入!二、程序主要代码#include#include//atof函数的头文件#include//sprintf函数的头文件#defineMAX255//宏定义常量#includedoublecmjia(charx[],chary[]);//声明函数doublecmjian(charx[],chary[]);doublecmcheng(charx[],chary[]);doublecmchu(charx[],chary[]);doubleco
5、mpute(charpstr[]);doublexsd(charx[]);//主函数voidmain(){do{doublet;//存储运算结果chara[]="0";charlinshi[MAX];//计算临时用的charbiaodashi[MAX];//用来存放表达式for(;;)//输入表达式{cout<<"请输入一个正确的数学表达式,形如7+8*6,按回车结束"<>biaodashi;if(biaodashi[0]=='*'
6、
7、biaodashi[0]=='/')cout<<"您输入的表达式有误,请重新输入"<8、是提示错误别返回重新输入elsebreak;}if(biaodashi[0]=='-'9、10、biaodashi[0]=='+')//判断首字符是否为+-,如果是给字符前加字符0{strcat(a,biaodashi);strcpy(biaodashi,a);}strcpy(linshi,biaodashi);t=compute(linshi);//计算cout<<"运算结果是:"<11、i=0;i
8、是提示错误别返回重新输入elsebreak;}if(biaodashi[0]=='-'
9、
10、biaodashi[0]=='+')//判断首字符是否为+-,如果是给字符前加字符0{strcat(a,biaodashi);strcpy(biaodashi,a);}strcpy(linshi,biaodashi);t=compute(linshi);//计算cout<<"运算结果是:"<11、i=0;i
11、i=0;i
此文档下载收益归作者所有