資源簡介
計算器類: 設計一個計算器類模板,適用各類型表達式的“+、-、×、/” 數學四則運算以及“>、>=、<、<=、!=、==”等關系運算。數學四則運算表達式中可含有加、減、乘、除運算符以及各型數據的運算對象。程序可以直接輸入數學表達式以及關系表達式,不需要任何轉換,就可以直接輸出數學四則運算和邏輯運算的結果。并且操作簡單、界面清晰、靈活、實用、方便等。(系統功能可充分自由發揮)。
擴展功能:三角運算、進制轉換、開方、冪指數等。

代碼片段和文件信息
#include
#include
#include
#include
using?namespace?std;
//判斷是否為括號
bool?isPra(char?c)
{
????if(c==‘(‘||c==‘)‘)
????????return?true;
????else
????????return?false;
}
//獲得符號的優先性
int?getPri(char?c)
{
????switch(c)
????{
????case?‘+‘:
????case?‘-‘:
????????return?0;???//如果是加減,返回0
????????break;
????case?‘*‘:
????case?‘/‘:
????????return?1;???//如果是乘除,返回1
????????break;
????case?‘(‘:
????case?‘)‘:
????????return?-1;??//注意,這里將括號設為最低優先級,因此括號不會被彈出,除非遇到右括號
????????break;
?????}
}
//判斷符號的優先性
void?check(char?c?stack&?coll2?deque&?coll3)
{
????if(coll2.empty())
????{
????????coll2.push(c);
????????return;
????}
????if(isPra(c))
????{
????????if(c==‘(‘)
????????????coll2.push(c);
????????else
????????{
????????????//彈出所有元素直到遇到左括號
????????????while(coll2.top()!=‘(‘)
????????????{
????????????????char?ch?=?coll2.top();
????????????????coll3.push_back(ch);
????????????????coll2.pop();
????????????}
????????????//當遇到左括號時,彈出但不加入coll3(后綴表達式中)
????????????coll2.pop();
????????}
????}
????else????//如果不是括號
????{
????????//取出棧頂元素,與當前符號進行優先性比較
????????char?sym?=?coll2.top();
????????//比較兩符號的優先性
????????if(getPri(c)<=getPri(sym))
????????{
????????????//如果c的優先性比棧頂符號小或等于,彈出棧頂元素
????????????coll2.pop();
????????????//并將其壓入coll3(后綴表達式)中
????????????coll3.push_back(sym);
????????????//遞歸調用check比較當前符號c與下一個棧頂符號的優先性
????????????check(ccoll2coll3);
????????}
????????else
????????{
????????????//如果c比棧頂符號優先級大,那將c壓入coll2(操作符棧)中
????????????coll2.push(c);
????????}
????}
}
//從coll中取出元素,分配元素到coll2和coll3中
void?allocate(deque&?coll1?stack&?coll2?deque&?coll3)
{
????while(!coll1.empty())
????{
????????char?c?=?coll1.front();
????????coll1.pop_front();
????????if(c>=‘0‘&&c<=‘9‘)
????????{
????????????coll3.push_back(c);
????????}
????????else
????????{
????????????//調用check函數,針對不同情況作出不同操作
????????????check(ccoll2coll3);
????????}
????}
????//如果輸入結束,將coll2的元素全部彈出,加入后綴表達式中
????while(!coll2.empty())
????{
????????char?c?=?coll2.top();
????????coll3.push_back(c);
????????coll2.pop();
????}
}
//計算后綴表達式
void?calculate(deque&?coll3?stack&?coll4)
{
????while(!coll3.empty())
????{
????????char?c?=?coll3.front();
????????coll3.pop_front();
????????//如果是操作數,壓入棧中
????????if(c>=‘0‘&&c<=‘9‘)
????????{
????????????//減去‘0‘得出偏移值,即為真實數值(如果直接轉換成int,結果不對,因為char?轉換為int是其編碼值,例如‘1‘的編碼值為49
????????????int?op?=?c-‘0‘;
????????????coll4.push(op);
????????}
????????else?????//如果是操作符,從棧中彈出元素進行計算
????????{
????????????int?op1?=?coll4.top();
????????????coll4.pop();
????????????int?op2?=?coll4.top();
????????????coll4.pop();
????????????switch(c)
????????????{
????????????case?‘+‘:
????????????????coll4.push(op2+op1);
????????????????break;
????????????case?‘-‘:
????????????????coll4.push(op2-op1);
????????????????break;
????????????case?‘*‘:
????????????????coll4.push(op2*op1);
???
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2015-07-06?21:28??計算器類\
?????文件????????4154??2015-06-18?13:03??計算器類\calculate.cpp
?????文件?????1006134??2015-07-06?21:28??計算器類\calculate.exe
?????文件???????74339??2015-07-06?21:28??計算器類\calculate.o
- 上一篇:根據JSON導出圖集的小圖V2.0
- 下一篇:虛擬示波器軟件+stm32測試程序
評論
共有 條評論