![算數(shù)表達(dá)式的求解課程設(shè)計(jì)報(bào)告_第1頁(yè)](http://file4.renrendoc.com/view/f82822c70b85d1bbce72d54795c7d7a7/f82822c70b85d1bbce72d54795c7d7a71.gif)
![算數(shù)表達(dá)式的求解課程設(shè)計(jì)報(bào)告_第2頁(yè)](http://file4.renrendoc.com/view/f82822c70b85d1bbce72d54795c7d7a7/f82822c70b85d1bbce72d54795c7d7a72.gif)
![算數(shù)表達(dá)式的求解課程設(shè)計(jì)報(bào)告_第3頁(yè)](http://file4.renrendoc.com/view/f82822c70b85d1bbce72d54795c7d7a7/f82822c70b85d1bbce72d54795c7d7a73.gif)
![算數(shù)表達(dá)式的求解課程設(shè)計(jì)報(bào)告_第4頁(yè)](http://file4.renrendoc.com/view/f82822c70b85d1bbce72d54795c7d7a7/f82822c70b85d1bbce72d54795c7d7a74.gif)
![算數(shù)表達(dá)式的求解課程設(shè)計(jì)報(bào)告_第5頁(yè)](http://file4.renrendoc.com/view/f82822c70b85d1bbce72d54795c7d7a7/f82822c70b85d1bbce72d54795c7d7a75.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——算數(shù)表達(dá)式的求解課程設(shè)計(jì)報(bào)告
合肥學(xué)院
計(jì)算機(jī)科學(xué)與技術(shù)系
課程設(shè)計(jì)報(bào)告
課學(xué)學(xué)專指
業(yè)導(dǎo)
班教生
姓
程名號(hào)級(jí)師
數(shù)據(jù)結(jié)構(gòu)與算法算數(shù)表達(dá)式的求解
課程設(shè)計(jì)名稱
(算數(shù)表達(dá)式的求解)給定一個(gè)算數(shù)表達(dá)式,通過(guò)程序求出最終的結(jié)果。
1、從鍵盤輸入要求解的算術(shù)表達(dá)式;
2、采用棧結(jié)構(gòu)進(jìn)行算數(shù)表達(dá)式的求解過(guò)程;3、能夠判斷算數(shù)表達(dá)式的正確與否;4、對(duì)于錯(cuò)誤表達(dá)式給出提醒;
5、對(duì)于正確表達(dá)時(shí)給出最終的結(jié)果。1、問(wèn)題分析和任務(wù)定義
有題目可知,程序要求給定一算數(shù)表達(dá)式并計(jì)算最終的結(jié)果,我們知道,在高級(jí)語(yǔ)言中,任何一個(gè)表達(dá)式都是有操作數(shù)、運(yùn)算符和界限符組成。在計(jì)算過(guò)程中,還要考慮表達(dá)式中有無(wú)括號(hào)以及左右括號(hào)之分。由于運(yùn)算符有優(yōu)先級(jí)的高低,因此一個(gè)算數(shù)表達(dá)是不可能總是按順序執(zhí)行。
通過(guò)以上可知,可以用棧來(lái)實(shí)現(xiàn)運(yùn)算符的優(yōu)先級(jí)完成算術(shù)表達(dá)式的求解。
為實(shí)現(xiàn)算法的優(yōu)先級(jí),設(shè)置兩個(gè)棧:一個(gè)稱為操作數(shù)棧opnd,用以寄放操作數(shù)和運(yùn)算結(jié)果,另一個(gè)為操作符棧optr,用以寄放運(yùn)算符。該算法的基本思想是:
(1)首先置操作數(shù)棧opnd為空棧,表達(dá)式終止符“#〞為操作符棧optr的棧底元素。(2)依次讀入表達(dá)式中每個(gè)字符,若為操作數(shù),則進(jìn)opnd棧;若是運(yùn)算符,則與optr棧的棧頂運(yùn)算符比較優(yōu)先級(jí)后做相應(yīng)操作:若當(dāng)前操作符大于optr棧的棧頂,則當(dāng)前操作符入棧;否則,opnd棧的棧頂元素、次棧頂元素出棧,同時(shí)optr棧的棧頂元素也出棧,形成運(yùn)算,并將結(jié)果壓入opnd棧,直至整個(gè)表達(dá)式求值完畢(即optr棧的棧頂元素和當(dāng)前讀入的字符均為“#〞)。
對(duì)于算術(shù)表達(dá)式的輸入,本程序采用gets()的方法讀入,將運(yùn)算符‘+’,‘-’,‘*’,‘/’,‘(’,‘)’,‘#’存儲(chǔ)在數(shù)組中時(shí),定義表達(dá)式求解函數(shù),在函數(shù)中判斷讀入的字符,假使是運(yùn)算符,將這些字符入操作符optr棧,并比較優(yōu)先級(jí),判斷是否運(yùn)算。若讀入的字符為‘0’到‘9’之間的數(shù)字時(shí),用字符相減轉(zhuǎn)化為整型,然后將轉(zhuǎn)化后的整型再轉(zhuǎn)化為ASCII的形式壓入操作數(shù)棧opnd中。2、數(shù)據(jù)結(jié)構(gòu)的選擇和概要設(shè)計(jì)(1)存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)
本程序主要采用順序棧結(jié)構(gòu)類型(Stack)來(lái)存儲(chǔ)表達(dá)式計(jì)算中的數(shù)據(jù)。程序中需要建立兩個(gè)棧,一個(gè)棧用于寄放運(yùn)算符,另一個(gè)則用于寄放操作數(shù)和計(jì)算結(jié)果,故需要建立兩個(gè)順序棧結(jié)構(gòu)類型。(2)算數(shù)優(yōu)先級(jí)設(shè)計(jì)對(duì)一任意的表達(dá)式,由于表達(dá)式中運(yùn)算符的優(yōu)先級(jí)不同,可能會(huì)使表達(dá)式不按順序進(jìn)行計(jì)算。在本程序中定義函數(shù)Proceed()來(lái)比較運(yùn)算符的優(yōu)先級(jí),而函數(shù)中各優(yōu)先級(jí)的比較主要根據(jù)以下優(yōu)先級(jí)比較的表格:
表1:運(yùn)算符優(yōu)先級(jí)運(yùn)算符用數(shù)字表示棧內(nèi)操作符的優(yōu)先級(jí)棧外操作符的優(yōu)先級(jí)+032-132*254/354(416)561#600在Precede()函數(shù)中定義兩個(gè)字符型參數(shù)變量op和c,其中op表示棧頂運(yùn)算符,c
表示當(dāng)前讀入運(yùn)算符,對(duì)于當(dāng)前運(yùn)算符是否入棧,進(jìn)行如下操作:比較當(dāng)前運(yùn)算符和棧頂運(yùn)算符的優(yōu)先級(jí)的大?。?/p>
1、假使當(dāng)前運(yùn)算符的優(yōu)先級(jí)大于棧頂運(yùn)算符的優(yōu)先級(jí),即opc;令函數(shù)返回值為'>',此時(shí)應(yīng)將棧頂運(yùn)算符出棧和棧頂、次棧頂操作數(shù)出棧并進(jìn)行相應(yīng)的運(yùn)算。
3、假使當(dāng)前元素的優(yōu)先級(jí)等于棧頂運(yùn)算符的優(yōu)先級(jí),即op=c;令函數(shù)的返回值為'=',此時(shí)界限符內(nèi)的表達(dá)式已計(jì)算完畢。(3)程序模塊設(shè)計(jì)1)程序模塊
本程序主要包含3個(gè)模塊:主程序模塊、計(jì)算模塊以及順序棧操作模塊,調(diào)用關(guān)系如下圖:計(jì)算模塊順序棧操作模塊主程序模塊
圖1:程序模塊圖2)系統(tǒng)功能模塊
本程序大致包含10個(gè)函數(shù),其中包含主函數(shù)。每個(gè)函數(shù)都有其相對(duì)應(yīng)的功能實(shí)現(xiàn)?!?操作符的輸入函數(shù)intIn(charc);
○2運(yùn)算符比較優(yōu)先級(jí)函數(shù)charProceed(charop,charc);○3進(jìn)行四則運(yùn)算函數(shù)intOperate(inta,chara1,intb);○4實(shí)現(xiàn)表達(dá)式的求值函數(shù)intEvalExpres(void);○5初始化棧函數(shù)voidInitStack(Stack*s);○6入棧函數(shù)voidPush(Stack*s,intx);○7出棧函數(shù)intPop(Stack*s);
○8取棧頂元素函數(shù)intGetTop(Stack*s);○9判??蘸瘮?shù)voidEmpty(Stack*s);○10主函數(shù)intmain()
3)函數(shù)之間主要調(diào)用的關(guān)系圖本程序主要包含10個(gè)程序,各程序之間的關(guān)系如下圖:(部分函數(shù)用以上的編號(hào)表示)
Voidmain()
IntEvalExpres(void)1○2○3○5○6○7○8○9○
圖2:函數(shù)之間調(diào)用關(guān)系圖
3、詳細(xì)設(shè)計(jì)和編碼
(1)、結(jié)構(gòu)體類型的定義typedefstruct{
intdata[MAXSIZE];inttop;
intbase;//棧底}Stack;
(2)、全局變量定義//以下為函數(shù)聲明
voidInitStack(Stack*);//初始化棧intEmpty(Stack*);//判空棧voidPush(Stack*,int);//進(jìn)棧intPop(Stack*);//出棧
intGetTop(Stack*);//取棧頂元素
intOperate(int,char,int);//計(jì)算結(jié)果charProceed(char,char);//比較優(yōu)先級(jí)intIn(char);//判斷輸入符
intEvalExpres(void);//表達(dá)式計(jì)算函數(shù)//定義兩個(gè)棧分別存放運(yùn)算符和操作數(shù)StackStackR,StackD;
(3)、系統(tǒng)主要子程序的詳細(xì)設(shè)計(jì)1)、主函數(shù)模塊設(shè)計(jì)
intmain()//主函數(shù){
intv;charch;while(1)
{
printf(\歡迎使用算術(shù)表達(dá)式的求解的小程序************\\n\
v=EvalExpres();
printf(\表達(dá)式的計(jì)算結(jié)果為:%d\printf(\do
{
scanf(\if(ch=='n'||ch=='N')exit(0);}while(ch!='\\n');system(\}
return0;}
在主函數(shù)中,設(shè)定用戶操作界面的形式,通過(guò)調(diào)用表達(dá)式求解的子函數(shù)實(shí)現(xiàn)算法所要實(shí)現(xiàn)的功能,然后通過(guò)while()循環(huán)語(yǔ)句控制,可以實(shí)現(xiàn)屢屢調(diào)試。2)、計(jì)算函數(shù)模塊
intOperate(inta,chara1,intb){
ints;
intd1=a;
intd2=b;//把字符ab變?yōu)閷?duì)應(yīng)數(shù)字switch(a1){case'+':s=d1+d2;break;case'-':s=d2-d1;
break;case'*':s=d1*d2;break;case'/':
s=d2/d1;}
return(s+'0');//將運(yùn)算結(jié)果轉(zhuǎn)化為ascii碼的形式入棧,}
在計(jì)算函數(shù)中,定義3個(gè)變量,表示基本運(yùn)算中的變量。采用開(kāi)關(guān)語(yǔ)句實(shí)現(xiàn)表達(dá)式的基本運(yùn)算,將運(yùn)算結(jié)果轉(zhuǎn)化為ASCII的形式返回。3)、表達(dá)式求解的函數(shù)模塊
intEvalExpres(void)//表達(dá)式求解函數(shù)
6、用戶使用說(shuō)明
(1)本程序執(zhí)行的文件為“算數(shù)表達(dá)式的求解問(wèn)題〞。
(2)所求表達(dá)式中都只是僅包含加、減、乘、除4種基本運(yùn)算的,其中也包含括號(hào)的應(yīng)用,所有的運(yùn)算對(duì)象均為簡(jiǎn)單變量,要求將表達(dá)式中的數(shù)字字符轉(zhuǎn)化為整型,且輸入表達(dá)式以“#〞終止。
(3)輸入表達(dá)式時(shí),以‘#’終止,當(dāng)點(diǎn)擊回車鍵時(shí)即可得到運(yùn)算結(jié)果,當(dāng)想繼續(xù)輸入表達(dá)式時(shí),再次點(diǎn)擊回車鍵即可,當(dāng)想終止時(shí),點(diǎn)擊字母‘n’或‘N’。(4)當(dāng)輸入錯(cuò)誤表達(dá)式時(shí),程序會(huì)給出相應(yīng)的提醒。7、
case'-':case'*':case'/':case')':
case'#':ch='>';break;case'(':ch='';break;case'(':
printf(\括號(hào)匹配錯(cuò)誤!\\n\exit(
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版九年級(jí)數(shù)學(xué)下冊(cè)2.5直線與圓的位置關(guān)系2.5.3切線長(zhǎng)定理聽(tīng)評(píng)課記錄
- 小學(xué)數(shù)學(xué)五年級(jí)數(shù)學(xué)《植樹(shù)問(wèn)題》聽(tīng)評(píng)課記錄
- 生態(tài)物流服務(wù)合同(2篇)
- 教科版道德與法治九年級(jí)下冊(cè)第十四課《第一次選擇》聽(tīng)課評(píng)課記錄
- 湘教版數(shù)學(xué)八年級(jí)上冊(cè)4.3《一元一次不等式的解法》聽(tīng)評(píng)課記錄1
- 華師大版數(shù)學(xué)七年級(jí)上冊(cè)《角》聽(tīng)評(píng)課記錄2
- 新版蘇教版小學(xué)數(shù)學(xué)(二年級(jí)上冊(cè))聽(tīng)評(píng)課記錄【含教學(xué)計(jì)劃】
- 蘇州蘇教版三年級(jí)下冊(cè)數(shù)學(xué)第七單元《37、認(rèn)識(shí)幾分之一》聽(tīng)評(píng)課記錄
- 蘇科版數(shù)學(xué)九年級(jí)下冊(cè)5.4《二次函數(shù)與一元二次方程》(第2課時(shí))講聽(tīng)評(píng)課記錄
- 北師大版歷史七年級(jí)下冊(cè)第22課《明清皇權(quán)膨脹與文化專制》聽(tīng)課評(píng)課記錄
- 《民航服務(wù)溝通技巧》教案第15課民航服務(wù)人員下行溝通的技巧
- 中國(guó)人婚戀狀況調(diào)查報(bào)告公布
- 早產(chǎn)兒視網(wǎng)膜病變
- 矮小癥診治指南
- GB 10665-1997碳化鈣(電石)
- 《克雷洛夫寓言》專項(xiàng)測(cè)試題附答案
- 《中小學(xué)教育懲戒規(guī)則》重點(diǎn)內(nèi)容學(xué)習(xí)PPT課件(帶內(nèi)容)
- 海信rsag7.820.1646ip電源與背光電路圖fan7530、fan7602fan
- 板帶生產(chǎn)工藝5(熱連軋帶鋼生產(chǎn))課件
- 2022年同等學(xué)力英語(yǔ)考試真題及詳解
- 深度配煤摻燒方案
評(píng)論
0/150
提交評(píng)論