版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、中北大學數(shù) 據(jù) 結 構課 程 設 計 說 明 書學生姓名:張蓓學 號:1021011602學 院:軟件學院專 業(yè):軟件工程題 目:算術表達式的求解指導教師何志英2011年12月20日1. 設計任務概述(包括系統(tǒng)總體框圖及功能描述) 利用棧結構,求解用戶正確輸入的算術表達式,并實現(xiàn)保存、讀取、清除功能,且對用戶輸入的錯誤信息進行提示,重新輸入.按下”q”鍵表達式錯誤表達式正確按下”s”鍵按下”r”鍵按下”e”鍵 求解算術表達式系統(tǒng)輸入算術表達式 判斷表達式 是否正確求解運算,得到結果提示錯誤,重新輸入按下“n”鍵按下“y”鍵退出?(y/n)退出運算系統(tǒng)讀取剛才保存的得數(shù)保存得數(shù)按下“q”鍵2.
2、本設計所采用的數(shù)據(jù)結構(如:鏈表、棧、樹、圖等)本設計采用了棧結構,創(chuàng)建了兩個棧,一個壓入數(shù)字,另一個壓入符號。3. 功能模塊詳細設計3.1 詳細設計思想求解表達式的主要思想是創(chuàng)建兩個棧,一個是符號棧,另一個是數(shù)字棧。符號棧關鍵是運算優(yōu)先順序,數(shù)字棧關鍵是多位數(shù)與小數(shù)的計算。本程序設計了四個模塊,第一個模塊double result(double num1,char op,double num2),主要目的是進行加減乘除運算的操作方法,num1與num2的關系;第二個模塊int compute(char str),主要目的是對用戶輸入的算術表達式進行求解,其中對多位數(shù)與小數(shù)進行了定義與數(shù)值計算
3、,以及帶括號的表達式運算的優(yōu)先順序;第三個模塊void face(),主要目的是設計用戶主界面;第四個模塊是主函數(shù),主要目的是將上述模塊集中運用,進行求解。至此完成利用棧結構求解表達式運算。3.2 核心代碼調用的庫函數(shù):#include #include #include #include #include 自己定義的函數(shù):1) double result(double num1,char op,double num2) 進行加減乘除運算2) int compute(char str) 對用戶輸入的算術表達式進行求解3) void face() 用戶主界面4) main() 主函數(shù)核心定義函數(shù)
4、設計: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 程序運行結果(拷屏)1 運行程序,打開程序界面 2 用戶正確輸入算術表達式的值 3 如果在輸入過程中出現(xiàn)錯誤,例如,出現(xiàn)兩個乘號,按c鍵清除 4 清除后5 正確輸入算術表達式后按e得到正確結果6 按s鍵保存所得到的結果7 按r讀出被保存的數(shù)據(jù)8 按q退出程序9 按y退出4. 課程設計心得、存在問題及解決方法通過本次課程設計,我鞏固了棧的建立,入棧,出棧的操作,提高了發(fā)現(xiàn)問題進而解決問題的能力,深化了數(shù)據(jù)結構的基本知識,并進行了拓展實踐。最終,加強了程序設計的能力,并且能夠有條理的安排各個函數(shù)的
7、功能和位置。曾經存在的問題:1) 利用棧判斷小數(shù)存在,并求解小數(shù)運算。2) 考慮各個運算符的優(yōu)先順序。解決方法:1) 利用小數(shù)點存在的判斷,以及位數(shù)與數(shù)值的關系,除以十的倍數(shù)進行數(shù)值運算。2) 優(yōu)先順序自己先羅列一遍,以免遺漏。將+-*/數(shù)字化,以此代表優(yōu)先順序。()單獨處理。附:程序源代碼:#include #include #include #include #include #define n 100 double numstackn=0; /*操作數(shù)堆棧*/int numtop; /*操作數(shù)堆棧棧頂相對棧底的偏移量,可以用來判斷堆棧是否為空*/char opstackn; /*界符堆棧
8、*/int optop; /*界符堆棧棧頂相對棧底的偏移量,可以用來判斷堆棧是否為空*/int op(char ch) /*將運算符映射為數(shù)字,表示優(yōu)先級*/ 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í)行運算*/ 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) /*利用棧結構對算術表達式進行求解,分析表達式*/ double num=0; int i=0,j=1,k=1; /*j代表小數(shù)點后位數(shù),k代表數(shù)字符號(正負)*/ int flag=0; /*flag=0表示不是小數(shù)位,1表示是小數(shù)位*/ numtop=optop=0; while(stri!=0|optop0) /*如果算術表達式不為空*/ if(stri=0&stri0&!op(stri-1)&stri!=(&stri-1!=) /*i0且前一字符不是+,-,*,/,(,)這些字符
10、,且當前字符不是(*/ numstacknumtop+=num*k; /*壓num*k入操作數(shù)堆棧*/ num=0; j=1; flag=0; k=1; if(optop=0|stri=() opstackoptop+=stri; /*如界符堆棧為空或當前字符為(,將當前字符壓入界符堆棧*/ else if(stri=) /*若當前字符為)*/ while(optop0&opstack-optop!=() numstacknumtop-2=result(numstacknumtop-2,opstackoptop,numstacknumtop-1); numtop-; /*分別從操作數(shù)堆棧,界符
11、堆棧出棧響應元素執(zhí)行計算,結果送入操作數(shù)堆棧*/ /*直到遇到界符(,這是正常情況,或者界符堆棧為空,這表明表達式是有錯誤的*/ if(opstackoptop!=() return 0; else /*界符堆棧非空,當前字符不是(,也不是)*/ if(stri=0&numtop=0) return 0; /*如果表達式結束,或操作數(shù)堆棧已空,返回調用處*/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(); /*調用face函數(shù)
12、*/ printf(%s 已經被保存n,strcpy(save,num); /*將num中的算術表達式保存到save中*/ printf(請輸入一個算術表達式,按e得到結果n); printf(%s,str); else face(); /*調用face函數(shù)*/ printf(沒有數(shù)據(jù)被保存!n); /*沒有輸入算術表達式*/ printf(請輸入一個算術表達式,按e得到結果n); printf(%s,str); if(ch=r|ch=r) /*讀取數(shù)據(jù)*/ if(strlen(save) /*將保存的數(shù)據(jù)讀出*/ face(); /*調用face函數(shù)*/ printf(請輸入一個算術表達式,
13、按e得到結果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(); /*調用face函數(shù)*/ printf(請輸入一個算術表達式,按e得到結果n); printf(%s,str); if(ch=e|ch=e) /*求算術表達式的值*/ if(compute(str) printf(n=%gn,numstack0); j=0; temp=numstack0; else face(); /*調用face函數(shù)*/ printf(請輸入一個算術表達式,按e得到結果n); printf(%s,str); printf(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度企業(yè)培訓與人才發(fā)展合同
- 房產購置正規(guī)協(xié)議(2024年)
- 2024年度項目投資與合作合同
- 《透邪解毒法治療甲型H1N1流感研究》
- 《新形勢下Y村鎮(zhèn)銀行信貸風險管理研究》
- 《信用評級的本質屬性研究》
- 《海信電器跨國并購東芝財務風險分析與防范》
- 2024年度互聯(lián)網(wǎng)金融服務平臺服務合同金融服務內容與技術支持
- 14機械能及其轉化-2022~2023學年人教版物理八年級下冊
- 2024年貴州客運從業(yè)資格證考試技巧口訣
- GB/T 44068-2024LTE移動通信終端支持北斗定位的技術要求
- 2024年秋新北師大版七年級上冊數(shù)學教學課件 4.2.1 角
- PFMEA課件培訓學習
- 2024-2030年中國CVD和和ALD前體行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 《建筑施工測量標準》JGJT408-2017
- 2024年上海市各區(qū)高三語文一模試題匯編:現(xiàn)代文二
- 風險管理方法及應急方案
- 手糊補強工A卷考試 (1)附有答案
- 做一顆硬核牛油果讓勤勵成為青春底色課件高中心理健康教育主題班會
- 小區(qū)物業(yè)、保安服務投標方案(技術標)
- 新課標背景下“物聯(lián)網(wǎng)實踐與探索”模塊教學實踐
評論
0/150
提交評論