數(shù)據(jù)結(jié)構(gòu)專業(yè)課程設(shè)計(jì)方案報(bào)告_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)專業(yè)課程設(shè)計(jì)方案報(bào)告_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)專業(yè)課程設(shè)計(jì)方案報(bào)告_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)專業(yè)課程設(shè)計(jì)方案報(bào)告_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)專業(yè)課程設(shè)計(jì)方案報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論