資源簡介
和數據結構數上的要求一樣.作業和課程設計的的要求都達到,有注西,包你滿意(請下載修正版,解決關于括號問題.謝謝)
代碼片段和文件信息
#include?
#include?
#include??//棧也可以自己寫只要寫出的棧和下面的函數名一樣即可?
#include?
using?namespace?std;
double?Evalucateexpression();?//表達示計算?
double?ConverNum(stack?&num);?//轉化為操作數?
double?Evalucate(double?b?char?c?double?a);?//計算?
char?Precede(stack?&OPTR?char?c);?//運算符優先級?
int?GetPos(char?c);?//取下標?
int?main(int?argc?char?*argv[])
{
????
????cout?<pression()?<????system(“PAUSE“);
????return?EXIT_SUCCESS;
}
double?Evalucateexpression()
{
????stack?OPND;//操作數棧?
????stack?OPTR;?//操作符棧?
????stack?num;?//多位數棧?
????OPTR.push(‘=‘);?
????char?c?=?getchar();
????bool?T?=?true;
????
????while?(c?!=?‘=‘?||?OPTR.top()?!=?‘=‘)
????{
??????????if?(isdigit(c)?||?c?==?‘.‘)??//操作數入num棧等待轉換?
??????????{
????????????????num.push(c);??????????????
????????????????c?=?getchar();?????????
??????????}
??????????else
??????????{??
??????????????if?(T)?//轉換操作數后入OPND棧?
??????????????{
??????????????????OPND.push(ConverNum(num));
??????????????}
??????????????else
??????????????{
??????????????????T?=?true;
??????????????}
??????????????char?ch?=?Precede(OPTR?c);?//判斷操作符優先級????????????
??????????????switch?(ch)
??????????????{
???????????????double?a?b;
???????????????case?‘<‘:?//優先級小則操作符入棧?
????????????????????OPTR.push(c);
????????????????????c?=?getchar();
????????????????????break;
???????????????case?‘=‘:?//優先級相等則去掉操作符(其實就是去符號)?
????????????????????OPND.pop();
????????????????????c?=?getchar();
????????????????????break;
???????????????case?‘>‘:?//優先級大則進行兩數計算?
????????????????????a?=?OPND.top();
????????????????????OPND.pop();
????????????????????b?=?OPND.top();
????????????????????OPND.pop();
????????????????????OPND.push(Evalucate(b?OPTR.top()?a));???//計算后入棧????????????????
????????????????????OPTR.pop();
????????????????????T?=?false;
????????????????????break;?
???????????????default:
????????????????????cout?<“ERROR1!“;
????????????????????system(“pause“);
????????????????????exit(0);??
??????????????}
??????????}
????}
????return?OPND.top();
}
double?Evalucate(double?b?char?c?double?a)
{
????
????switch(c)
????{
????case?‘+‘:
?????????return?b?+?a;
????case?‘-‘:
?????????return?b?-?a;
????case?‘*‘:
?????????return?b?*?a;
????case?‘/‘:
?????????return?b?/?a;
????default:
?????????cout?<“ERROR2!“;
?????????system(“pause“);
?????????exit(0);?????????????????????????????????
????}
}
double?ConverNum(stack?&num)//先計算總說再除以多少位小數?
{
????int?temp?=?1;
????int?m?=?1;
????int?size?=?num.size();
????int?point?=?0;?//計算多少小數位?
????double?sum?=?0;
????for?(int?i?=?0;?i?!=?size;?++i)
????{
????????if?(num.top()?!=?‘.‘)
????????{
????????????sum?+=?temp?*?(num.top()?-?48);
????????????temp?*=?10;
????????????num.pop();
????????}
????????else
????????{
????????????point?=?i;//計算有多少位小數?
????????????num.pop();
????????}
????}
????while?(point?!=?0)
????{
?????????m?*=
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????4333??2009-02-28?15:20??main.cpp
?????文件?????????67??2009-02-28?16:25??使用前看.txt
-----------?---------??----------?-----??----
?????????????????4400????????????????????2
- 上一篇:ADAMS 驅動函數
- 下一篇:文件夾變exe病毒專殺工具免費版.rar
評論
共有 條評論