算數(shù)表達式求值演示.ppt_第1頁
算數(shù)表達式求值演示.ppt_第2頁
算數(shù)表達式求值演示.ppt_第3頁
算數(shù)表達式求值演示.ppt_第4頁
算數(shù)表達式求值演示.ppt_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、組員:孔* 李*,算數(shù)表達式求值演示,數(shù)據(jù)結(jié)構(gòu)課程設計,算數(shù)表達式求值演示 3*(7-2) 常量 5*a+b/4 變量 53 冪乘 7 取反,顯示運算過程,常量的四則運算,擴展到冪乘與非,* 乘,/ 除, 減,冪乘, 非,+加,所做的工作,解決的方法,實現(xiàn)的功能,遇到的問題,組員的信息,實現(xiàn)的功能,擴展到變量求解,5,判斷運算符之間的優(yōu)先級 判斷是那種運算符 運算數(shù)出棧 做加、減、乘、除等運算 顯示運算數(shù)與運算符的出棧順序,# #,+-*/,所做的工作,解決的問題,實現(xiàn)的功能,遇到的問題,組員的信息,所做的工作,入棧與出棧,頭文件的定義,運算符的擴展,算數(shù)運算與顯示,how?,?,proble

2、m !,遇到的問題,解決的方法,實現(xiàn)的功能,遇到的問題,所做的工作,組員的信息,解決的方法,實現(xiàn)的功能,遇到的問題,組員的信息,所做的工作,解決的方法,圖書館查閱資料,上網(wǎng)查閱資料,組員之間討論,Team members information!,姓名:孔* 學號:2011* 李* 2011*,實現(xiàn)的功能,遇到的問題,組員的信息,所做的工作,解決的方法,組員信息,算數(shù)表達式求值演示,謝謝大家!,常量的四則運算,void EvaluateExpression(char Expression81)/ Expression81表達式函數(shù) print(); int n=0,i=0;/定義變量 Stac

