




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)名稱:數(shù)據(jù)構(gòu)造系:計(jì)算機(jī)科學(xué)系學(xué)生姓名:李錫會(huì)班級(jí):13計(jì)算機(jī)科學(xué)與技術(shù)1班學(xué)號(hào):18成績(jī):指引教師:肖錦輝老師開學(xué)時(shí)間:-年第2學(xué)期
一.設(shè)計(jì)題目算術(shù)表達(dá)式求值二.重要內(nèi)容(所選課題需求分析,實(shí)現(xiàn)功能等)1、程序能對(duì)所輸入表達(dá)式作簡(jiǎn)樸判斷,如表達(dá)式有錯(cuò)。2、能解決單目運(yùn)算符:+、-。三.課題設(shè)計(jì)基本思想,原理和算法描述(涉及課題所用數(shù)據(jù)構(gòu)造,界面設(shè)計(jì)、輸入/輸出設(shè)計(jì),功能模塊設(shè)計(jì),符號(hào)闡明等)對(duì)于中綴表達(dá)式,普通運(yùn)算規(guī)則如下:1、先乘方,再乘除,最后加減。2、同級(jí)運(yùn)算從左算到右。3、先括號(hào)內(nèi),再括號(hào)外。操作符號(hào):+-*/^%().依照實(shí)際經(jīng)驗(yàn),可以對(duì)運(yùn)算符設(shè)立統(tǒng)一優(yōu)先級(jí),從而以便比較。上面討論+、-為雙目運(yùn)算符,如單目運(yùn)算符,編程實(shí)現(xiàn)時(shí),可在前面加上0而轉(zhuǎn)化為雙目運(yùn)算符。思路如下:1、將optr棧和opnd棧清空,在optr棧中加入一種‘=’。2、從輸入流獲取一字符ch,循環(huán)執(zhí)行環(huán)節(jié)3至環(huán)節(jié)5直到求出表達(dá)式值為止。3、取出optr棧頂optrTop,當(dāng)optrTop=‘=’且ch=‘=’時(shí),整個(gè)表達(dá)式求值完畢,這時(shí)opnd棧棧頂元素為表達(dá)式值。4、若ch不是操作符,則將字符放回輸入流(cin.putback),讀操作符operand;將operand加入opnd棧,讀入下一種字符ch。5、若ch是操作符,按如下方式進(jìn)行解決:a.若ch為單目運(yùn)算符,則在ch前面加上操作符0,也就是將0入pond。b.若optrTop與ch不匹配,例如optrTop=‘)’且ch=‘(’,顯示錯(cuò)誤信息。c.若optrTop=‘(’且ch=‘)’,則從optr棧退出棧頂‘(’,去括號(hào),然后從輸入流中讀入字符并送入ch;d.若ch=‘(‘或optrTop比ch優(yōu)化級(jí)低,則ch入optr,從輸入流中取下一種字符ch;e.若optrTop不不大于或等于ch優(yōu)先級(jí),則從opnd棧退出left和right,從optr棧退出theta,形成運(yùn)算符指令(left)theta(right),成果入opnd棧。四.源程序及注釋需要用到頭文獻(xiàn)有:lk_stack.hnode.hutility.hcal.h//cal.h#ifndef__CALCULATOR_H__#define__CALCULATOR_H__#include"lk_stack.h"http://鏈棧類template<classElemType>classCalculator{private: LinkStack<ElemType>opnd; LinkStack<char>optr; //charGetChar(); intOperPrior(charop); voidGet2Operands(ElemType&left,ElemType&right); ElemTypeOperate(ElemTypeleft,charop,ElemTyperight); boolIsOperator(charch);public: Calculator(){}; virtual~Calculator(){}; voidRun();};template<classElemType>intCalculator<ElemType>::OperPrior(charch){if(ch=='=')return1;if(ch=='^')return5;if(ch=='('||ch==')')return2;if(ch=='+'||ch=='-')return3;if(ch=='*'||ch=='/'||ch=='%')return4;return0;}template<classElemType>boolCalculator<ElemType>::IsOperator(charch){if(ch=='='||ch=='('||ch=='*'||ch=='/'||ch=='+'||ch=='-'||ch==')'||ch=='%'||ch=='^')returntrue;elsereturnfalse;};template<classElemType>ElemTypeCalculator<ElemType>::Operate(ElemTypeleft,chartheta,ElemTyperight)//操作成果:執(zhí)行運(yùn)算leftopright{ElemTyperesult;if(theta=='+')result=left+right;//加法運(yùn)算elseif(theta=='-')result=left-right;//減法運(yùn)算elseif(theta=='*')result=left*right;//乘法運(yùn)算//elseif(theta=='/'&&right==0)throw"除數(shù)為零!";//拋出異常elseif(theta=='/')result=left/right;//除法運(yùn)算elseif(theta=='^')result=pow(left,right);elseif(theta=='%')result=(int)left%(int)right;returnresult;//返回result}template<classElemType>voidCalculator<ElemType>::Get2Operands(ElemType&left,ElemType&right)//操作成果:從棧opnd中退出兩個(gè)操作數(shù){opnd.Pop(right);opnd.Pop(left);}template<classElemType>voidCalculator<ElemType>::Run(){ optr.Clear(); opnd.Clear(); optr.Push('='); charch; charpriorChar; charoptrTop; ElemTypeoperand; charop; priorChar='='; ch=GetChar();optr.Top(optrTop); while(optrTop!='='||ch!='=') { if(isdigit(ch)||ch=='.') { cin.putback(ch); cin>>operand; opnd.Push(operand); priorChar='0'; ch=GetChar(); } elseif(!IsOperator(ch)) { cout<<"表達(dá)式錯(cuò)誤!"<<endl; return; } else { if((priorChar=='='||priorChar=='(')&&(ch=='+'||ch=='-')) { opnd.Push(0); priorChar='0'; }if(optrTop=='('&&ch==')') { optr.Pop(optrTop); ch=GetChar(); priorChar=')'; } elseif(ch=='('||OperPrior(optrTop)<OperPrior(ch)) { optr.Push(ch); priorChar=ch; ch=GetChar(); } else { optr.Pop(op); ElemTypeleft,right; Get2Operands(left,right); opnd.Push(Operate(left,op,right)); } } optr.Top(optrTop); } opnd.Top(operand); cout<<operand<<endl;};#endif//main.cpp#include"utility.h"#include"cal.h"http://計(jì)算器類intmain(void){try//用try封裝也許浮現(xiàn)異常代碼{do{cout<<"輸入一種表達(dá)式:"<<endl;Calculator<double>cal; cal.Run();//表達(dá)式求值cout<<"與否繼續(xù)";}while(UserSaysYes());}catch(Errorerr)//捕獲并解決異常{err.Show();//顯示異常信息}system("PAUSE");//調(diào)用庫(kù)函數(shù)system()return0;//返回值,返回操作系統(tǒng)}五、運(yùn)營(yíng)示例及成果分析(截圖分析)六、調(diào)試和運(yùn)營(yíng)程序過(guò)程中產(chǎn)生問(wèn)題及采用辦法Throw語(yǔ)句出錯(cuò),用cout和return代替。七、總結(jié)和展望(400字以上)感謝教師給咱們這次課程設(shè)計(jì)機(jī)會(huì),在本次項(xiàng)目中,雖然我面臨著許多困難,但是,通過(guò)不斷地努力與調(diào)試后,終于完畢了該次項(xiàng)目。但是,該項(xiàng)目局限性,加上運(yùn)營(yíng)環(huán)境問(wèn)題,也許會(huì)浮現(xiàn)不穩(wěn)定,但總體來(lái)說(shuō),可以順利實(shí)現(xiàn)項(xiàng)目規(guī)定。固然,在完畢該次項(xiàng)目過(guò)程中,我意識(shí)到自己在基本知識(shí)上各種局限性,同步,我也為了完畢項(xiàng)目而不斷努力地復(fù)習(xí)并驗(yàn)證知識(shí)點(diǎn)。我但愿在后來(lái)日子里,可以接受更大挑戰(zhàn),由于那不但可以給自己鍛煉,還可以在那個(gè)過(guò)程中,學(xué)到更多項(xiàng)目經(jīng)驗(yàn)。說(shuō)夸張一點(diǎn),那是算是寶貴財(cái)富吧。固然,需要在擁有一定知識(shí)基本,才干接受一定難度項(xiàng)目,因此,必要先從基本知識(shí)開始,固然需要對(duì)基本知識(shí)加以鞏固,然后不斷地上機(jī)操作,并加以鍛煉。說(shuō)實(shí)話,對(duì)初次完畢項(xiàng)目,難度比較大,由于要考慮各種
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025屆河北省阜平一中化學(xué)高二下期末質(zhì)量檢測(cè)模擬試題含解析
- 2025屆云南省保山市昌寧一中化學(xué)高一下期末經(jīng)典模擬試題含解析
- 母雞孵化小雞管理辦法
- 公務(wù)接待出差管理辦法
- 保健食品備案管理辦法
- 巨細(xì)胞病毒抑制機(jī)制-洞察及研究
- 三查四定知識(shí)詳解與應(yīng)用
- 沈陽(yáng)牌匾設(shè)置管理辦法
- 《煙花爆竹企業(yè)安全風(fēng)險(xiǎn)辨識(shí)與分級(jí)管控標(biāo)準(zhǔn)》
- 高壓直流輸電新型換流拓?fù)涞碾娐吩O(shè)計(jì)與性能優(yōu)化
- 機(jī)加工工藝培訓(xùn)
- CT增強(qiáng)掃描造影劑外滲的預(yù)防與處理
- 深靜脈置管的維護(hù)與護(hù)理
- 孤獨(dú)癥業(yè)務(wù)管理制度
- 勞務(wù)服務(wù)購(gòu)買協(xié)議書范本
- 校準(zhǔn)員試題及答案
- 2025-2030年中國(guó)臨空經(jīng)濟(jì)行業(yè)深度評(píng)估及市場(chǎng)研究發(fā)展研究報(bào)告
- 蕪湖勞動(dòng)合同書版模板
- DB31/T 921-2015婚慶服務(wù)規(guī)范
- 學(xué)習(xí)解讀《水利水電建設(shè)工程驗(yàn)收規(guī)程》SLT223-2025課件
- 火災(zāi)撲救無(wú)人機(jī)應(yīng)急預(yù)案(3篇)
評(píng)論
0/150
提交評(píng)論