admin 管理员组文章数量: 1086019
2024年4月26日发(作者:11个重要的数据库设计原则)
中南大学数学院的一份模拟计算器程序
一、实验目的、内容
设计一个程序来模拟一个简单的手持计算器。程序支持算术运算+、-、*、/、
=、以及C(清除)、A(全清除)操作。
二、实验程序设计及结构
定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,
用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数
据执行相应操作,并存储操作的结果。
该计算器的基本思路是把字符串转化为数字和运算符,然后把数字和运算符
分别压入两个栈,number 和symbolt
Calculator类包含以下函数
void cal(string s);是主要的计算函数
void express();用以输出结果,弹出栈顶
int legal(string w);判断运算符是否合法
void calculator::push();该函数的作用是记录此运算符,相当于压栈
void calculator::pop()/;在已进行优先级判断的情况下进行合法运算,该函数作用
之后两个栈内的字符变少了,表面上是p减小了
int calculator::StringToNumber(string aStr)把字符串转化为数字,这个函数应该是可
以优化的,记得有一个专用的字符与数字转化的函数。
void calculator::cal(string w);主要的计算引擎,由一个大循环内套三个小循环组
成,第一个循环的作用是依次读出字符串中的字符,第二个循环压入数字,把字
符改为数字第三个循环是主要计算的,其中加入了对括号优先计算的判断。
三、设计过程
加入了对运算符是否合法的判断,加深了对类的理解。
四、设计的特点和结果
运行结果如下
参考文献
附录
#include
#include
#include
using namespace std;
class calculator
{
public:
void cal(string s);
void express();
int legal(string w);
private:
void push();
void pop();
bool can();
int StringToNumber(string aStr);
int number[1000];
char symbolt[1000];
string s,t;
int i,j,p;
};
void calculator::push()
{
p++;
symbolt[p]=s[i];
}
void calculator::pop()
{
p--;
switch (symbolt[p+1])
{
case '+':{number[p]+=number[p+1];break;}
case '-':{number[p]=number[p]-number[p+1];break;}
case '*':{number[p]=number[p]*number[p+1];break;}
case '/':{number[p]=number[p]/number[p+1];break;}
}
}
bool calculator::can()
{
if (((s[i]=='+')||(s[i]=='-'))&&(symbolt[p]!='(')) return true;
if (((s[i]=='*')||(s[i]=='/'))&&((symbolt[p]=='*')||(symbolt[p]=='/'))) return true;
return false;
}
int calculator::StringToNumber(string aStr)
{
int number = 0;
for (int i=0;i<();i++)
{
number = number*10 + aStr[i]-48;
}
return number;
}
void calculator::cal(string w)
{
s='('+w+')';
i=0;
p=0;
while (i<=()-1)
{
while (s[i]=='(')
{
push();
i++;
}
j=i;
do
{
i++;
}
while ((s[i]>='0')&&(s[i]<='9'));
int m;
t="";
int h=0;
for(m=j;m
number[p] = StringToNumber(t);
do
{
if (s[i]==')')
{
while (symbolt[p]!='(') pop();
p--;
number[p]=number[p+1];
}
else
{
while (can()) pop();
push();
}
i++;
}
while ((i<=())&&(s[i-1]==')'));
}
}
void calculator::express()
{
cout< } int calculator::legal(string w) { int k=0; for(i=0;i<();i++) { if(!(w[i]=='+'||w[i]=='-'||w[i]=='*'||w[i]=='/'||w[i]=='('||w[i]==')'||(w[i]>='0'&&w[i]< ='9'))) k++; } if(k) cout<<"error:含有非法字符"< return k; } int main(int argc, char* argv[]) { while(1){ string w; cout<<"input your string:"; cin>>w; calculator MyCal; if(!(w)) { (w); s(); } char chose; cout<<"是否继续[Y/N]"< cin>>chose; if (chose=='n'||chose=='N') break; } return 0; } 教师评语及计分
版权声明:本文标题:简单的模拟计算器程序 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1714125294a666447.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论