




已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
程序?qū)嵙晥蟾鏁鹬谷掌冢?2012 年 6月 18 日 至 2012 年 6月 29日 學 號: 2011272086 .班 級: 通 信 113 .姓 名: 李 成 元 .指導教師: 趙金勝 刑延超 .通信與電子工程學院2012年 6月 30日1 設計時間2012.06.18-2012.06.292 設計目的1、實習目的 熟練掌握和系統(tǒng)理解C語言的基本知識點:數(shù)據(jù)類型、程序結(jié)構(gòu)、函數(shù)、數(shù)組、結(jié)構(gòu)體、文件等。 學會用C語言解決實際問題的方法 掌握較大型程序設計及調(diào)試的一般步驟和方法。3設計任務綜合運用C語言程序設計課程的主要知識設計一個計算器程序,利用算符優(yōu)先關系,實現(xiàn)對算術(shù)四則混合運算表達式的求值。輸入的形式:算術(shù)表達式,以井號“#”結(jié)束。例如2*(3+4)#; 包含的運算符只能有+ 、- 、* 、/ 、(、 );輸出的形式:運算結(jié)果,例如Answer is:14;程序所能達到的功能:對算術(shù)表達式求值并輸出結(jié)果。4.1需求分析1、程序所能達到的功能:能夠處理以字符序列的形式輸入的不含變量的實數(shù)表達式,正確處理負數(shù)與小數(shù),判斷表達式是還語法正確(包含分母不能為零的情況),正確實現(xiàn)對算術(shù)四則混合運算表達式的求值,能夠?qū)⒂嬎阒杏龅降膯栴}和結(jié)果以文件的形式予以存儲。2、輸入的形式和輸入值的范圍:以字符串的形式輸入表達式,以“#”結(jié)束。3、輸出的形式:在計算過程中遇到的問題或最終的答案將顯示在屏幕上,同時所計算的表達式的最終的結(jié)果也將保存在文件中。4、測試數(shù)據(jù):輸入“3*(7-2)#”時,輸出“15.000000”,測試正確;輸入“!(9-2)#”時,輸出“輸入錯誤!”,測試正確。4.2總體設計4.2.1抽象數(shù)據(jù)類型定義ADT Stack數(shù)據(jù)對象:D= |ElemSet,i=1,2,,n, n0數(shù)據(jù)對象:R1=|,i=2,,n約定端為棧頂,端為棧底?;静僮鳎篒nitStack(&S)操作結(jié)果:構(gòu)造一個空棧S。GetTop(S)初始條件:棧S已存在。操作結(jié)果:用P返回S的棧頂元素。Push(&S,ch)初始條件:棧S已存在。操作結(jié)果:插入元素ch為新的棧頂元素。Pop(&S)初始條件:棧S已存在。操作結(jié)果:刪除S的棧頂元素。In(ch)操作結(jié)果:判斷字符是否是運算符,運算符即返回1。Precede(c1, c2) 初始條件:c1,c2為運算符。操作結(jié)果:判斷運算符優(yōu)先權(quán),返回優(yōu)先權(quán)高的。Operate(a,op,b)初始條件:a,b為整數(shù),op為運算符。操作結(jié)果:a與b進行運算,op為運算符,返回其值。num(n)操作結(jié)果:返回操作數(shù)的長度。EvalExpr()初始條件:輸入表達式合法。操作結(jié)果:返回表達式的最終結(jié)果。ADT Stack4.2.2函數(shù)模塊說明為實現(xiàn)算符優(yōu)先算法,可以使用兩個工作棧。一個稱做OPTR,用以寄存運算符;另一個稱做OPND,用以寄存操作數(shù)或運算結(jié)果。算法的基本思想是:(1)首先置操作數(shù)棧為空棧,表達式起始符“#”為運算符棧底元素(2)依次讀入表達式中每個字符,若是操作數(shù)則進OPND棧,若是運算符則和OPTR棧的棧頂運算符比較優(yōu)先權(quán)后作相應操作,直至整個表達式求值完畢(即OPTR棧的棧頂元素和當前讀入的字符均為“#”)。4.2.3主函數(shù)流程圖4.2.4函數(shù)模塊調(diào)用關系4.2.5運算符間的優(yōu)先關系1 2+-*/()#+-*/(#=S.stacksize) S.base=(SElemType*)realloc(S.base,(S.StackSize+STACKINCREMENT)*sizeof (SElemType); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize += STACKINCREMENT;*S.top+ =e;return OK;Status Pop(SqStack &S,SElemType &e)if(S.top = S.base) return ERROR;e = * -S.top;return OK;OperandType EvaluateExpession()InitStack(OPTR); Push(OPTR,#);InitStack(OPND); c = getchar();while(c!#|GetTop(OPTR)!=#) if(!In(c,OP)Push(OPND,c); c = getchar();) else switch(Precede(GetTop(OPTR),c) case:Pop(OPTR,theta); Pop(OPND,b); Pop(OPND,a); Push(OPND,Operate(a,theta,b); break; 4.3.2函數(shù)調(diào)用關系4.3.3主要模塊的算法描述void main()SqStack_T OPTR;SqStack_N OPND;float a,b,i; char theta,c,x;InitStack_T(&OPTR);Push_T(&OPTR,#);InitStack_N(&OPND);printf(“請輸入表達式關以#結(jié)尾:n”);c=getchar();if(c=35|(c=40&c=47&c=48&c=57) i=(float)c-48; Push_N(&OPND,i); c=getchar(); else switch(Precede(GetTop_T(&OPND),c) case:theat=Pop_T(&OPTR);b=Pop_N(&OPND);a=Pop_N(&OPND);Push_N(&OPND,Operate(a,theta,b);break; printf(“結(jié)果是%fn”,GetTop_N(&OPND);else printf(“輸入錯誤!n”);4.4測試與分析4.4.1測試加法測試,輸入正確,輸出正確,測試正確:乘法測試,輸入正確,輸出正確,測試正確:輸入表達式正確,輸出正確,測試正確:輸入表達式錯誤,能正確判斷,測試正確:4.4.2分析內(nèi)容包括:1、調(diào)試過程中遇到的問題是如何解決的以及對設計與實現(xiàn)的回顧討論和分析:遇到的問題:調(diào)試過程中遇到了輸入非法字符不輸出“錯誤!”的情況。解決的辦法:查ASCII碼表得知運算符+,-,*,/,(,),#和運算數(shù)0,1,2,3,4,5,6,7,8,9相應的ASCII值。在主程序中加入了判斷語句,判斷輸入的是否為運算符或運算數(shù)。如果是,則進行正常運算;如果不是,則返回錯誤。2、算法的時間復雜度和空間復雜度的分析:中綴表達式運算時間主要用在字符串掃描和算符優(yōu)先權(quán)的比較上。把#看作運算符,操作數(shù)與運算符個數(shù)相同,最壞情況下優(yōu)先級比較是n/2次,即運算順序完全是逆序的,每個字符掃描一遍是O(n)的,所以整個算法復雜度是O(n2)的。算法中用到兩個棧,分別為O(n/2),其算法空間復雜度是O(n)。4.5附錄源程序#include stdio.h#include stdlib.h#define OK 1#define ERROR 0#define OVERFLOW 0#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef structchar *base;char *top;int stacksize;SqStack_T;typedef structfloat *base;float *top;int stacksize;SqStack_N;void InitStack_T(SqStack_T *S)(*S).base=(char *)malloc(STACK_INIT_SIZE*sizeof(char);if(!(*S).base) exit(OVERFLOW);(*S).top=(*S).base;(*S).stacksize=STACK_INIT_SIZE;void InitStack_N(SqStack_N *S)(*S).base=(float *)malloc(STACK_INIT_SIZE*sizeof(float);if(!(*S).base) exit(OVERFLOW);(*S).top=(*S).base;(*S).stacksize=STACK_INIT_SIZE;char GetTop_T(SqStack_T *S)char e;if(*S).top=(*S).base) return ERROR;e=*(*S).top-1);return e;float GetTop_N(SqStack_N *S)float e;if(*S).top=(*S).base) return ERROR;e=*(*S).top-1);return e;char Push_T(SqStack_T *S,char e)if(*S).top-(*S).base=(*S).stacksize)(*S).base=(char*)realloc(*S).base,(*S).stacksize+STACKINCREMENT)*sizeof(char);if(!(*S).base) exit(OVERFLOW);(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT;*(*S).top)+=e;return OK;float Push_N(SqStack_N *S,float e)if(*S).top-(*S).base=(*S).stacksize)(*S).base=(float*)realloc(*S).base,(*S).stacksize+STACKINCREMENT)*sizeof(float);if(!(*S).base) exit(OVERFLOW);(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT;*(*S).top)+=e;return OK;char Pop_T(SqStack_T *S)char e;if(*S).top=(*S).base) return ERROR;e=*(-(*S).top);return e;float Pop_N(SqStack_N *S)float e;if(*S).top=(*S).base) return ERROR;e=*(-(*S).top);return e;char m7=+-*/()#;char n77=, ,=40&c=47&c=48&c=57)i=(float)c-48;Push_N(&OPND,i);c=getchar();elseswitch(Precede(GetTop_T(&OPTR),c)case:theta=Pop_T(&OPTR);b=Pop_N(&OPND);a=Pop_N(&OPND);Push_N(&OPND,Operate(a,theta,b);break;printf(結(jié)果是%fn,GetTop_N(&OPND);else printf(輸入錯誤!n);5 總結(jié)與展望通過這段時間的課程設計,本人對計算機的應用、數(shù)據(jù)結(jié)構(gòu)的作用以及C語言的使用都有了更深的了解。當然也遇到不少問題,也正是國為這些問題引發(fā)的思考給我?guī)砹耸斋@。從當初不喜歡上機寫程序到現(xiàn)在能主動寫程序,從當初拿著程序不知從何下手到現(xiàn)在知道如何分析問題,如何用專業(yè)知識解決實際問題的轉(zhuǎn)變。我發(fā)現(xiàn)無論是專業(yè)知識還是動手能力,自己都有很大程度的提高。在實際上機操作過程中,不僅是讓我們了解數(shù)據(jù)結(jié)構(gòu)的理論知識,更重要的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030中國智能面包機行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國無菌外科縫線行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國無糖功能性食品市場消費趨勢與競爭戰(zhàn)略規(guī)劃報告
- 2025至2030中國無葉風扇行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國旅游電子商務行業(yè)市場發(fā)展現(xiàn)狀及盈利模式與投融資報告
- 2025至2030中國新能源掃街車行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國敷料行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國數(shù)字和模擬計時器行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國護手霜和乳液行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2025至2030中國手提行李拉桿箱包行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 2024-2025學年初中英語七年級下冊期末考試綜合測試卷及參考答案
- 四川電網(wǎng)新建電源并網(wǎng)服務指南(2025年)
- 2024北森圖表分析題庫
- 事故隱患內(nèi)部報告獎勵制度
- 醫(yī)院培訓課件:《緊急情況下口頭醫(yī)囑制度與執(zhí)行流程》
- 北京市東城區(qū)名校2024年八年級物理第二學期期末質(zhì)量檢測試題及答案解析
- JBT 11699-2013 高處作業(yè)吊籃安裝、拆卸、使用技術(shù)規(guī)程
- 外墻、屋面節(jié)能保溫旁站監(jiān)理記錄表(共3頁)
- 美的審廠資料清單
- 園林綠化單位(子單位)工程質(zhì)量竣工驗收報告
- 人教版八年級美術(shù)下冊紋樣與生活第二課時設計紋樣
評論
0/150
提交評論