模拟计算器

您所在的位置:网站首页 abs介绍背景 模拟计算器

模拟计算器

2024-07-04 03:28| 来源: 网络整理| 查看: 265

模拟计算器

qq_44726467: #include"cstdlib" #include"cstdio" #include"cstring" #include"cmath" #include"stack" #include"algorithm" #include"iostream" #define Maxlen 500 using namespace std; int Flag; //对于最终结果的标志变量 void menu() //菜单栏函数 { printf(" -------------- 欢迎使用全球最低端的计算器 --------------\n"); printf(" | 1.本计算器合法符号为'+'、'-'、'*'、'/'、'('、')'、'.' |\n"); printf(" | 'ABS()'、'SQR()',字母不区分大小写且可进行任意迭代。 |\n"); printf(" | 2.本计算器可以实现浮点数的计算,计算结果将保留6位小数。|\n"); printf(" | 3.本计算器比较低端,所以数据范围不能超double。 |\n"); printf(" | 4.本计算器比较低端,所以计算表达式的长度上限为500。 |\n"); printf(" | 5.输入'END'不包括引号,结束本程序。 |\n"); printf(" ----------------------------------------------------------\n"); } double fabs(double x) //求绝对值,因为原型处理数字超过9位会出现错误 { if(x'9')) //判断是否出现其他不合法符号 { Flag=4; return ; } if(p[i]=='(') sum+=1; //判断括号是否匹配 else if(p[i]==')') sum-=1; if(sums; // 申明一个栈s,存运算符 i=0; // 初始化下标 while(p[i]!='\0') // 遍历字符串p { switch(p[i]) { case'(': //将左括号入栈,f赋为1 s.push(p[i++]); f=1; break; case')': //将右括号这一层内的所有运算符出栈存入q中 while(s.top()!='(') { q[j++]=s.top(); s.pop(); } s.pop(); //这一层的左括号出栈 i++; f=0; break; case'+': if(f) //紧跟左括号,所以是取正运算,为了区分用"?"表示,将其入栈 { s.push('?'); i++; break; } while(!s.empty() && s.top()!='(') //加法运算,因为运算最低级,所以将这一层其他运算符全部出栈后再入栈 { q[j++]=s.top(); s.pop(); } s.push(p[i++]); f=0; break; case'-': if(f) //紧跟左括号,所以是取负运算,为了区分用"@"表示,将其入栈 { s.push('@'); i++; break; } while(!s.empty() && s.top()!='(') //减法运算,因为运算最低级,所以将这一层其他运算符全部出栈后再入栈 { q[j++]=s.top(); s.pop(); } s.push(p[i++]); f=0; break; case'*': case'/': while(!s.empty() && (s.top()!='+' && s.top()!='-' && s.top()!='(')) //乘除法,将同级运算符全部出栈后再入栈 { q[j++]=s.top(); s.pop(); } s.push(p[i++]); f=0; break; case's': case'S': s.push('s'); //开方,因为带括号所以最高级,用"s"表示入栈 i+=3; f=0; break; case'a': case'A': //取绝对值,因为带括号所以最高级,用"a"表示入栈 s.push('a'); i+=3; f=0; break; default: while(p[i]>='0' && p[i]='0' && p[i]



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3