版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計(jì) 說 明 書</p><p> 課程名稱: 數(shù)據(jù)結(jié)構(gòu) </p><p> 設(shè)計(jì)題目: 表達(dá)式求值 </p><p> 院 系: </p><p> 學(xué)生姓名: <
2、;/p><p> 學(xué) 號(hào): </p><p><b> 專業(yè)班級(jí): </b></p><p> 指導(dǎo)教師: </p><p> 2011年 6 月 25 日</p><p> 課 程 設(shè) 計(jì) 任 務(wù) 書<
3、/p><p><b> 表達(dá)式求值</b></p><p><b> 摘 要:</b></p><p> 表達(dá)式求值是程序設(shè)計(jì)語言編譯中的一個(gè)最基本的問題。它的實(shí)現(xiàn)是棧應(yīng)用的一個(gè)典型例子。我們使用的是一種簡單直觀,廣為使用的算法—“算符優(yōu)先法”。</p><p> 要把一個(gè)表達(dá)式翻譯成正確求值
4、的一個(gè)機(jī)器指令序列,或者直接對表達(dá)式求值,首先要能夠正確解釋表達(dá)式。要知道算法四則運(yùn)算即(1)先乘除,后加減;(2)從左到右;(3)先括號(hào)內(nèi),后括號(hào)外。算法優(yōu)先級(jí)法就是根據(jù)這個(gè)運(yùn)算優(yōu)先級(jí)的規(guī)定來實(shí)現(xiàn)對表達(dá)式的編譯或解釋執(zhí)行的。</p><p> 任何一個(gè)表達(dá)式都是由操作數(shù),運(yùn)算符和界限符組成的,我們稱之它們?yōu)閱卧~。一般地,操作數(shù)既可以是常數(shù)也可以是被說明為變量或常量的標(biāo)識(shí)符;運(yùn)算符可以分為算術(shù)運(yùn)算符,關(guān)系運(yùn)算符
5、和邏輯運(yùn)算符三類;基本界限符有左右括號(hào)和表達(dá)式結(jié)束符等。</p><p><b> 關(guān)鍵詞:</b></p><p> 表達(dá)式 棧(出戰(zhàn),入棧) 括號(hào)匹配 符號(hào)優(yōu)先級(jí) 運(yùn)算</p><p><b> 目 錄</b></p><p> 一.設(shè)計(jì)背景………………………………………
6、………………………3</p><p> 1.1.目的 ……………………………………………………………3</p><p> 1.2.背景 ……………………………………………………………3</p><p> 二.設(shè)計(jì)方案………………………………………………………………3</p><p> 方案實(shí)施 ………………………………………………
7、……………4</p><p> 3.1運(yùn)算……………………………………………………………… 4</p><p> 結(jié)果與結(jié)論 …………………………………………………………6</p><p> 4.1.運(yùn)算結(jié)果…………………………………………………………6</p><p> 4.2.結(jié)論………………………………………………………………
8、7</p><p> 收獲與致謝……………………………………………………………7</p><p> 5.1.收獲………………………………………………………………7</p><p> 5.2.致謝………………………………………………………………7</p><p> 六.參考文獻(xiàn) ……………………………………………………………8</
9、p><p> 八.指導(dǎo)教師評語 ………………………………………………………9</p><p><b> 一. 設(shè)計(jì)背景</b></p><p><b> 1.1.目的</b></p><p> 通過課程設(shè)計(jì),鞏固和加深對棧的理論知識(shí)的理解;掌握現(xiàn)實(shí)復(fù)雜問題的分析和解決方法;提高利用計(jì)算機(jī)分析解決
10、綜合性實(shí)際問題的基本能力。</p><p><b> 1.2.背景</b></p><p> “數(shù)據(jù)結(jié)構(gòu)”是計(jì)算機(jī)程序設(shè)計(jì)的重要理論技術(shù)基礎(chǔ),它不僅是計(jì)算機(jī)學(xué)科的核心課程,而且已成為其他理科專業(yè)的熱門選修課。棧是重要的線性結(jié)構(gòu),從數(shù)據(jù)結(jié)構(gòu)角度看,棧也是線性表,其特點(diǎn)在于棧的基本操作是線性表操作的子集,它的操作受限的線性表,因此,可稱為限定性的數(shù)據(jù)結(jié)構(gòu)。但從數(shù)據(jù)類型
11、角度看,它是和線性表大不相同的一類重要的抽象數(shù)據(jù)類型。由于棧廣泛應(yīng)用在各種軟件系統(tǒng)中,因此在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,它是多型數(shù)據(jù)類型。表達(dá)式計(jì)算是實(shí)現(xiàn)程序設(shè)計(jì)語言的基本問題之一,也是棧的應(yīng)用的一個(gè)典型例子。</p><p><b> 設(shè)計(jì)方案</b></p><p> 我負(fù)責(zé)的部分是求值的過程,使OPTR和OPND分別為運(yùn)算符棧和運(yùn)算數(shù)棧,算法的基本思想是:<
12、/p><p> ?。?)首先置操作數(shù)棧為棧,表達(dá)式起始符“=”為運(yùn)算符棧的棧底元素。</p><p> ?。?)依次讀入表達(dá)式中的每一個(gè)字符,若是操作數(shù)則進(jìn)OPND棧,若是運(yùn)算符則和OPTR棧的棧頂運(yùn)算符比較優(yōu)先權(quán)后做相應(yīng)操作,直至整個(gè)表達(dá)式求值完畢(即OPTR棧的棧頂元素和讀入的字符均為“=”)。</p><p><b> 三.方案實(shí)施</b>
13、</p><p><b> 3.1.運(yùn)算</b></p><p> SElemType EvaluateExpression()</p><p> {SqStack OPTR,OPND;</p><p> SElemType a,b,x, theta;</p><p> char c;
14、// 存放由鍵盤接收的字符串 </p><p> char z[6]; // 存放整數(shù)字符串 </p><p><b> int i;</b></p><p><b> float f;</b></p><p> InitStack(OPTR);//構(gòu)造一個(gè)運(yùn)算符棧</p>&
15、lt;p> Push(OPTR,'=');//將“=”號(hào)壓入棧底</p><p> InitStack(OPND);//構(gòu)造一個(gè)運(yùn)算數(shù)棧</p><p> c=getchar();</p><p> while(c!='='||GetTop(OPTR)!='=')//棧頂不是“=”號(hào)且輸入不是“=”號(hào)&l
16、t;/p><p><b> {</b></p><p> if(In(c))//輸入的字符為運(yùn)算符</p><p> switch(Precede(GetTop(OPTR),c))</p><p><b> {</b></p><p> case'<
17、9;://棧頂元素優(yōu)先權(quán)低</p><p> Push(OPTR, c);</p><p> c=getchar();</p><p><b> break;</b></p><p> case'='://脫括號(hào)并接下一個(gè)字符</p><p> Pop(OPTR,x);&
18、lt;/p><p> c=getchar();</p><p><b> break;</b></p><p> case'>':退棧并將運(yùn)算結(jié)果入棧</p><p> Pop(OPTR,theta);</p><p> Pop(OPND,b);</p>
19、<p> Pop(OPND,a);</p><p> Push(OPND,Operate(a,theta,b));</p><p><b> }</b></p><p> else if(c>='0'&&c<='9'||c=='.'){</p
20、><p> if(c>='0'&&c<='9')</p><p><b> i=0;</b></p><p><b> do</b></p><p><b> {</b></p><p>&
21、lt;b> z[i]=c;</b></p><p><b> i++;</b></p><p> c=getchar();</p><p> }while(c>='0'&&c<='9');</p><p> int d=z[i-1]-
22、48;</p><p><b> int e1=1;</b></p><p> for(int j=i-2;j>=0;j--)</p><p><b> {</b></p><p><b> e1=e1*10;</b></p><p>
23、d=d+(z[j]-48)*e1;</p><p><b> }</b></p><p> if(c=='.')</p><p> c=getchar();</p><p> float digit=0.0,e=0.1;</p><p> while(c>='
24、;0'&&c<='9')</p><p><b> {</b></p><p> digit=digit+(c-48)*e;</p><p><b> e=e*0.1;</b></p><p> c=getchar();</p>&
25、lt;p><b> }</b></p><p> f=(float)d+digit;</p><p> Push(OPND,f);</p><p><b> }</b></p><p> else //不能出現(xiàn)除了“+”,“-”,“*”,“/”以及小數(shù)點(diǎn)“.”,“=”和操作數(shù)以外的
26、非法字符</p><p><b> {</b></p><p> printf("******************************\n");</p><p> printf("*出現(xiàn)了非法字符或沒有以=結(jié)尾!*\n");</p><p> printf(&quo
27、t;******************************\n");</p><p><b> exit(0);</b></p><p><b> }</b></p><p><b> }</b></p><p> return GetTop(OPND)
28、;</p><p> return OK;</p><p><b> }</b></p><p><b> 四. 結(jié)果與結(jié)論</b></p><p><b> 4.1.運(yùn)算結(jié)果</b></p><p> 1.當(dāng)出現(xiàn)非法字符或者是沒有以“=”結(jié)尾
29、時(shí):</p><p><b> 圖.1</b></p><p> 圖.1表示運(yùn)算表達(dá)式中不能出現(xiàn)非法字符</p><p> 2.沒有以“=”號(hào)結(jié)尾時(shí)</p><p><b> 圖.2</b></p><p> 圖.2表示運(yùn)算表達(dá)式要以“=”號(hào)結(jié)尾</p>
30、<p><b> 結(jié)論:</b></p><p> 在本次課程設(shè)計(jì)的程序所支持的表達(dá)式進(jìn)行運(yùn)算時(shí)不能出現(xiàn)非法字符,表達(dá)式必須要以“=”號(hào)結(jié)尾。</p><p><b> 五. 收獲與致謝</b></p><p><b> 5.1.收獲</b></p><p&g
31、t; 通過這次課程設(shè)計(jì),不僅僅讓我知道自己的只是還遠(yuǎn)遠(yuǎn)不夠,復(fù)習(xí)了我的C語</p><p> 言的相關(guān)知識(shí)、還鞏固了數(shù)據(jù)結(jié)構(gòu)關(guān)于棧的算法的知識(shí),更鍛煉了我的意志。</p><p><b> 5.2.致謝</b></p><p> 通過這次的課程設(shè)計(jì)讓我知道了老師說的很對,上課認(rèn)真聽下課多多的動(dòng)手操作很重要,在這里非常感謝xx老師這半年來
32、交給我們的知識(shí),xx感謝我的組員們特別是組長,讓我了解到團(tuán)結(jié)真的很重要。</p><p><b> 六. 參考文獻(xiàn)</b></p><p> [1] 嚴(yán)蔚敏,吳偉民.《數(shù)據(jù)結(jié)構(gòu)》(C語言版)清華大學(xué)出版社2010年10月</p><p> [2](美)克林伯格.《算法設(shè)計(jì)》 清華大學(xué)出版社 2007年6月</p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)(表達(dá)式求值)課程設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--算術(shù)表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--表達(dá)式求值問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--算術(shù)表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--表達(dá)式求值問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---中綴算術(shù)表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---算術(shù)表達(dá)式求值系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告-中綴算術(shù)表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--表達(dá)式求值—mfc圖形界面
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)帶括號(hào)的算術(shù)表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告(二)表達(dá)式求值(計(jì)算器)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(表達(dá)式計(jì)算)
- 算術(shù)表達(dá)式求值課程設(shè)計(jì)
- (鹽城工學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))棧的應(yīng)用表達(dá)式求值
- 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告(逆波蘭表達(dá)式求值)
- 算術(shù)表達(dá)式求值演示-課程設(shè)計(jì)報(bào)告
評論
0/150
提交評論