手把手教你学懂四则优先级运算的算法实现
欢迎各位来到我的博客,如果觉得小弟写得还行就收藏吧!
各位可能是刚开始学单片机,或许是51单片机、stm32单片机,也可能是刚开始学各种编程语言,想完成一个小小的功能齐全的计算器程序。如果只是为了完成简单的单步加减乘除运算,我相信对大家来说都没有什么难度,但是实现带括号的四则运算功能,编程就会发现还是比较有难度,所以这里我分享一下我以前写过的这个算法。
这里的实现算法已经被模块化为两个函数,无论什么单片机,什么平台,只需要调用相应函数即可实现此功能。
操作系统win10
使用的软件qt
基本实现了一个科学计算器。800行代码左右,但是涉及到了c++(qt)各种基本操作方面,和基本数据结构的使用,是一个很好的qt初学者练习项目。
使用c++语言实现(其实基本使用c语言编写的):
str = "(1.3+2)*3.1+9*2-50"
double result = comp(str); //即可计算出结果
做的一个计算器如下:
代码:
double Comp::backExpressionCalculate(char exp[])
{
int i;
double a,b,c;
double tmp = 0;
double stack[MAXSIZE];
char strNum[MAXSIZE];
int cnt=0;
int top = -1;
char operate;
double res = 0;
for(i = 0;exp[i]!='\0';++i)
{
if((exp[i]>='0'&&exp[i]<='9')||exp[i]=='.')
{
strNum[cnt++] = exp[i];
}
else if(exp[i] == ' ' ||exp[i]=='+'||exp[i]=='-'||exp[i]=='*'||exp[i]=='/')
{
if(cnt>0)
{
strNum[cnt++] = '\0';
cnt = 0;
tmp = str2double(strNum);
stack[++top] = tmp;
}
}
if(exp[i] == '+' ||exp[i] == '-' ||exp[i] == '*' ||exp[i] == '/')
{
operate = exp[i];
b = stack[top--];
a = stack[top--];
c = calculate(a,operate,b);
stack[++top] = c;
}
}
res = stack[top];
return res;
}
我的完整工程代码:百度搜索:cc科学计算器c++(qt)实现,csdn中即可下载