話術師 對這略感興趣的新人
註冊時間: 2007-06-02 文章: 17 來自: 耗電量很高的地方 0.00 果凍幣
|
發表於: 2007-6-6, AM 2:51 星期三 文章主題: 順手寫的C++計算機 |
|
|
我認為程式碼加個註解是有其必要的...........
代碼: |
#include <iostream>
#include <stack>
#include <string>
#include <stdio.h>
#include <iomanip>
using namespace std;
class MATH
{
private:
stack<char> s ; //利用樣板進行STACK的建立
char op ; //讀入運算子
double n1, n2, sum ;
public:
void calculate(); //運算成員函式
};
void main()
{
MATH math; //宣告物件
math.calculate();
}
void MATH::calculate()
{
while(cin>>n1) //當輸入不滿足float跳出
{
sum=0; //設定sum=0
for(;;)
{
op=getchar(); //讀入第1個運算符
if(op=='\n') //當讀入到尾端滿足
{
if(s.empty()) //利用stack的函式empty讀取
sum =sum+n1; //stack是否有運算符
else
{
char temp=s.top(); //讀入第1個運算符
s.pop(); //把第1個運算符除去
if(temp == '+')
sum=sum+n1; //設定遇到+-如何處理
else
sum=sum-n1;
}
break;
}
cin>>n2; //讀入第2個運算子
if((op=='+')||(op=='-')) //當滿足+-算符時進入
{
if(s.empty())
{
s.push(op); //將運算子丟入STACK
sum=sum+n1;
n1=n2;
}
else
{
char temp=s.top();
s.pop();
s.push(op);
if(temp=='+')
sum=sum+n1;
else
sum=sum-n2;
n1=n2; //把n2值給n1進行運算
}
}
else if(op=='*')
n1=n1*n2;
else if(op=='/') //滿足*/時進入
n1=n1/n2;
}
cout <<showpoint <<setprecision(6) << sum << endl ; //輸出結果
}
}
} |
_________________ 人生真累呀 |
|