3、kChar OPTR; Stackint OPND;/定義桟 char TempData20,Opr20,OPR2020,theta,*c,x;/定義字符型變量,數(shù)組,指針 int Data,a,b,value,t20=0;/定義數(shù)組,變量 InitStack(OPTR); /初始化運算符桟 Push(OPTR, #);/讓結(jié)束符#號入桟 InitStack(OPND);/初始化運算數(shù)桟 strcat(Expression,#);/鏈接表達式與結(jié)束符 c=Expression;/將Expression的值賦給c,常量的四則運算,while( *c!=# | (GetTop(OPTR,x),x!

4、=#) ) /判斷c是否為結(jié)束符若是則執(zhí)行循環(huán)否則運算結(jié)束 n+;/n表示運算了多少步 Step(OPTR,OPND,n);/顯示OPND棧和OPTR棧的內(nèi)容 if( *c=0 /將Data入棧OPND ,常量的四則運算,else if(In(*c, OPSET)/判斷c是否是操作符 GetTop(OPTR,x);/桟頂元素 switch(Precede(x, *c) /判斷二者的大小關(guān)系并帶回(或: /若帶回大于號則運算 printf(t%c,*c); Pop(OPTR, theta);/出棧一個運算符 Pop(OPND, b);/ 出棧一個運算數(shù)字,常量的四則運算,if(theta=)/判

5、斷是否是單目操作符 Push(OPND, Operate(0, theta, b);/若是調(diào)用Operate并帶回結(jié)果 printf(tOpetra(%c,%2d),theta,b);/顯示運算時的操作 else/若不是單目操作符則為雙目操作符 Pop(OPND, a); / 出棧一個運算數(shù)字 Push(OPND, Operate(a, theta, b);/若是調(diào)用Operate并帶回結(jié)果 printf(tOpetra(%2d,%c,%2d),a,theta,b);/顯示運算時的結(jié)果 break; / switch /if函數(shù):輸入運算符時 else/若不是OPSET中的操作符則顯示提示信息

6、并重新執(zhí)行程序 printf(輸入表達式有非法字符nnnn); return; /else函數(shù):輸入字母時 /while函數(shù):運算過程,顯示運算過程,輸出OPTR棧內(nèi)數(shù)據(jù) void printOPTR(StackChar OPTR) StackChar TOPTR; InitStack(TOPTR); /創(chuàng)建新桟TOPTR char p; int n=5; while(Pop(OPTR,p)/調(diào)用出桟基本操作(出桟操作) n-; printf(%3c ,p);/顯示運算符桟的輸出次序 Push(TOPTR,p);/將顯示后的操作符進入TOPTR桟中 while(0n-) printf( );/

7、格式的控制 while(Pop(TOPTR,p)/將TOPTR桟的運算符重新進入OPTR運算符桟(運算時調(diào)用OPTR) Push(OPTR,p); ,輸出OPND棧內(nèi)數(shù)據(jù) void printOPND(Stackint OPND) Stackint TOPND; InitStack(TOPND); /創(chuàng)建新桟TOPTR int q; int n=4; while(Pop(OPND,q)/調(diào)用出桟基本操作(出桟操作) n-; printf(%2d,q);/顯示運算數(shù)桟的輸出次序 Push(TOPND,q);/調(diào)用入桟基本操作(將顯示后的操作數(shù)進入TOPTD桟中) while(0n-) print

8、f( );/格式的控制 while(Pop(TOPND,q)/將TOPTD桟的運算數(shù)重新進入OPTD運算數(shù)桟(因為運算時調(diào)用OPTD) Push(OPND,q); ,顯示運算過程,顯示輸入運算數(shù)字時的操作顯示 void printNDoperate(int c) printf(t%2d,c); printf(t Push(OPND,%2d),c); /輸出每步OPND棧和OPTR棧的內(nèi)容 void Step(StackChar OPTR,Stackint OPND,int n) printf(n%2d:t,n); printOPTR(OPTR);/調(diào)用輸出OPTR棧內(nèi)數(shù)據(jù)函數(shù) printOPN

9、D(OPND);/調(diào)用輸出OPTD棧內(nèi)數(shù)據(jù)函數(shù) ,顯示運算過程,擴展非與冪乘操作 if(theta=)/判斷是否是單目操作符(非) Push(OPND, Operate(0, theta, b);/若是計算并帶回結(jié)果 printf(tOpetra(%c,%2d),theta,b);/顯示運算時的操作 else/若不是單目操作符則為雙目操作符(冪乘) Pop(OPND, a); / 出棧一個運算數(shù)字 Push(OPND, Operate(a, theta, b); /調(diào)用Operate(0, theta, b)并帶回結(jié)果 printf(tOpetra(%2d,%c,%2d),a,theta,b)

10、;/顯示運算時的操作 break; / switch,運算符擴展,/變量求值運算 void vEvaluateExpression0()/同常量運算類似 int n=0; StackChar OPTR; Stackint OPND; char Expression81,TempData20,theta,*c,x,Opr20; int Data,a,b,d,value; InitStack(OPTR); Push(OPTR, #); InitStack(OPND); printf(請輸入表達式:n); gets(Expression);/輸入表達式 print(); strcat(Express

11、ion,#); c=Expression;,變量求解,while( *c!=# | (GetTop(OPTR,x),x!=#) ) Step(OPTR,OPND,+n);/顯示OPND棧和OPTR棧的內(nèi)容 if( *c=0 /入棧OPND /if函數(shù):輸入數(shù)字時,變量求解,else if(In(*c, OPSET)/判斷c是否是操作符 GetTop(OPTR,x);/桟頂元素 switch(Precede(x, *c) /判斷二者的大小關(guān)系并帶回(或: /若帶回大于號則運算 printf(t%c,*c); Pop(OPTR, theta);/出棧一個運算符 Pop(OPND, b);/ 出棧一

12、個運算數(shù)字,變量求解,if(theta=)/判斷是否是單目操作符 Push(OPND, Operate(0, theta, b);/若是調(diào)用Operate并帶回結(jié)果 printf(tOpetra(%c,%2d),theta,b);/顯示運算時的操作 else/若不是單目操作符則為雙目操作符 Pop(OPND, a); / 出棧一個運算數(shù)字 Push(OPND, Operate(a, theta, b);/若是調(diào)用Operate并帶回結(jié)果 printf(tOpetra(%2d,%c,%2d),a,theta,b);/顯示運算時的結(jié)果 break; / switch /if函數(shù):輸入運算符時 el

13、se/若不是OPSET中的操作符則顯示提示信息并重新執(zhí)行程序 printf(輸入表達式有非法字符nnnn); return; /else函數(shù):輸入字母時 /while函數(shù):運算過程,變量求解,else int i=0; Opr20=NULL;/將Opr20數(shù)組初始化為空 while( *c=a /顯示變量的值 /else函數(shù):輸入變量時 /while,變量求解,頭文件的定義,頭文件定義的內(nèi)容是創(chuàng)建桟,銷毀桟,取桟頂元素,入桟,出桟,置空,判空等基本操作的定義,在源程序中調(diào)用使源程序更加簡潔 Intstack.h #define STACK_INIT_SIZE 100 #define STACK

14、INCREMENT 10 typedef int ElemType; typedef struct ElemType * base; /棧底指針 ElemType * top; /棧頂指針 int stacksize; /棧當前可使用的最大容量 Stackint; 桟的順序存儲表示,頭文件的定義,頭文件定義的內(nèi)容是創(chuàng)建桟,銷毀桟,取桟頂元素,入桟,出桟,置空,判空等基本操作的定義,在源程序中調(diào)用使源程序更加簡潔 int InitStack(Stackint 銷毀桟,頭文件的定義,頭文件定義的內(nèi)容是創(chuàng)建桟,銷毀桟,取桟頂元素,入桟,出桟,置空,判空等基本操作的定義,在源程序中調(diào)用使源程序更加簡潔 int GetTop(Stackint S, ElemType 若桟不空,則返回桟頂元素,用e返回其值,頭文件的定義,頭文件定義的內(nèi)容是創(chuàng)建桟,銷毀桟,取桟頂元素,入桟,出桟,置空,判空等基本操作的定義,在源程序

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論