MFC 實現 加減乘除,括號,乘方的 計算器

2021-07-02 04:17:52 字數 2249 閱讀 4220

mfc 實現  可加減乘除,括號,乘方 以及進製轉換的 計算器

一、帶括號的四則運算以及乘方運算

輸入的字串為中綴表示式,我們對表示式進行求值,則首先要解決的問題即為運算優先順序,然後再進行求值,通俗的說就是我先根據計算優先順序確定好表示式計算的順序,然後我在根據這個順序一步一步進行計算。。

那麼,首先,我們先處理運算優先順序,這裡我們用到資料結構以及離散數學裡面的乙個知識點,將中綴表示式轉化為後(前)綴表示式,或者說是將中序遍歷表示式樹轉化為後(前)序遍歷。這裡 小熊 給大家介紹的方法是 中綴表示式轉化為字尾表示式。

學過了資料結構的同學這裡應該很容易理解,比如表示式a

*(b+ c)-d我們這裡轉化的規則為:

從左到右掃瞄a*(b + c)-d的每一數字和符號,若是數字就輸出,即成為字尾表示式的一部分;若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於棧頂符號(乘方優先乘除,乘除優先加減)則棧頂元素依次出棧並輸出,並將當前符號進棧,一直到最終輸出字尾表示式為止。【ps:這裡「輸出」的意思是將字元存入 乙個字串裡面】。

考慮到讀者可能還是感到有點迷惑,小熊 以具體的例子給大家進行分析吧!比如,輸入的表示式為9+(3-1)*3+10/2【這樣運算符號在兩數字之間的,叫做中綴表示式】

【ps:下圖非原創,為了大家能夠清楚地理解這個過程,引用了別人的例子

相信看完這個例子,大家應該都理解這個過程了!下面給出相應的原始碼

預備工作:

#include  「stack」

#include 「math.h」

using namespace std;

const char lnumfront = '[';//兩個數字之間的分隔符

const char rnumback = ']';//兩個數字之間的分隔符

const cstring lpct_opch = "+-*/^";//儲存運算子

int ccalculatordlg::prioritylevel(char op)

bool ccalculatordlg::isopr(char c)

return false;

}//中綴轉為字尾

cstring ccalculatordlg::infixtosuffix(cstring szin)

ans += rnumback;

}else if(optr.empty())

else if(c=='(') //無條件壓棧

else if(c==')') //彈棧並輸出

ans+=optr.top();

optr.pop();

}optr.pop();

} else//其他條件即為 + - * / ^

optr.push(c);}}

}while(!optr.empty())

return ans;

}//下面就是字尾表示式得出答案的過程,由於比較簡單,這個過程由讀者自己思考,小熊在這裡只給出原始碼:

double ccalculatordlg::suffixtoresult(cstring szsuffix)

else

ndecres = ndecres*nsrc + ntmp;

}//將十進位制轉為dst進製

int ndiv = ndecres,nrem;

doelse

}while(ndiv != 0);

//將szans逆序

for( i = 0,j = szans.getlength()-1;i < j;i++,j--)

return szans;

}

//附上小熊計算器的效果圖

web加減乘除法c C 實現簡單的加減乘除計算器

第一次學習c 做了個簡單的加減乘除計算器,只能實現兩個因數的運算。主要是練習下c 程式設計,和以前用過的vb差不多。與vb6不同的是,c 區分大小寫。windows視窗程式主要也是由一些控制項組成,響應響應的事件 event 實現具體的功能。1.效果圖如下所示 2.如下所示 using system...

實現帶括號加減乘除運算

問題描述 輸入乙個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。輸入格式 輸入一行,包含乙個表示式。輸出格式 輸出這個表示式的值。樣例輸入 1 2 3 4 5 樣例輸出 4資料規模和約定 表示式長度不超過100,表示式運算合法且運算過程都在int內進行。include includ...

複數的加減乘除及開方乘方運算

include includeusing namespace std const double pi 3.1415926535897932384626433 class fushu fushu operator const fushu f fushu operator const fushu f f...