-
大小: 9KB文件類型: .zip金幣: 2下載: 0 次發(fā)布日期: 2021-06-13
- 語言: C/C++
- 標(biāo)簽: c++??計(jì)算機(jī)??
資源簡介
//介紹程序
void introduction(){
cout<<"這是一個計(jì)算機(jī)程序,支持:+,-,*,/,(,)的浮點(diǎn)數(shù)運(yùn)算"<<endl;
cout<<"請不要以+,-,*,/開頭,請注意括號的匹配"<<endl;
cout<<"請不要輸入不必要的括號"<<endl;
}
如輸入1+3*1.2+(2+2.2)=
就會給計(jì)算結(jié)果8.8

代碼片段和文件信息
#include?
#include?
using?namespace?std;
/***************************************************************/
//定義一個Stack
enum?Error_code?{?success?overflow?underflow?};?
const?maxsize=20;
template??
class?Stack?{?
public:?
Stack();?
bool?empty()?const;?
bool?full()?const;?
int?size()?const;?
void?clear();?
Error_code?top(T?&item)?const;?
Error_code?pop();?
Error_code?push(const?T?&item);?
private:?
int?count;?
T?entry[maxsize];?
};?
template??
Stack::Stack()?
{??count=0;?
}?
template??
bool?Stack::empty?()?const?
{?return?count==0;?
}?
template??
bool?Stack::full?()?const
{?return?count==maxsize;?
}?
template??
int?Stack::size()?const
{?return?count;?
}?
template??
void?Stack::clear()?
{?count=0;?
}?
template??
Error_code?Stack::top?(T?&item)?const
{?
if?(empty())?return?underflow;?
????item=?entry[count-1];?
????return?success;?
}?
template??
Error_code?Stack::pop?()?
{?
if?(empty())?return?underflow;?
????count--;?
????return?success;?
}?
template??
Error_code?Stack::push?(const?T?&item)
{?
if?(full())?return?overflow;?
????entry[count++]=item;?
????return?success;?
}?
/***************************************************************/
//進(jìn)行計(jì)算的函數(shù)
void?calculate(char?sStack&num)
{
double?ab;
num.top?(b);
num.pop?();
num.top?(a);
num.pop?();
switch(s){
case‘+‘:num.push?(a+b);break;
case‘-‘:num.push?(a-b);break;
case‘*‘:num.push?(a*b);break;
case‘/‘:if(b!=0.0)?num.push?(a/b);
????else?cout<<“分母不能為0“< break;
}
}
/***************************************************************/
//判斷優(yōu)先級,得到結(jié)果的函數(shù)
void?do_command(Stack&numStack&ch){
????string?sentence;
string?s;
int?i=0;
????double?answer;
string?char_num=““;
char?sign;
cout<<“請輸入要計(jì)算的式子“<
cin>>sentence;
s=sentence;
//接下來作為預(yù)讀;
????????while(1)
{
if(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘)
{
char_num=char_num+sentence[i];
i++;
while(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘)
{char_num=char_num+sentence[i];
i++;}
//得到一個數(shù)以后進(jìn)行壓棧操作
num.push(atof(char_num.c_str()));
}
else
{
sign=sentence[i];
i++;//得到了一個字符以后進(jìn)行壓棧操作
ch.push?(sign);
}
char_num=““;//當(dāng)且僅當(dāng)讀入了2個數(shù)字以上才能繼續(xù)進(jìn)行
if(num.size()==2)
break;
}
while(sentence[i]!=‘\0‘){
if(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘){
char_num=char_num+sentence[i];
i++;
while(sentence[i]>=‘0‘&&sentence[i]<=‘9‘||sentence[i]==‘.‘){
char_num=char_num+sentence[i];
i++;
}//得到一個數(shù)以后進(jìn)行壓棧操作
num.push(atof(char_num.c_str()));
}
?
else
{?
????????????sign=sentence[i];
i++;
switch(sign){
????????char?c;
case‘+‘:
case‘-‘:ch.top(c);
????if(c!=‘(‘)?
{calculate(cnum);ch
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-01-18?13:50??計(jì)算機(jī)程序最終版本\
?????文件????????5289??2012-03-24?14:29??計(jì)算機(jī)程序最終版本\calculate.cpp
?????目錄???????????0??2013-01-18?13:48??計(jì)算機(jī)程序最終版本\Debug\
?????文件????????4419??2012-03-24?14:29??計(jì)算機(jī)程序最終版本\計(jì)算機(jī)程序最終版本.dsp
?????文件?????????544??2012-03-24?14:20??計(jì)算機(jī)程序最終版本\計(jì)算機(jī)程序最終版本.dsw
?????文件???????41984??2013-01-18?13:50??計(jì)算機(jī)程序最終版本\計(jì)算機(jī)程序最終版本.ncb
?????文件???????48640??2013-01-18?13:50??計(jì)算機(jī)程序最終版本\計(jì)算機(jī)程序最終版本.opt
?????文件????????1357??2013-01-18?13:46??計(jì)算機(jī)程序最終版本\計(jì)算機(jī)程序最終版本.plg
評論
共有 條評論