




已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
計算機科學(xué)與信息工程學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計設(shè)計題目:簡單計算器 專 業(yè) 計算機軟件 班 級 計軟2班 小組成員 蔡松佐 陳吉院 王希 劉軍 符錦柏 曾祖濱 劉一霖 指導(dǎo)教師 張顯全 2010 年 12 月 25 日數(shù)據(jù)結(jié)構(gòu)分工情況組長:蔡松佐組員:曾祖濱、陳吉院、符錦柏、劉軍、劉一霖、王希王希:負責(zé)設(shè)計程序的整體框架(定義數(shù)據(jù)結(jié)構(gòu),編寫主函數(shù))評分:90分符錦柏:負責(zé)編寫棧的代碼評分:95分蔡松佐:負責(zé)編寫計算算術(shù)表達式的代碼評分:95分陳吉院:負責(zé)編寫比較符號優(yōu)先級的代碼評分:90分曾祖濱:負責(zé)將所有代碼整合成一個完整的程序評分:88分劉軍:負責(zé)寫實驗報告評分:90分劉一霖:負責(zé)測試程序,看其是否具有良好的健壯性評分:88分簡單計算器一 基本功能描述簡單的計算器的功能是對基本的加、減、乘、除、四則運算,可對輸入的操作數(shù),包括整數(shù),小數(shù)等進行運算。二 設(shè)計思路本程序主要是采用棧的理論知識,主要用到兩個結(jié)構(gòu)體棧,一個用來轉(zhuǎn)化表達式,一個用來計算表達式。區(qū)別就在于一個存儲字符,一個存儲浮點。首先,用一個字符數(shù)組來存儲用戶輸入的中綴表達式。然后用棧來把這個表達式轉(zhuǎn)化為后綴表達式,轉(zhuǎn)化時要進行符號優(yōu)先級比較,這里將*/的優(yōu)先級定為2,+-定為1,括號和=定為0。具體思想如下:例如用戶輸入了1+2*3=,將其存放入一個字符數(shù)組中。先在棧的底部存放一個=號符,用作符號優(yōu)先級比較。首先將1存放到另外一個字符數(shù)組s1中,再將+號入棧。入棧的同時與底部的=比較優(yōu)先級,+的優(yōu)先級高于=,所以不出棧,之后將2存放入s2中,然后再將*入棧,入棧的同時與+比較符號優(yōu)先級,*比+高,所以不出棧。再將3存入s2中。之后將棧中不是=的運算符都彈出棧,并依次存入s2中。所以s2中的表達式為123*+。之后進行計算,計算時用到浮點棧。首先將s2中的字符依次入棧,遇到運算符時進行計算。所以將123入棧后,再將*入棧的同時,將前面兩個數(shù)字進行運算,算出結(jié)果為6并存入棧中,之后再將+入棧,再與1進行運算,結(jié)果即為7,然后輸出結(jié)果。三 概要設(shè)計1,子函數(shù)功能struct Stack用來轉(zhuǎn)化表達式的機構(gòu)體棧。Struct FStack用來計算表達式的結(jié)構(gòu)體棧void InitStack(Stack &s)初始化結(jié)構(gòu)體棧void InitFStack(FStack &s)初始化結(jié)構(gòu)體棧char GetTop(Stack s)獲取棧頂數(shù)據(jù)void IncrementStackSize(Stack &s)為棧擴充ncrementsize個存儲空間void IncrementFStackSize(FStack &s)為棧擴充ncrementsize個存儲空間void Push(Stack &s,char e)第一個棧入棧操作void PushF(FStack &s,float e)第二個棧入棧操作bool Empty(Stack s)判斷第一個棧是否為空。bool EmptyF(FStack s)判斷第二個棧是否空char Pop(Stack &s)表達式出棧float PopF(FStack &s)計算的數(shù)據(jù)出棧int Precede(char op)確定優(yōu)先級的函數(shù)void Change(char *s1,char *s2)改變兩個字符串的儲存位置float Compute(char *s2)實現(xiàn)數(shù)據(jù)的運算2 函數(shù)的調(diào)用 主函數(shù)棧的建立Stack,F(xiàn)StackChange(str1,str2)計算表達式Compute(str2)InitFStack(S);PushF(S,x)PopF(S)輸出cin.getline(str1,2);3 測試數(shù)據(jù)及測試結(jié)果(1)測試 1+2+3=6(2) 測試2*4=8(3)測試 3/2=1.5(4)測試(1+2)*3=9四 程序代碼#include #include #include #include #include #include struct Stack /轉(zhuǎn)換表達式char *elem;int top;int stacksize;int incrementsize;struct FStack /計算float *elem;int top;int stacksize;int incrementsize;void InitStack(Stack &s)s.elem=new char100;s.top=-1;s.stacksize=100;s.incrementsize=10;void InitFStack(FStack &s)s.elem=new float100;s.top=-1;s.stacksize=100;s.incrementsize=10;char GetTop(Stack s)return s.elems.top;void IncrementStackSize(Stack &s)char *a=new chars.stacksize+s.incrementsize;for(int i=0;i=s.top;i+)ai=s.elemi;delete s.elem;s.elem=a;s.stacksize+=s.incrementsize;void IncrementFStackSize(FStack &s)float *a=new floats.stacksize+s.incrementsize;for(int i=0;i Precede(ch) /優(yōu)先級()函數(shù)返回運算符形參的優(yōu)先級s2j+ = w;Pop(R);w = GetTop(R);Push(R,ch);ch = s1+i;else /此處為數(shù)字或小數(shù)點字符的處理while (isdigit(ch) | ch = .)s2j+ = ch;ch = s1+i;s2j+ = ; /被轉(zhuǎn)換后的每個數(shù)值后放一個空格/-ch = Pop(R);while (ch != =)s2j+ = ch;ch = Pop(R);s2j+ = =; /加入字符串結(jié)束符s2j+ = 0;float Compute(char *s2)FStack S; /用S棧存儲操作數(shù)和中間計算結(jié)果InitFStack(S);istrstream ins(s2); /把s2定義為輸入字符串流對象inschar ch; /用于輸入字符float x; /用于輸入浮點數(shù)insch;while (ch != =)switch (ch)case +:x = PopF(S) + PopF(S);break;case -:x = PopF(S);x = PopF(S) - x;break;case *:x = PopF(S) * PopF(S);break;case /:x = PopF(S);x = PopF(S) / x;break;default:ins.putback(ch);insx;PushF(S,x);insch;if (!EmptyF(S)x = PopF(S);if (EmptyF(S) /如果棧中只有一個值那一定是結(jié)果return x;void main()/主程序FStack s;char a10;float b,c;char str150,str250; /暫時存儲表達式char j=y;cout *歡迎使用本計算器*endlendl;haha:while(j=Y|j=y)int i=0,m=0,n=0,k=0,l=0,q=0,p=0;cout 請輸入一個以=字符結(jié)束的中綴算術(shù)表達式:endlendl;cin.getline(str1,sizeof(str1);while(str1i!=0)i+;if(str1i-1!=)cout表達式錯誤.請重新輸入.endlendl;goto haha;i=0;while(str1i!=0)if(str1i=0&str1i-1=/)cout表達式錯誤.請重新輸入.endlendl;goto haha;i+;i=0;while(str1i!=0)if(str1i=()m+;if(str1i=)n+;if(str1i=)k+;if(str1i=)l+;if(str1i=)q+;if(str1i=)p+;i+;if(m!=n | k!=l | q!=p)cout表達式錯誤.請重新輸入.endlendl;goto haha;Change(str1,str2); /處理結(jié)果coutn求值結(jié)果為: str1Compute(str2)endl;cout是否繼續(xù) :(Y/N)j;cin.getline(str1,2);coutendl *感謝使用本計算器*endl;五 課程設(shè)計總結(jié)1 收獲通過這次課程設(shè)計,更進一步了解了棧的原理和應(yīng)用,同時也鍛煉了數(shù)據(jù)結(jié)構(gòu)在實際中的熟練運用。2 心得體會在這次數(shù)據(jù)結(jié)構(gòu)設(shè)計中遇到了很多實際性的問題,在實際設(shè)計中才發(fā)現(xiàn),書本上理論性的東西與在實際運用中的還是有一定的出入的,所以有些問題要不斷地更正以前的錯誤思維。通過這次設(shè)計,我懂得了學(xué)習(xí)的重要性,了解到理論知識與
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)保設(shè)施施工安全責(zé)任協(xié)議
- 電力行業(yè)污染物排放總量控制保證協(xié)議
- 《手機游戲賬號及虛擬財產(chǎn)授權(quán)與轉(zhuǎn)讓協(xié)議》
- 影視拍攝現(xiàn)場電力系統(tǒng)設(shè)計與備用電源配置合同
- 私人游艇衛(wèi)星通訊系統(tǒng)租賃與安裝服務(wù)合同
- 藝人演藝作品收益分配經(jīng)紀(jì)合同
- 股票市場證券分析師助理派遣與市場動態(tài)監(jiān)測協(xié)議
- 航空器維修基地空域申請補充協(xié)議
- 寵物連鎖加盟店會員體系與積分管理協(xié)議
- DB42-T 2012-2023 土家族吊腳樓營造規(guī)程
- GB/T 1633-2000熱塑性塑料維卡軟化溫度(VST)的測定
- GB/T 11032-2020交流無間隙金屬氧化物避雷器
- 煤礦爆破工培訓(xùn)
- 液化石油氣安全標(biāo)簽
- 水車租賃合同范本(3篇)
- 空港新城特勤消防站施工組織設(shè)計
- 北師大版三年級數(shù)學(xué)下冊競賽卷
- 2022山東歷史高考答題卡word版
- 中醫(yī)醫(yī)院兒科建設(shè)與管理指南(試行)
- Q∕SY 1143-2008 三維地質(zhì)建模技術(shù)要求
- 大地構(gòu)造學(xué)派及其構(gòu)造單元匯總
評論
0/150
提交評論