![C++計(jì)算數(shù)學(xué)計(jì)算式內(nèi)附源碼及附件_第1頁](http://file4.renrendoc.com/view/ff4f91ee0afb9560140ebda5f0fb328b/ff4f91ee0afb9560140ebda5f0fb328b1.gif)
![C++計(jì)算數(shù)學(xué)計(jì)算式內(nèi)附源碼及附件_第2頁](http://file4.renrendoc.com/view/ff4f91ee0afb9560140ebda5f0fb328b/ff4f91ee0afb9560140ebda5f0fb328b2.gif)
![C++計(jì)算數(shù)學(xué)計(jì)算式內(nèi)附源碼及附件_第3頁](http://file4.renrendoc.com/view/ff4f91ee0afb9560140ebda5f0fb328b/ff4f91ee0afb9560140ebda5f0fb328b3.gif)
![C++計(jì)算數(shù)學(xué)計(jì)算式內(nèi)附源碼及附件_第4頁](http://file4.renrendoc.com/view/ff4f91ee0afb9560140ebda5f0fb328b/ff4f91ee0afb9560140ebda5f0fb328b4.gif)
![C++計(jì)算數(shù)學(xué)計(jì)算式內(nèi)附源碼及附件_第5頁](http://file4.renrendoc.com/view/ff4f91ee0afb9560140ebda5f0fb328b/ff4f91ee0afb9560140ebda5f0fb328b5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
溫馨提示程序語言:C、C++、C*、Python〔紅色字體表示本課設(shè)使用的程序設(shè)計(jì)語言〕圖形功能選項(xiàng):Win32控制臺(tái)程序〔黑框、文本界面〕、Win32程序、MFC、WinForm、Direct*10〔黑體標(biāo)明表示本課設(shè)的程序圖形類別,默認(rèn)為非圖形界面Win32控制臺(tái)程序〕數(shù)據(jù)構(gòu)造:根底類型、數(shù)組、鏈表、雙向鏈表、搜索樹〔非平衡二叉樹〕、平衡二叉樹、鏈表與平衡二叉樹相結(jié)合、堆棧、隊(duì)列、串、圖〔黑體標(biāo)明表示本課設(shè)使用的數(shù)據(jù)構(gòu)造〕C++語言項(xiàng):STL庫(kù)〔黑體標(biāo)明表示使用C++的STL庫(kù)〕編譯環(huán)境:Windows764位旗艦版〔Linu*及其他環(huán)境請(qǐng)慎重下載〕集成開發(fā)環(huán)境:VisualC++6.0、DEVC++、CodeBlocks、VisualStudio2015均可通過編譯?!矞\藍(lán)色字體表示無法通過編譯〕分多頭文件編譯:否〔所有代碼根本都包含在一個(gè)文件,如需試驗(yàn)頭文件功能,請(qǐng)自行參考相關(guān)文獻(xiàn)〕容說明:1、課設(shè)題目及預(yù)覽容將在第二頁開場(chǎng)展示。2、代碼行數(shù):175行3、目錄所示容,本文根本涵蓋,如無容,會(huì)在本頁進(jìn)展說明。4、附錄絕對(duì)包含用戶使用手冊(cè)及程序完整源代碼和詳細(xì)注釋。5、如需下載其他頭文件〔例如Direct*需另行配置〕,本文會(huì)在此進(jìn)展說明。6、本文撰寫容僅供學(xué)習(xí)參考,另外,由于本人水平有限,編寫之處難免存在錯(cuò)誤和紕漏,懇請(qǐng)各位教師或同學(xué)批評(píng)指正。題目:輸入一個(gè)算式,并計(jì)算結(jié)果表1整體思路首先,從屏幕讀入一個(gè)字符串存儲(chǔ)到str,比方1/20-5+((2-10*5)+5-10*2)開場(chǎng)將中綴表達(dá)式添加到字符串隊(duì)列:stringQueueMiddle第一,檢索str里的字符,如果是數(shù)字就添加到strNumber字符串的末尾第二,檢索str里的字符,如果遇到+-*/,就將strNumber數(shù)字進(jìn)隊(duì),strSymbol運(yùn)算符進(jìn)隊(duì)循環(huán)進(jìn)展,直到到達(dá)str的末尾。其次,將中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式,將其添加到字符串隊(duì)列stringQueueBack第一,遇到數(shù)字就直接將數(shù)字字符串添加到隊(duì)列第二,如果stringStack棧為空,則將運(yùn)算符字符進(jìn)棧第三,如果stringStack棧不為空,假設(shè)第一個(gè)運(yùn)算符的優(yōu)先級(jí)小于等于棧頂?shù)倪\(yùn)算符的優(yōu)先級(jí),則先把棧的所有高于等于第一個(gè)運(yùn)算符添加到隊(duì)列〔然后出?!?,再把低或等的運(yùn)算符壓入棧第四,如果遇到左括號(hào),則直接壓棧第五,遇到右括號(hào),則直接把左括號(hào)右邊的所有運(yùn)算符出棧,添加到隊(duì)列表2中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式例子例如1/20-5+((2-10*5)+5-10*2)stringQueueMiddle(中綴表達(dá)式隊(duì)列)stringStack(棧)stringQueueBack(后綴表達(dá)式隊(duì)列)1/20-5+((2-10*5)+5-10*2)/20-5+((2-10*5)+5-10*2)1遇到數(shù)字直接入隊(duì)20-5+((2-10*5)+5-10*2)/1???,運(yùn)算符入棧-5+((2-10*5)+5-10*2)120遇到數(shù)字直接入隊(duì)5+((2-10*5)+5-10*2)-120/-的優(yōu)先級(jí)低于/+((2-10*5)+5-10*2)120/5-遇到數(shù)字直接入隊(duì)((2-10*5)+5-10*2)+120/5--與+運(yùn)算符的優(yōu)先級(jí)一樣,則先出棧,在入棧(2-10*5)+5-10*2)+(120/5-遇到(,直接入棧2-10*5)+5-10*2)+((120/5-同上-10*5)+5-10*2)+((120/5-210*5)+5-10*2)+((-120/5-2因?yàn)?在棧里,(的優(yōu)先級(jí)最低*5)+5-10*2)+((-120/5-2105)+5-10*2)+((-*120/5-210*的優(yōu)先級(jí)高于-,入棧)+5-10*2)+((-*120/5-2105+5-10*2)+(120/5-2105*-遇到),則把第一個(gè)(之前的所有運(yùn)算符彈出入隊(duì),并出棧(5-10*2)+(+120/5-2105*--10*2)+(+120/5-2105*-510*2)+(-120/5-2105*-5+優(yōu)先級(jí)相等的運(yùn)算符彈出入隊(duì),-入棧*2)+(-120/5-2105*-5+102)+(-*120/5-2105*-5+10*優(yōu)先級(jí)高于-,入棧)+(-*120/5-2105*-5+102120/5-2105*-5+102*-+遇到),彈出所有運(yùn)算符,并且中綴表達(dá)式到達(dá)結(jié)尾,彈出所有運(yùn)算符表3后綴表達(dá)式計(jì)算例子120/5-2105*-5+102*-+后綴表達(dá)式計(jì)算遇到數(shù)字就壓棧,只要遇到運(yùn)算符就把棧中的兩個(gè)數(shù)字拿出來運(yùn)算,把運(yùn)算結(jié)果再壓到棧中stringQueueBack(后綴表達(dá)式隊(duì)列)stringStack(棧)120/5-2105*-5+102*-+20/5-2105*-5+102*-+1數(shù)字則入棧/5-2105*-5+102*-+120遇到運(yùn)算符,則把棧頂?shù)膬蓚€(gè)數(shù)字彈出來運(yùn)算,將運(yùn)算結(jié)果壓棧,1/20=00.55-2105*-5+102*-+0.05-2105*-5+102*-+0.055先彈出來的作為右運(yùn)算數(shù)〔0.05-5〕2105*-5+102*-+-4.95105*-5+102*-+-4.9525*-5+102*-+-4.95210*-5+102*-+-4.952105彈出10*5,計(jì)算結(jié)果50入棧-5+102*-+-4.95250彈出2-50,計(jì)算結(jié)果-48入棧5+102*-+-4.95-48+102*-+-4.95-485102*-+-4.95-432*-+-4.95-4310*-+-4.95-43102-+-4.95-4320+-4.95-63-67.95注:空白處步驟類似,不再贅述運(yùn)行結(jié)果如下列圖所示:附錄用戶使用手冊(cè)1、根據(jù)提示,輸入一條計(jì)算式即可。2、開頭無法輸入負(fù)數(shù),否則程序會(huì)崩潰。3、輸入的計(jì)算式需正確,否則會(huì)崩潰程序源代碼*include<iostream>*include<stack>*include<queue>*include<string>*include<cctype>*include<stdio.h>*include<stdlib.h>*pragmawarning(disable:4996)usingnamespacestd;classE*pression{public:voidsetE*pression(); //從屏幕獲取一行計(jì)算式子voidcalculationResult(); //計(jì)算出結(jié)果,并輸出private:voidtransformation(); //將中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式stack<string>stringStack; //棧queue<string>stringQueueMiddle; //存儲(chǔ)中綴表達(dá)式的隊(duì)列queue<string>stringQueueBack; //存儲(chǔ)后綴表達(dá)式的隊(duì)列};voidE*pression::setE*pression(){charch[200];stringstr; //獲取屏幕的表達(dá)式stringstrNumber; //暫時(shí)存儲(chǔ)數(shù)字stringstrSymbol; //暫時(shí)存儲(chǔ)運(yùn)算符inti=0; cout<<"請(qǐng)輸入一個(gè)表達(dá)式〔不需要輸入=,請(qǐng)不要輸入無謂的字符隔開,比方空格〕:"<<endl; cout<<"\t"; cin.getline(ch,200); str=ch;for(i=0;i<str.size();i++){if(str[i]>='0'&&str[i]<='9'||'.'==str[i]){ strNumber+=str[i]; }else{ stringQueueMiddle.push(strNumber); //將數(shù)字添加到隊(duì)列 strNumber.clear(); //清空字符串 strSymbol+=str[i]; stringQueueMiddle.push(strSymbol); //將符號(hào)添加到隊(duì)列 strSymbol.clear(); //清空字符串 } }//將最后一個(gè)數(shù)字添加到隊(duì)列 stringQueueMiddle.push(strNumber); //將數(shù)字添加到隊(duì)列 strNumber.clear(); //清空字符串 transformation();}voidE*pression::transformation(){inti=0;for(;!stringQueueMiddle.empty();stringQueueMiddle.pop()){if(isdigit(stringQueueMiddle.front()[0])) //判斷該字符串的第一個(gè)字符是否為數(shù)字 stringQueueBack.push(stringQueueMiddle.front()); //純數(shù)字則將該字符串添加到后綴表達(dá)式隊(duì)列elseif(stringStack.empty()||'('==stringQueueMiddle.front()[0]) stringStack.push(stringQueueMiddle.front()); //如果??栈蛘哂龅?,則直接進(jìn)棧elseif('+'==stringQueueMiddle.front()[0]||'-'==stringQueueMiddle.front()[0]){if(!stringStack.empty()&&'*'==stringStack.top()[0]||'/'==stringStack.top()[0]){ //棧不空,則棧中有*/則出棧//棧中只要有連續(xù)的+-*/就出棧,且棧不能為空,遇到(也不出棧for(;!stringStack.empty()&&'('!=stringStack.top()[0];stringStack.pop()) stringQueueBack.push(stringStack.top()); //*/進(jìn)入后綴表達(dá)式隊(duì)列 }elseif(!stringStack.empty()&&'+'==stringStack.top()[0]||'-'==stringStack.top()[0]){ //如果遇到同等級(jí)的運(yùn)算符,則先出棧再進(jìn)棧 stringQueueBack.push(stringStack.top()); stringStack.pop(); //棧頂出棧 } stringStack.push(stringQueueMiddle.front()); //+-優(yōu)先級(jí)低,直接進(jìn)棧 }elseif('*'==stringQueueMiddle.front()[0]||'/'==stringQueueMiddle.front()[0]){if(!stringStack.empty()&&'*'==stringStack.top()[0]||'/'==stringStack.top()[0]){ //棧不空,則棧中有*/則出棧 stringQueueBack.push(stringStack.top()); //進(jìn)后綴表達(dá)式的隊(duì) stringStack.pop(); } stringStack.push(stringQueueMiddle.front()); //進(jìn)棧 }elseif(')'==stringQueueMiddle.front()[0]){ //遇到右括號(hào),則左括號(hào)之前的運(yùn)算符都彈出for(;'('!=stringStack.top()[0];stringStack.pop()) stringQueueBack.push(stringStack.top()); //運(yùn)算符依次進(jìn)入后綴表達(dá)式隊(duì)列 stringStack.pop(); //彈出( } }for(;!stringStack.empty();stringStack.pop()){ //中綴表達(dá)式掃描完畢,則棧中的所有運(yùn)算符彈出if('('!=stringStack.top()[0]) stringQueueBack.push(stringStack.top()); //將棧中的運(yùn)算符添加到后綴表達(dá)式隊(duì)列 }}voidE*pression::calculationResult(){doubleback=0.0; //記錄第一個(gè)從棧頂彈出來的元素doublefront=0.0; //記錄第二個(gè)從棧頂彈出來的元素doubleresult=0.0; //記錄運(yùn)算結(jié)果charch[100];stringstr;for(;!stringQueueBack.empty();stringQueueBack.pop()){if(isdigit(stringQueueBack.front()[0])) //判斷該字符串的第一個(gè)字符是否為數(shù)字 stringStack.push(stringQueueBack.front()); //純數(shù)字則將該字符串進(jìn)棧else{ //遇到運(yùn)算符switch(stringQueueBack.front()[0]) {case'+': back=atof(stringStack.top().c_str()); //彈出第一個(gè)棧頂元素 stringStack.pop(); front=atof(stringStack.top().c_str()); //彈出第二個(gè)棧頂元素 stringStack.pop(); result=front+back; sprintf(ch,"%lf",result); //將浮點(diǎn)數(shù)轉(zhuǎn)換成字符串 str=ch; stringStack.push(str);break;case'-': back=atof(stringStack.top().c_str()); //彈出第一個(gè)棧頂元素 stringStack.pop(); front=atof(stringStack.top().c_str()); //彈出第二個(gè)棧頂元素 stringStack.pop(); result=front-back; sprintf(ch,"%lf",result); //將浮點(diǎn)數(shù)轉(zhuǎn)換成字符串 str=ch; stringStack.push(str);break;case
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版地理八年級(jí)上冊(cè)《第三節(jié) 中國(guó)的水資源》聽課評(píng)課記錄1
- 人教版八年級(jí)地理上冊(cè)4.1《交通運(yùn)輸》聽課評(píng)課記錄
- 部編版道德與法治七年級(jí)上冊(cè)第一單元 成長(zhǎng)的節(jié)拍 復(fù)習(xí)聽課評(píng)課記錄
- 湘教版數(shù)學(xué)九年級(jí)下冊(cè)《小結(jié)練習(xí)(2)》聽評(píng)課記錄5
- 小學(xué)二年級(jí)上冊(cè)數(shù)學(xué)口算練習(xí)題人教版新課標(biāo)
- 冀教版數(shù)學(xué)九年級(jí)上冊(cè)27.2《反比例函數(shù)的圖象和性質(zhì)》聽評(píng)課記錄
- 財(cái)務(wù)人員保密協(xié)議書范本
- 宿遷商務(wù)樓房屋租賃合同范本
- 購(gòu)房按揭貸款合同范本
- 2025年度電影演員主演合約中的票房分成及收益分配合同
- GB/T 29361-2012電子物證文件一致性檢驗(yàn)規(guī)程
- GB/T 16475-1996變形鋁及鋁合金狀態(tài)代號(hào)
- 無紙化會(huì)議系統(tǒng)解決方案
- 上海鐵路局勞動(dòng)安全“八防”考試題庫(kù)(含答案)
- 《愿望的實(shí)現(xiàn)》教學(xué)設(shè)計(jì)
- 效率提升和品質(zhì)改善方案
- 義務(wù)教育學(xué)科作業(yè)設(shè)計(jì)與管理指南
- 物業(yè)客服培訓(xùn)PPT幻燈片課件(PPT 61頁)
- 《汽車發(fā)展史》PPT課件(PPT 75頁)
- 工地試驗(yàn)室儀器期間核查作業(yè)指導(dǎo)書
- 反詐騙防詐騙主題教育宣傳圖文PPT教學(xué)課件
評(píng)論
0/150
提交評(píng)論