




免費(fèi)預(yù)覽已結(jié)束,剩余20頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)科學(xué)與信息工程學(xué)院數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)設(shè)計(jì)題目:簡(jiǎn)單計(jì)算器 專(zhuān) 業(yè) 計(jì)算機(jī)軟件 班 級(jí) 計(jì)軟2班 小組成員 蔡松佐 陳吉院 王希 劉軍 符錦柏 曾祖濱 劉一霖 指導(dǎo)教師 張顯全 2010 年 12 月 25 日數(shù)據(jù)結(jié)構(gòu)分工情況組長(zhǎng):蔡松佐組員:曾祖濱、陳吉院、符錦柏、劉軍、劉一霖、王希王希:負(fù)責(zé)設(shè)計(jì)程序的整體框架(定義數(shù)據(jù)結(jié)構(gòu),編寫(xiě)主函數(shù))評(píng)分:90分符錦柏:負(fù)責(zé)編寫(xiě)棧的代碼評(píng)分:95分蔡松佐:負(fù)責(zé)編寫(xiě)計(jì)算算術(shù)表達(dá)式的代碼評(píng)分:95分陳吉院:負(fù)責(zé)編寫(xiě)比較符號(hào)優(yōu)先級(jí)的代碼評(píng)分:90分曾祖濱:負(fù)責(zé)將所有代碼整合成一個(gè)完整的程序評(píng)分:88分劉軍:負(fù)責(zé)寫(xiě)實(shí)驗(yàn)報(bào)告評(píng)分:90分劉一霖:負(fù)責(zé)測(cè)試程序,看其是否具有良好的健壯性評(píng)分:88分簡(jiǎn)單計(jì)算器一 基本功能描述簡(jiǎn)單的計(jì)算器的功能是對(duì)基本的加、減、乘、除、四則運(yùn)算,可對(duì)輸入的操作數(shù),包括整數(shù),小數(shù)等進(jìn)行運(yùn)算。二 設(shè)計(jì)思路本程序主要是采用棧的理論知識(shí),主要用到兩個(gè)結(jié)構(gòu)體棧,一個(gè)用來(lái)轉(zhuǎn)化表達(dá)式,一個(gè)用來(lái)計(jì)算表達(dá)式。區(qū)別就在于一個(gè)存儲(chǔ)字符,一個(gè)存儲(chǔ)浮點(diǎn)。首先,用一個(gè)字符數(shù)組來(lái)存儲(chǔ)用戶(hù)輸入的中綴表達(dá)式。然后用棧來(lái)把這個(gè)表達(dá)式轉(zhuǎn)化為后綴表達(dá)式,轉(zhuǎn)化時(shí)要進(jìn)行符號(hào)優(yōu)先級(jí)比較,這里將*/的優(yōu)先級(jí)定為2,+-定為1,括號(hào)和=定為0。具體思想如下:例如用戶(hù)輸入了1+2*3=,將其存放入一個(gè)字符數(shù)組中。先在棧的底部存放一個(gè)=號(hào)符,用作符號(hào)優(yōu)先級(jí)比較。首先將1存放到另外一個(gè)字符數(shù)組s1中,再將+號(hào)入棧。入棧的同時(shí)與底部的=比較優(yōu)先級(jí),+的優(yōu)先級(jí)高于=,所以不出棧,之后將2存放入s2中,然后再將*入棧,入棧的同時(shí)與+比較符號(hào)優(yōu)先級(jí),*比+高,所以不出棧。再將3存入s2中。之后將棧中不是=的運(yùn)算符都彈出棧,并依次存入s2中。所以s2中的表達(dá)式為123*+。之后進(jìn)行計(jì)算,計(jì)算時(shí)用到浮點(diǎn)棧。首先將s2中的字符依次入棧,遇到運(yùn)算符時(shí)進(jìn)行計(jì)算。所以將123入棧后,再將*入棧的同時(shí),將前面兩個(gè)數(shù)字進(jìn)行運(yùn)算,算出結(jié)果為6并存入棧中,之后再將+入棧,再與1進(jìn)行運(yùn)算,結(jié)果即為7,然后輸出結(jié)果。三 概要設(shè)計(jì)1,子函數(shù)功能struct Stack用來(lái)轉(zhuǎn)化表達(dá)式的機(jī)構(gòu)體棧。Struct FStack用來(lái)計(jì)算表達(dá)式的結(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)為棧擴(kuò)充ncrementsize個(gè)存儲(chǔ)空間void IncrementFStackSize(FStack &s)為棧擴(kuò)充ncrementsize個(gè)存儲(chǔ)空間void Push(Stack &s,char e)第一個(gè)棧入棧操作void PushF(FStack &s,float e)第二個(gè)棧入棧操作bool Empty(Stack s)判斷第一個(gè)棧是否為空。bool EmptyF(FStack s)判斷第二個(gè)棧是否空char Pop(Stack &s)表達(dá)式出棧float PopF(FStack &s)計(jì)算的數(shù)據(jù)出棧int Precede(char op)確定優(yōu)先級(jí)的函數(shù)void Change(char *s1,char *s2)改變兩個(gè)字符串的儲(chǔ)存位置float Compute(char *s2)實(shí)現(xiàn)數(shù)據(jù)的運(yùn)算2 函數(shù)的調(diào)用 主函數(shù)棧的建立Stack,F(xiàn)StackChange(str1,str2)計(jì)算表達(dá)式Compute(str2)InitFStack(S);PushF(S,x)PopF(S)輸出cin.getline(str1,2);3 測(cè)試數(shù)據(jù)及測(cè)試結(jié)果(1)測(cè)試 1+2+3=6(2) 測(cè)試2*4=8(3)測(cè)試 3/2=1.5(4)測(cè)試(1+2)*3=9四 程序代碼#include #include #include #include #include #include struct Stack /轉(zhuǎn)換表達(dá)式char *elem;int top;int stacksize;int incrementsize;struct FStack /計(jì)算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)先級(jí)()函數(shù)返回運(yùn)算符形參的優(yōu)先級(jí)s2j+ = w;Pop(R);w = GetTop(R);Push(R,ch);ch = s1+i;else /此處為數(shù)字或小數(shù)點(diǎn)字符的處理while (isdigit(ch) | ch = .)s2j+ = ch;ch = s1+i;s2j+ = ; /被轉(zhuǎn)換后的每個(gè)數(shù)值后放一個(gè)空格/-ch = Pop(R);while (ch != =)s2j+ = ch;ch = Pop(R);s2j+ = =; /加入字符串結(jié)束符s2j+ = 0;float Compute(char *s2)FStack S; /用S棧存儲(chǔ)操作數(shù)和中間計(jì)算結(jié)果InitFStack(S);istrstream ins(s2); /把s2定義為輸入字符串流對(duì)象inschar ch; /用于輸入字符float x; /用于輸入浮點(diǎn)數(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) /如果棧中只有一個(gè)值那一定是結(jié)果return x;void main()/主程序FStack s;char a10;float b,c;char str150,str250; /暫時(shí)存儲(chǔ)表達(dá)式char j=y;cout *歡迎使用本計(jì)算器*endlendl;haha:while(j=Y|j=y)int i=0,m=0,n=0,k=0,l=0,q=0,p=0;cout 請(qǐng)輸入一個(gè)以=字符結(jié)束的中綴算術(shù)表達(dá)式:endlendl;cin.getline(str1,sizeof(str1);while(str1i!=0)i+;if(str1i-1!=)cout表達(dá)式錯(cuò)誤.請(qǐng)重新輸入.endlendl;goto haha;i=0;while(str1i!=0)if(str1i=0&str1i-1=/)cout表達(dá)式錯(cuò)誤.請(qǐng)重新輸入.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表達(dá)式錯(cuò)誤.請(qǐng)重新輸入.endlendl;goto haha;Change(str1,str2); /處理結(jié)果coutn求值結(jié)果為: str1Compute(str2)endl;cout是否繼續(xù) :(Y/N)j;cin.getline(str1,2);coutendl *感謝使用本計(jì)算器*endl;五 課程設(shè)計(jì)總結(jié)1 收獲通過(guò)這次課程設(shè)計(jì),更進(jìn)一步了解了棧的原理和應(yīng)用,同時(shí)也鍛煉了數(shù)據(jù)結(jié)構(gòu)在實(shí)際中的熟練運(yùn)用。2 心得體會(huì)在這次數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)中遇到了很多實(shí)際性的問(wèn)題,在實(shí)際設(shè)計(jì)中才發(fā)現(xiàn),書(shū)本上理論性的東西與在實(shí)際運(yùn)用中的還是有一定的出入的,所以有些問(wèn)題要不斷地更正以前的錯(cuò)誤思維。通過(guò)這次設(shè)計(jì),我懂得了學(xué)習(xí)的重要性,了解到理論知識(shí)與
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)功夫美術(shù)課件
- 腫瘤免疫治療藥物作用機(jī)理
- 大單元課堂活動(dòng)設(shè)計(jì)
- 中國(guó)制度面對(duì)面課件
- 2025屆福建省漳州市龍文區(qū)龍文中學(xué)英語(yǔ)八下期中質(zhì)量檢測(cè)模擬試題含答案
- ICU患者的護(hù)理常規(guī)
- 莒縣招工作總結(jié)與計(jì)劃
- 公交機(jī)動(dòng)車(chē)運(yùn)行技術(shù)課件
- 義工服務(wù)技能培訓(xùn)
- 走好人生第一步廉政教育
- 二三級(jí)醫(yī)院放射科要求
- 危大工程巡視檢查記錄表(深基坑)
- 鋼網(wǎng)架結(jié)構(gòu)安裝、拼裝施工方案
- Q∕SY 05262-2019 機(jī)械清管器技術(shù)條件
- 2022年社會(huì)學(xué)概論考試重點(diǎn)廣東海洋
- 二級(jí)建造師法規(guī)課件
- 早產(chǎn)兒出院后喂養(yǎng)(課堂PPT)
- 英語(yǔ)的起源與發(fā)展(課堂PPT)
- 北京市中級(jí)專(zhuān)業(yè)技術(shù)資格評(píng)審申報(bào)表
- 鼠害蟲(chóng)害防治管理制度
- 整體yuan yin yun yingp
評(píng)論
0/150
提交評(píng)論