合肥最好的肿瘤医院是:让我头痛的C++啊!!!帮我看一下这一题怎么编程.

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 14:07:49
写一个CCalculator类
1,完成+ - * / 的运算
2,为CCalculator绘一个界面,输入连续按键字符串,由CCalculator类返回计算结果。
多谢!!!
能不能将每一步骤讲一下??
还需提一下,本人初学C++,越详细越好!!!
谢谢!!!
最好运行通过了发过来。

二元运算本身和界面很简单,就不说了
关键在于,怎么把字符串解读为运算表达式
先要将中缀表达式(就是我们通常所见的)转换为后缀表达式,比如 a+b*c+d 要变成 abc*+d+
转换的方法用栈来实现,涉及到运算符的优先级
然后用另一个栈来对后缀表达式计算结果,方法是
读入字母/数字--〉字母/数字进栈
读入运算符--〉退出两个字母/数字,用运算符计算结果,并将结果进栈
栈能刚好退完,则最后的即为结果。否则表明表达式有误
详细可参考数据结构教程,清华版《数据结构(用面向对象方法与C++描述)》一书中即有。

class CCalculator
{
private:
float fdata;
float sddata;
float result;
char *display;
public:
CCalculator();
~CCalculator();
void add(){result=fdata+sddata;};
void sub(){result=fdata-sdata;};
void mul(){result=fdata*sdata;};
void div(){if(sdata!=0)result=fdata/sdata};
void draw();
int get1();
void enter1();
void enter2();
int getresult();{return result;}

};
CCalculator::CCalculator()
{
display=new char[20];
memset(display,' ',20);
display[0]=display[19]='|';
}
CCalculator::~CCalculator()
{
delete display;
}

void CCalculator::draw()
{
system("cls");
cout<<"+-------------------+"<<endl;
cout<<display<<endl;
cout<<"+-------------------+"<<endl;
cout<<"| 7 8 9 + -|"<<endl;
cout<<"| 4 5 6 * /|"<<endl;
cout<<"| 1 2 3 0 =|"<<endl;
cout<<"+-------------------+"<<endl;
}
int CCalculator::get1()
{
char c;
char temp[20];
int i=0;
while(1)
{
getchar(c);
display[i+2]=c;
if(c=='\r')
break;
temp[i]=c;
i++;
draw();
}
temp[i+1]='\0';

memset(dispaly,' ',20);
display[0]=display[19]='|';
return atoi(temp,10);
}
void CCalculator::enter1()
{
fdata=get1();
}
void CCalculator::enter1()
{
sdata=get1();
}

void CCalculator:: getresult()
{
char c;
char temp[20];
itoa(temp,result);
int i=0;
while(1)
{
getchar(temp[i]);
display[i+2]=c;
if(i>19||temp[i]=='\0')
break;
i++;
draw();
}
temp[i+1]='\0';

memset(dispaly,' ',20);
display[0]=display[19]='|';

}

void main()
{
CCalculator test;
test.draw();
test.enter1();
int c;
do{
getchar(c);
switch(c)
{
case '+': test.add();
test.getresult();
break;
....
}
while(c!='q');
}