版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、中北大學(xué)數(shù) 據(jù) 結(jié) 構(gòu)課 程 設(shè) 計(jì) 說 明 書學(xué)生姓名:張蓓學(xué) 號(hào):1021011602學(xué) 院:軟件學(xué)院專 業(yè):軟件工程題 目:算術(shù)表達(dá)式的求解指導(dǎo)教師何志英2011年12月20日1. 設(shè)計(jì)任務(wù)概述(包括系統(tǒng)總體框圖及功能描述) 利用棧結(jié)構(gòu),求解用戶正確輸入的算術(shù)表達(dá)式,并實(shí)現(xiàn)保存、讀取、清除功能,且對(duì)用戶輸入的錯(cuò)誤信息進(jìn)行提示,重新輸入.按下”q”鍵表達(dá)式錯(cuò)誤表達(dá)式正確按下”s”鍵按下”r”鍵按下”e”鍵 求解算術(shù)表達(dá)式系統(tǒng)輸入算術(shù)表達(dá)式 判斷表達(dá)式 是否正確求解運(yùn)算,得到結(jié)果提示錯(cuò)誤,重新輸入按下“n”鍵按下“y”鍵退出?(y/n)退出運(yùn)算系統(tǒng)讀取剛才保存的得數(shù)保存得數(shù)按下“q”鍵2.
2、本設(shè)計(jì)所采用的數(shù)據(jù)結(jié)構(gòu)(如:鏈表、棧、樹、圖等)本設(shè)計(jì)采用了棧結(jié)構(gòu),創(chuàng)建了兩個(gè)棧,一個(gè)壓入數(shù)字,另一個(gè)壓入符號(hào)。3. 功能模塊詳細(xì)設(shè)計(jì)3.1 詳細(xì)設(shè)計(jì)思想求解表達(dá)式的主要思想是創(chuàng)建兩個(gè)棧,一個(gè)是符號(hào)棧,另一個(gè)是數(shù)字棧。符號(hào)棧關(guān)鍵是運(yùn)算優(yōu)先順序,數(shù)字棧關(guān)鍵是多位數(shù)與小數(shù)的計(jì)算。本程序設(shè)計(jì)了四個(gè)模塊,第一個(gè)模塊double result(double num1,char op,double num2),主要目的是進(jìn)行加減乘除運(yùn)算的操作方法,num1與num2的關(guān)系;第二個(gè)模塊int compute(char str),主要目的是對(duì)用戶輸入的算術(shù)表達(dá)式進(jìn)行求解,其中對(duì)多位數(shù)與小數(shù)進(jìn)行了定義與數(shù)值計(jì)算
3、,以及帶括號(hào)的表達(dá)式運(yùn)算的優(yōu)先順序;第三個(gè)模塊void face(),主要目的是設(shè)計(jì)用戶主界面;第四個(gè)模塊是主函數(shù),主要目的是將上述模塊集中運(yùn)用,進(jìn)行求解。至此完成利用棧結(jié)構(gòu)求解表達(dá)式運(yùn)算。3.2 核心代碼調(diào)用的庫函數(shù):#include #include #include #include #include 自己定義的函數(shù):1) double result(double num1,char op,double num2) 進(jìn)行加減乘除運(yùn)算2) int compute(char str) 對(duì)用戶輸入的算術(shù)表達(dá)式進(jìn)行求解3) void face() 用戶主界面4) main() 主函數(shù)核心定義函數(shù)
4、設(shè)計(jì):int compute(char str) double num=0; int i=0,j=1,k=1; int flag=0; numtop=optop=0; while(stri!=0|optop0) if(stri=0&stri0&!op(stri-1)&stri!=(&stri-1!=) numstacknumtop+=num*k; num=0; j=1; flag=0; k=1; if(optop=0|stri=() opstackoptop+=stri; else if(stri=) while(optop0&opstack-optop!=() numstacknumtop-
5、2=result(numstacknumtop-2,opstackoptop,numstacknumtop-1); numtop-; if(opstackoptop!=() return 0; else if(stri=0&numtop=0) return 0; while(optop0&op(stri)=op(opstackoptop-1) numstacknumtop-2=result(numstacknumtop-2,opstack-optop,numstacknumtop-1); numtop-; if(stri!=0) opstackoptop+=stri; if(stri!=0)
6、i+; if(numtop!=1|optop!=0) return 0; return 1; 3.3 程序運(yùn)行結(jié)果(拷屏)1 運(yùn)行程序,打開程序界面 2 用戶正確輸入算術(shù)表達(dá)式的值 3 如果在輸入過程中出現(xiàn)錯(cuò)誤,例如,出現(xiàn)兩個(gè)乘號(hào),按c鍵清除 4 清除后5 正確輸入算術(shù)表達(dá)式后按e得到正確結(jié)果6 按s鍵保存所得到的結(jié)果7 按r讀出被保存的數(shù)據(jù)8 按q退出程序9 按y退出4. 課程設(shè)計(jì)心得、存在問題及解決方法通過本次課程設(shè)計(jì),我鞏固了棧的建立,入棧,出棧的操作,提高了發(fā)現(xiàn)問題進(jìn)而解決問題的能力,深化了數(shù)據(jù)結(jié)構(gòu)的基本知識(shí),并進(jìn)行了拓展實(shí)踐。最終,加強(qiáng)了程序設(shè)計(jì)的能力,并且能夠有條理的安排各個(gè)函數(shù)的
7、功能和位置。曾經(jīng)存在的問題:1) 利用棧判斷小數(shù)存在,并求解小數(shù)運(yùn)算。2) 考慮各個(gè)運(yùn)算符的優(yōu)先順序。解決方法:1) 利用小數(shù)點(diǎn)存在的判斷,以及位數(shù)與數(shù)值的關(guān)系,除以十的倍數(shù)進(jìn)行數(shù)值運(yùn)算。2) 優(yōu)先順序自己先羅列一遍,以免遺漏。將+-*/數(shù)字化,以此代表優(yōu)先順序。()單獨(dú)處理。附:程序源代碼:#include #include #include #include #include #define n 100 double numstackn=0; /*操作數(shù)堆棧*/int numtop; /*操作數(shù)堆棧棧頂相對(duì)棧底的偏移量,可以用來判斷堆棧是否為空*/char opstackn; /*界符堆棧
8、*/int optop; /*界符堆棧棧頂相對(duì)棧底的偏移量,可以用來判斷堆棧是否為空*/int op(char ch) /*將運(yùn)算符映射為數(shù)字,表示優(yōu)先級(jí)*/ if(ch=+|ch=-) return 2; if(ch=*|ch=/) return 3; if(ch=() return -1; return 0; double result(double num1,char op,double num2) /*執(zhí)行運(yùn)算*/ if(op=+) return num1+num2; if(op=-) return num1-num2; if(op=*) return num1*num2; if(op
9、=/) return num1/num2; return 0; int compute(char str) /*利用棧結(jié)構(gòu)對(duì)算術(shù)表達(dá)式進(jìn)行求解,分析表達(dá)式*/ double num=0; int i=0,j=1,k=1; /*j代表小數(shù)點(diǎn)后位數(shù),k代表數(shù)字符號(hào)(正負(fù))*/ int flag=0; /*flag=0表示不是小數(shù)位,1表示是小數(shù)位*/ numtop=optop=0; while(stri!=0|optop0) /*如果算術(shù)表達(dá)式不為空*/ if(stri=0&stri0&!op(stri-1)&stri!=(&stri-1!=) /*i0且前一字符不是+,-,*,/,(,)這些字符
10、,且當(dāng)前字符不是(*/ numstacknumtop+=num*k; /*壓num*k入操作數(shù)堆棧*/ num=0; j=1; flag=0; k=1; if(optop=0|stri=() opstackoptop+=stri; /*如界符堆棧為空或當(dāng)前字符為(,將當(dāng)前字符壓入界符堆棧*/ else if(stri=) /*若當(dāng)前字符為)*/ while(optop0&opstack-optop!=() numstacknumtop-2=result(numstacknumtop-2,opstackoptop,numstacknumtop-1); numtop-; /*分別從操作數(shù)堆棧,界符
11、堆棧出棧響應(yīng)元素執(zhí)行計(jì)算,結(jié)果送入操作數(shù)堆棧*/ /*直到遇到界符(,這是正常情況,或者界符堆棧為空,這表明表達(dá)式是有錯(cuò)誤的*/ if(opstackoptop!=() return 0; else /*界符堆棧非空,當(dāng)前字符不是(,也不是)*/ if(stri=0&numtop=0) return 0; /*如果表達(dá)式結(jié)束,或操作數(shù)堆棧已空,返回調(diào)用處*/while(optop0&op(stri)=0&ch=0&ch=9 ) numj+=ch; numj=0; else j=0; if(ch=s|ch=s) /*保存數(shù)據(jù)*/ if(strlen(num) face(); /*調(diào)用face函數(shù)
12、*/ printf(%s 已經(jīng)被保存n,strcpy(save,num); /*將num中的算術(shù)表達(dá)式保存到save中*/ printf(請(qǐng)輸入一個(gè)算術(shù)表達(dá)式,按e得到結(jié)果n); printf(%s,str); else face(); /*調(diào)用face函數(shù)*/ printf(沒有數(shù)據(jù)被保存!n); /*沒有輸入算術(shù)表達(dá)式*/ printf(請(qǐng)輸入一個(gè)算術(shù)表達(dá)式,按e得到結(jié)果n); printf(%s,str); if(ch=r|ch=r) /*讀取數(shù)據(jù)*/ if(strlen(save) /*將保存的數(shù)據(jù)讀出*/ face(); /*調(diào)用face函數(shù)*/ printf(請(qǐng)輸入一個(gè)算術(shù)表達(dá)式,
13、按e得到結(jié)果n); printf(%s,strcat(str,save); /*輸出保存的數(shù)據(jù)*/ i+=strlen(save); if(ch=c|ch=c) /*清除數(shù)據(jù)*/ if(strlen(str) str-i=0; face(); /*調(diào)用face函數(shù)*/ printf(請(qǐng)輸入一個(gè)算術(shù)表達(dá)式,按e得到結(jié)果n); printf(%s,str); if(ch=e|ch=e) /*求算術(shù)表達(dá)式的值*/ if(compute(str) printf(n=%gn,numstack0); j=0; temp=numstack0; else face(); /*調(diào)用face函數(shù)*/ printf(請(qǐng)輸入一個(gè)算術(shù)表達(dá)式,按e得到結(jié)果n); printf(%s,str); printf(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024施工混凝土合同范本
- 2024年中英文對(duì)照技術(shù)文檔制作與審核合同3篇
- 2024年高端住宅銷售代理協(xié)議版
- 2025年度甜品連鎖店品牌授權(quán)合作合同范本3篇
- 2024幼兒園幼兒安全與健康管理聘用協(xié)議書3篇
- 2024幼兒園教師學(xué)生個(gè)性發(fā)展與教育引導(dǎo)合同3篇
- 2024年電子商務(wù)用戶隱私保護(hù)協(xié)議3篇
- 2024年電子產(chǎn)品物流配送合同
- 2025年度冷鏈倉儲(chǔ)與配送服務(wù)合同范本3篇
- 2024物流運(yùn)輸合同涉及的責(zé)任與義務(wù)
- 蘇軾的人生經(jīng)歷英文版
- 全新大學(xué)英語語法手冊(cè)教案
- 2022年11月26日四川省瀘州市事業(yè)單位招聘考試《綜合知識(shí)》精選真題及答案
- 消化內(nèi)鏡治療新技術(shù)課件
- 小學(xué)語文作業(yè)分層設(shè)計(jì)分析
- 讀者文章匯總 讀者文摘100篇
- 現(xiàn)代文閱讀之散文
- 山東省濟(jì)南市高職單招2022-2023學(xué)年醫(yī)學(xué)綜合真題及答案
- 配色技術(shù)員工作計(jì)劃工作總結(jié)述職報(bào)告PPT模板下載
- 挖掘機(jī)、裝載機(jī)檢驗(yàn)報(bào)告完整
- 小學(xué)科學(xué)三年級(jí)上冊(cè)期末考試質(zhì)量分析
評(píng)論
0/150
提交評(píng)論