判斷是否有異常字符->對(duì)式子進(jìn)行處理以便于計(jì)算->調(diào)用">
c++實(shí)現(xiàn)的完整功能計(jì)算器.doc

c++實(shí)現(xiàn)的完整功能計(jì)算器.doc

ID:48870912

大?。?5.17 KB

頁(yè)數(shù):11頁(yè)

時(shí)間:2020-02-03

c++實(shí)現(xiàn)的完整功能計(jì)算器.doc_第1頁(yè)
c++實(shí)現(xiàn)的完整功能計(jì)算器.doc_第2頁(yè)
c++實(shí)現(xiàn)的完整功能計(jì)算器.doc_第3頁(yè)
c++實(shí)現(xiàn)的完整功能計(jì)算器.doc_第4頁(yè)
c++實(shí)現(xiàn)的完整功能計(jì)算器.doc_第5頁(yè)
資源描述:

《c++實(shí)現(xiàn)的完整功能計(jì)算器.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、下載可編輯一些說(shuō)明:本程序支持基本的四則運(yùn)算,三角函數(shù)運(yùn)算(sin,cos,tan),指數(shù)運(yùn)算,以及對(duì)數(shù)運(yùn)算(lg,ln,log),取模運(yùn)算,同時(shí)還支持括號(hào)!主函數(shù)流程:輸入運(yùn)算式子->判斷是否有異常字符->對(duì)式子進(jìn)行處理以便于計(jì)算->調(diào)用計(jì)算沒(méi)有括號(hào)的式子的函數(shù)去除括號(hào),即先計(jì)算括號(hào)里的子式->最后得到?jīng)]有括號(hào)的式子,在調(diào)用函數(shù)計(jì)算得到結(jié)果。值得注意的是輸入運(yùn)算式子時(shí),logab必須寫成alogb,π必須寫成pi,三角函數(shù)若不是tanN形式的話,要加上括號(hào)如tan(a+b),這是由于控制臺(tái)輸入的限制和為了輸入后便于處理。子函數(shù)流程:從運(yùn)算式子中讀出數(shù)字和字符,分別存

2、于一個(gè)隊(duì)列中->按順序取出數(shù)字與字符,進(jìn)行乘方運(yùn)算,其他的再一次放回隊(duì)列中->依次再取出進(jìn)行三角函數(shù)和對(duì)數(shù)的運(yùn)算,其他依次放回->再依次取出進(jìn)行乘除和取模運(yùn)算,其他依次放回->現(xiàn)在只剩下加減運(yùn)算,依次取出計(jì)算,得到最后的結(jié)果。.專業(yè).整理.下載可編輯關(guān)鍵技術(shù):一、c++的sstream流的運(yùn)用,可以從中分別讀出運(yùn)算式子的數(shù)字與字符還有去除括號(hào)時(shí)將未處理字符(即非括號(hào)內(nèi)的字符)以及括號(hào)內(nèi)的子式處理結(jié)果輸出到流中,便于迭代去除括號(hào)。二、對(duì)沒(méi)括號(hào)的式子進(jìn)行分級(jí)處理。三、將式子的字符以及數(shù)字分開處理。源代碼如下:#include#include

3、am>#include#include#include#definepi3.141592654doublecalculate(std::string);intmain(){.專業(yè).整理.下載可編輯//輸入式子,存于s中std::strings;std::getline(std::cin,s);//拋出異常try{//判斷是否有異常字符conststd::stringjubge="1234567890tansincos+-*/^%(

4、)loglnlgsqrtpi!";for(constauto&i:s)if(jubge.fin

5、d(i)==-1)throw1;////拋出異常//將三角函數(shù)名化為數(shù)字與&字符,便于識(shí)別和計(jì)算//以及將對(duì)數(shù)函數(shù)······//以及階乘·········//以及開方·········//將pi/π化為數(shù)字size_tn=0;while((n=s.find("sin"))!=-1)s.replace(n,3,"1&");while((n=s.find("cos"))!=-1)s.replace(n,3,"2&");.專業(yè).整理.下載可編輯while((n=s.find("tan"))!=-1)s.replace(n,3,"3&");while((n=s.find("

6、ln"))!=-1)s.replace(n,2,"4&");while((n=s.find("lg"))!=-1)s.replace(n,2,"5&");while((n=s.find("sqrt"))!=-1)s.replace(n,4,"6&");while((n=s.find("log"))!=-1)s.replace(n,3,"@");while((n=s.find("!"))!=-1)s.replace(n,1,"$7");while((n=s.find("pi"))!=-1)s.replace(n,2,std::to_string(pi));//去除括號(hào)w

7、hile(s.find("(")!=-1

8、

9、s.find(")")!=-1){std::ostringstreamuout;//存儲(chǔ)未處理字符autoleft=s.begin();//記錄左括號(hào)位置autoright=s.begin();//記錄右括號(hào)位置while(right!=s.end()){//處理最里層括號(hào)里的字符if(*right=='('){.專業(yè).整理.下載可編輯if(*left=='('){for(autoi=left;i!=right;++i)uout<<*i;}left=right;}elseif(*right==')'){if(*left!='

10、(')throw2;////拋出異常uout<

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。