


下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
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í),"& J必須寫(xiě)成alogb,庇必須 寫(xiě)成pi,三角函數(shù)若不是tanN形式的話(huà),要加上括號(hào)如tan (a+b), 這是由于控制臺(tái)輸入的限制和為了輸入后便于處理。子函數(shù)流
2、程:從運(yùn)算式子中讀出數(shù)字和字符,分別存于一個(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é)果。關(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ù)字分開(kāi)處理。源代碼如下:#inClude<iostre
3、am>#inClude<sstream>#inClude<string>#inClude<Cmath>#inClude<queue>#define pi 3.141592654double CalCulate( std : string );int main()/輸入式子,存于S中std: string s;Std: getline ( Std : cin , S);/ 拋出異常try/ 判斷是否有異常字符conSt Std: String jubge = "1234567890 tan Sin coS +-*/八(|) log
4、In lg sqrt pi!"for (conSt auto &i : S)if (jubge. find (i) = -1)throw 1;/ 拋出異常/ 將三角函數(shù)名化為數(shù)字與 &字符,便于識(shí)別和計(jì)算/以及將對(duì)數(shù)函數(shù)/以及階乘/以及開(kāi)方/將pi/ n化為數(shù)字size_t n = 0;while (n = s. find ("sin") != -1)s. replace (n, 3, "1&");while (n = s. find ("cos") != -1)s. replace (n, 3, &
5、quot;2&");while (n = s. find ("tan") != -1)s. replace (n, 3, "3&");while (n = s. find ("ln") != -1)s. replace (n, 2, "4&");while (n = s. find ("lg") != -1)s. replace (n, 2, "5&");while (n = s. find ("sqrt") !=
6、 -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)while (s. find ("
7、;(") != -1|s. find (")")!=-1)std : ostringstream uout;/ 存儲(chǔ)未處理字符auto left = s. begin ();/ 記錄左括號(hào)位置auto right = s.begin ();/ 記錄右括號(hào)位置while (right != s.end()/ 處理最里層括號(hào)里的字符if (*right = '(')if (*left = '(')for (auto i = left; i != right; +i)uout << *i;left = right;else i
8、f (*right = ')')if (*left != '(') throw 2;/拋出異常uout << calculate( std: string (left + 1,right);break;else if (*left != '(') uout << *right;else;+right;if (*left = '('&&right = s.end() throw 3;/拋出異常end(); +i)/輸出for (auto i = right + 1; i != s.剩余未處理符
9、uout << *i;s = uout. str ();/ 將處理一對(duì)括號(hào)后的字符串賦給 s/ 計(jì)算最后結(jié)果double result = calculate(s);/ 輸出結(jié)果std: cout << result << std: endl;catch (int e)/捕獲并處理異常using std: cout;using std: endl;cout << "Input Error!" << endl;switch (e)case 1: cout << " 式子中有異常字符! "
10、; << endl; break;case 2: cout << " 缺左括號(hào)! " << endl; break;case 3: cout << " 缺右括號(hào)! " << endl; break;case 4: cout << " 運(yùn)算符相連或?qū)?shù)等復(fù)活寫(xiě)錯(cuò)! " << endl; break;default:;system("pause");return 0;double calculate( std: string s)/ 將
11、數(shù)字和運(yùn)算符分別裝入雙向隊(duì)列和隊(duì)列適配器中std: deque<double> number;std: queue<char> symbol;std: istringstream uin(s);symbol. push('+');/添加加號(hào)為第一個(gè)運(yùn)算符double tpn; char tpc;while (uin >> tpn >> tpc)number.push_back(tpn), symbol. push(tpc);if (!uin.eof () throw 4;/拋出異常number.push_back(tpn);/ 添
12、加最后一個(gè)數(shù)字/ 計(jì)算乘方for (int i = 0, n = number. size (); i < n; +i)tpc = symbol. front (); symbol. pop();/ 取出運(yùn)算符tpn = number. front (); number. pop_front ();/ 取出數(shù)字if (tpc = '")/計(jì)算乘方double temp = number. back();number. back() = pow(temp, tpn);elsesymbol. push(tpc);/ 放回隊(duì)列,置于最后number. push_back(tp
13、n);/ 放回隊(duì)列,置于最后 / 計(jì)算三角函數(shù)以及對(duì)數(shù)for (int i = 0, n = number.size (); i < n; +i)tpc = symbol. front (); symbol. pop();/ 取出運(yùn)算符tpn = number. front (); number. pop_front ();/ 取出數(shù)字 if (tpc = '&')/計(jì)算乘方以及對(duì)數(shù)switch (int(number. back()case 1:number.back() =sin (tpn); break;case 2:number.back() =cos(t
14、pn); break;case 3:number.back() =tan (tpn); break;case 4:number.back() =log (tpn); break;case 5:number.back() =log10 (tpn); break;case 6:number.back() =sqrt (tpn); break;default:;double temp = number. back(); number. back() = log (tpn) / log (temp);else if (tpc = '$')/計(jì)算階乘int n = number. bac
15、k();number. back() = 1;for (int i = 1; i <= n; +i)number.back() *= i;elsesymbol. push(tpc);/ 放回隊(duì)列,置于最后 number. push_back(tpn);/ 放回隊(duì)列,置于最后/ 計(jì)算乘除以及取模運(yùn)算for (int i = 0, n = number.size (); i < n; +i)tpc = symbol. front (); symbol. pop();/ 取出運(yùn)算符tpn = number. front (); number. pop_front ();/ 取出數(shù)字 if (tpc = '+' | tpc = '-')symbol. push(tpc);number. push_back(tpn);else if (tpc = '*')number. back() *= tpn;/ 計(jì)算乘 else if (tpc = '/')number. back() /= tpn;/ 計(jì)算除 else/ 取模運(yùn)算double temp = number. back(); temp = int(temp) % int(tpn); number
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 典中點(diǎn)答案六下數(shù)學(xué)試卷
- 肉犢牛飼養(yǎng)階段技術(shù)課件
- 2025年02月浙江臺(tái)州市中心醫(yī)院公開(kāi)招聘高層次衛(wèi)技員54人筆試歷年專(zhuān)業(yè)考點(diǎn)(難、易錯(cuò)點(diǎn))附帶答案詳解
- 餐飲銷(xiāo)售培訓(xùn)課件
- 2025至2030大蒜行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢(xún)研究報(bào)告
- 四川招聘編制外一般教職工考試真題2024
- 2024年寧波前灣控股集團(tuán)有限公司人員招聘筆試真題
- 2025至2030菜籽市場(chǎng)前景分析及發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢(xún)研究報(bào)告
- 2025至2030不銹鋼圓鋼市場(chǎng)市場(chǎng)占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 高新區(qū)鄭州招教數(shù)學(xué)試卷
- 銀行培訓(xùn)課件:客戶(hù)投訴處理
- 【MOOC】結(jié)構(gòu)力學(xué)-武漢理工大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- GB/T 28511.1-2024平面光波導(dǎo)集成光路器件第1部分:基于平面光波導(dǎo)(PLC)的光功率分路器
- 操作手冊(cè)模板【范本模板】
- 杭州開(kāi)元森泊度假樂(lè)園案例研究(全網(wǎng)最詳細(xì))
- 2023-2024年6月廣東省普通高中學(xué)業(yè)水平考試化學(xué)試題及答案
- 《軟件質(zhì)量管理制度》
- 農(nóng)作物四級(jí)種子生產(chǎn)技術(shù)規(guī)程 第1部分:小麥DB41-T 293.1-2014
- TSG ZF001-2006《安全閥安全技術(shù)監(jiān)察規(guī)程》
- 高中 思想政治 必修1 第一課 社會(huì)主義從空想到科學(xué)、從理論到實(shí)踐的發(fā)展《課時(shí)1 原始社會(huì)的解體和階級(jí)社會(huì)的演進(jìn)》課件
- 四川省綿陽(yáng)市涪城區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期開(kāi)學(xué)考試語(yǔ)文試題(解析版)
評(píng)論
0/150
提交評(píng)論