數(shù)據(jù)結(jié)構(gòu)(表達(dá)式求值)課程設(shè)計(jì)_第1頁
數(shù)據(jù)結(jié)構(gòu)(表達(dá)式求值)課程設(shè)計(jì)_第2頁
數(shù)據(jù)結(jié)構(gòu)(表達(dá)式求值)課程設(shè)計(jì)_第3頁
數(shù)據(jù)結(jié)構(gòu)(表達(dá)式求值)課程設(shè)計(jì)_第4頁
數(shù)據(jù)結(jié)構(gòu)(表達(dá)式求值)課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

課程設(shè)計(jì)報(bào)告課程名稱:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)課程設(shè)計(jì)題目:表達(dá)式求值問題姓名:系:計(jì)算機(jī)科學(xué)與技術(shù)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)年級(jí):2011級(jí)學(xué)號(hào):指導(dǎo)教師:職稱:講師2011年12

目錄TOC\o"1-2"\u1.設(shè)計(jì)目的: 12.設(shè)計(jì)要求: 13.設(shè)計(jì)方案: 14.設(shè)計(jì)內(nèi)容: 24.1.需求分析 24.2.概要設(shè)計(jì) 24.3.詳細(xì)設(shè)計(jì) 44.4.調(diào)試分析與結(jié)果 74.5:使用說明 115.總結(jié): 126.附錄三:源代碼 12第25頁表達(dá)式求值問題1.設(shè)計(jì)目的:《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)》是計(jì)算機(jī)專業(yè)集中實(shí)踐性環(huán)節(jié)之一,是學(xué)習(xí)完《數(shù)據(jù)結(jié)構(gòu)》課程后進(jìn)行的一次全面的綜合練習(xí)。其目的是:(1)要達(dá)到理論與實(shí)際應(yīng)用相結(jié)合,使學(xué)生能夠根據(jù)數(shù)據(jù)對(duì)象的特性,學(xué)會(huì)數(shù)據(jù)組織的方法,能把現(xiàn)實(shí)世界中的實(shí)際問題在計(jì)算機(jī)內(nèi)部表示出來,并培養(yǎng)良好的程序設(shè)計(jì)技能。(2)在實(shí)踐中認(rèn)識(shí)為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu),掌握數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)語言、程序設(shè)計(jì)技術(shù)之間的關(guān)系,是前面所學(xué)知識(shí)的綜合和回顧。2.設(shè)計(jì)要求:以字符序列的形式從鍵盤輸入語法正確的、不含變量的整數(shù)(或?qū)崝?shù))表達(dá)式,實(shí)現(xiàn)對(duì)算術(shù)四則混合運(yùn)算表達(dá)式的求值。當(dāng)用戶輸入一個(gè)合法的算術(shù)表達(dá)式后,能夠返回正確的結(jié)果。能夠計(jì)算的運(yùn)算符包括:加、減、乘、除、括號(hào),對(duì)于異常表達(dá)式能給出錯(cuò)誤提示。3.設(shè)計(jì)方案:任何一個(gè)表達(dá)式都是由操作符,運(yùn)算符組成的。我們分別用順序棧來寄存表達(dá)式的操作數(shù)和運(yùn)算符。棧是限定于緊僅在表尾進(jìn)行插入或刪除操作的線性表。順序棧的存儲(chǔ)結(jié)構(gòu)是利用一組連續(xù)的存儲(chǔ)單元依次存放自棧底到棧頂?shù)臄?shù)據(jù)元素。為了實(shí)現(xiàn)算符優(yōu)先算法??梢允褂脙蓚€(gè)棧。一個(gè)稱為OPF,用以寄存運(yùn)算符,另一個(gè)稱做OPS,用以寄存操作數(shù)或運(yùn)算結(jié)果。1.首先置操作數(shù)棧為空棧,表達(dá)式起始符”#”為運(yùn)算符棧的棧底元素;2.依次讀入表達(dá)式,若是操作符即進(jìn)OPS棧,若是運(yùn)算符則和OPF棧的棧頂運(yùn)算符比較優(yōu)先權(quán)后作相應(yīng)的操作,直至整個(gè)表達(dá)式求值完畢(即OPF棧的棧頂元素和當(dāng)前讀入的字符均為”#”)。4.設(shè)計(jì)內(nèi)容:4.1.需求分析本程序所做的工作為:能直接求出四則表達(dá)式的值,并輸出;本程序可用于小學(xué)教師對(duì)學(xué)生作業(yè)的快速批改以及對(duì)數(shù)值位數(shù)要求較大的科學(xué)運(yùn)算。4.2.概要設(shè)計(jì)1.//用于存儲(chǔ)操作數(shù)和運(yùn)算結(jié)果(OPS):ADTLinkStack{數(shù)據(jù)元素:此鏈棧中的所有元素類型為字符型的數(shù)字字符數(shù)據(jù)關(guān)系:棧中數(shù)據(jù)元素之間是線性關(guān)系?;静僮?(1)InitStack(LinkStack&head)操作結(jié)果:構(gòu)造一個(gè)空棧head(2)IsEmpty(LinkStackhead)初始條件:棧head已存在操作結(jié)果:若棧為空棧,則返回TRUE,否則FALSE(3)Push(LinkStack&head,ElementTypeelement)初始條件:棧head已存在操作結(jié)果:插入元素element為新的棧頂元素(4)Pop(LinkStack&head,ElementType&element)初始條件:棧head已存在且非空操作結(jié)果:刪除head的棧頂元素,并用e返回其值(5)GetTop(LinkStackhead,ElementType&element)初始條件:棧head已存在并且非空操作結(jié)果:用e返回head的棧頂元素(6)DestroyStack(LinkStack&head)初始條件:棧head已存在操作結(jié)果:棧head被銷毀}ADTLinkStack2.//用于存儲(chǔ)運(yùn)算符(OPF):ADTLinkCharStack{數(shù)據(jù)對(duì)象D:元素類型為字符型的符號(hào)字符數(shù)據(jù)關(guān)系R:基本操作:棧中數(shù)據(jù)元素之間是線性關(guān)系。(1)CInitStack(LinkCharStack&head)操作結(jié)果:構(gòu)造一個(gè)空棧head(2)CIsEmpty(LinkCharStackhead)初始條件:棧head已存在操作結(jié)果:若棧為空棧,則返回TRUE,否則FALSE(3)CPush(LinkCharStack&head,ElementTypeelement)初始條件:棧head已存在操作結(jié)果:插入元素element為新的棧頂元素(4)CPop(LinkCharStack&head,ElementType&element)初始條件:棧head已存在且非空操作結(jié)果:刪除head的棧頂元素,并用e返回其值(5)CGetTop(LinkCharStackhead,ElementType&element)初始條件:棧head已存在并且非空操作結(jié)果:用e返回head的棧頂元素(6)CDestroyStack(LinkCharStack&head)初始條件:棧head已存在操作結(jié)果:棧head被銷毀}ADTLinkCharStack3.系統(tǒng)中子程序及功能要求:Comop(charch):判斷輸入的字符是否為運(yùn)算符charPrecede(charch,charc):比較兩個(gè)運(yùn)算符的優(yōu)先級(jí),ch是棧頂字符,c是表達(dá)式字符。ElementTypeOperate(ElementTypea,charch,ElementTypeb):解析表達(dá)式中的雙目運(yùn)算,其返回的結(jié)果即為雙目運(yùn)算表達(dá)式的值。interror(char*str):錯(cuò)誤提示函數(shù),實(shí)現(xiàn)對(duì)多種非法四則表達(dá)式的判斷,并給出提示,讓用戶更正自己的輸入錯(cuò)誤。voidMenuPrint():主菜單打印函數(shù)。voidClear():清屏函數(shù)。ElementTypeEvaluateExpression(char*exp):這是此程序的核心函數(shù),可以綜合其它子函數(shù),實(shí)現(xiàn)最終的表達(dá)式求解。各程序模塊之間的調(diào)用關(guān)系(子程序編號(hào)見上):主函數(shù)可調(diào)用子程序5,6,7。子程序7可調(diào)用子程序1,2,3,4。4.3.詳細(xì)設(shè)計(jì)此算法的基本思想:首先置操作數(shù)棧OPS為空棧,表達(dá)式起始符“#”為運(yùn)算符的棧底元素;依次讀入表達(dá)式中每個(gè)字符,若是操作數(shù)則進(jìn)棧,若是運(yùn)算符則和OPF棧的棧頂運(yùn)算符比較優(yōu)先權(quán)作相應(yīng)操作,直至整個(gè)表達(dá)式求值完畢(即OPF棧的棧頂元素和當(dāng)前讀入的字符均為“#”)此算法的偽代碼: ElementTypeEvaluateExpression(char*exp){定義兩個(gè)字符變量c和ch,c代表輸入表達(dá)式中的字符,ch代表?xiàng)m斶\(yùn)算符;定義字符指針*p,*q,*temp;temp指向運(yùn)算符后面的一個(gè)字符 doublei=0,a=0,b=0; 將傳入的實(shí)參賦給p,q; 定義一個(gè)運(yùn)算符棧OPF; 定義一個(gè)操作數(shù)棧OPS; 調(diào)用函數(shù)InitStack()初始化棧OPS;調(diào)用函數(shù)CInitCharStack()初始化棧OPF;調(diào)用函數(shù)CPush(OPF,'#')將#壓入運(yùn)算符棧; c=*p;temp=p;p++; if(第一個(gè)字符就為‘-’) { c=*p;temp=p;p++; } while(棧不為空或表達(dá)式?jīng)]有結(jié)束) {//進(jìn)入最外層循環(huán) if(不是運(yùn)算符)//則解析數(shù)字字符串然后進(jìn)操作數(shù)棧 { 整數(shù)部分m=0;小數(shù)部分n=0; while(沒有遇到小數(shù)點(diǎn)并且為數(shù)字字符) {解析整數(shù)部分m} if(遇到小數(shù)點(diǎn)) {解析小數(shù)部分 c=*p; 將p指針移到第一個(gè)出現(xiàn)的字符; 將q指針指向小數(shù)的最后一位; while(p指針不指向’.’) { 將p指向的字符轉(zhuǎn)為小數(shù)n p--; } p=q; p++; } if(運(yùn)算符為‘-’并且運(yùn)算符前一個(gè)為‘(’或者為表達(dá)式的開始) 調(diào)用Push(OPS,-(m+n))將m+n的相反數(shù)入棧; else 調(diào)用Push(OPS,m+n)將m+n入棧;}數(shù)字進(jìn)棧結(jié)束 else//是運(yùn)算符時(shí)則進(jìn)棧OPF {if(運(yùn)算符為‘-’&&運(yùn)算符前一個(gè)為‘(’) {c=*p; temp=p; p++; } else {調(diào)用函數(shù)CGetTop(OPF,ch)得到OPF的棧頂元素;switch(調(diào)用函數(shù)Precede(ch,c)判斷棧頂元素與接收的字符的優(yōu)生級(jí)別) { case棧頂運(yùn)算符優(yōu)先權(quán)低: 調(diào)用函數(shù)CPush(OPF,c)將c入運(yùn)算符棧; 接收下一個(gè)字符; case棧頂運(yùn)算符優(yōu)先權(quán)高: 運(yùn)算符出棧得到ch; 數(shù)字棧連續(xù)出棧兩次得到a,b; 調(diào)用Operate(a,ch,b)并將結(jié)果入棧到數(shù)字棧;break; case優(yōu)生權(quán)相等:脫括號(hào)并接收下一個(gè)字符; 調(diào)用CPop(OPF,ch)脫括號(hào);接收下一個(gè)字符; default:接收下一個(gè)字符; }退出switch循環(huán) }//else1 }//else2 }//退出最外層while循環(huán) 調(diào)用函數(shù)GetTop(OPS,i)得到棧頂元素i; 將兩個(gè)棧消毀;}EvaluateExpression函數(shù)結(jié)束利用該算法對(duì)算術(shù)表達(dá)式3*(7-2)求值操作過程如下:步驟OPF棧OPS棧輸入表達(dá)式主要操作1#3*(7-2)#Push(OPS,’3’2#3*(7-2)#CPush(OPF,’*’)3#*3(7-2)#CPush(OPF,’(’)4#*(37-2)#Push(OPS,’7’5#*(37-2)#CPush(OPF,’-’)6#*(-372)#Push(OPS,’2’7#*(-372)#Operate(‘7’,’-’,’28#*(35)#CPop(OPF)9#*35#Operate(‘3’,’*’,510#15#Return(GetTop(OPS))表一4.4.調(diào)試分析與結(jié)果附錄一:測試數(shù)據(jù)組別表達(dá)式正確值112+(9-8)*7-(-6*5)4923.14*(67.305-65.305)+3.149.4233+{2*[2*(3+4)]}3144.3-{2.5*[9.9/(1.1+2.2)]}-3.2512-(3-6*7)8-4錯(cuò)誤表達(dá)式表二按照附錄中的測試數(shù)據(jù),得出如下測試、分析結(jié)果:當(dāng)我們輸入表格中兩個(gè)正確的四則表達(dá)式時(shí)程序能準(zhǔn)確地求得其值:完全支持浮點(diǎn)數(shù),正負(fù)數(shù)的運(yùn)算;而當(dāng)我們輸入第五組錯(cuò)誤的表達(dá)式時(shí),程序能做出正確判斷,提醒用戶輸入的表達(dá)式錯(cuò)誤。其數(shù)據(jù)測試的情況見截圖:表達(dá)式一運(yùn)算結(jié)果表達(dá)式二運(yùn)行結(jié)果表達(dá)式三運(yùn)行結(jié)果表達(dá)式四運(yùn)行結(jié)果由表二可知以上四組表達(dá)式運(yùn)行結(jié)果皆正確。表達(dá)式五運(yùn)行結(jié)果由表二可知第五組表達(dá)式錯(cuò)誤。

附錄二:部分錯(cuò)誤表達(dá)式組別第一個(gè)字符前一個(gè)運(yùn)算符符當(dāng)前運(yùn)算符后一個(gè)字符1+\-\*\/\.)\]\}2(\[\{+\-\*\/\.3)\]\}.4.(\[\{5()6)(7[]8][9{}10}{11)\]\}0~9120~9(\[\{13+\*\/\)\}\]14+\-\*\/\.+\-\*\/\.15/0表三4.5:使用說明運(yùn)行程序,首先出現(xiàn)主菜單。主菜單包括三個(gè)選項(xiàng):選項(xiàng)a:表達(dá)式求解,選擇該項(xiàng)可進(jìn)行四則表達(dá)式的求解;選項(xiàng)b:清屏;選項(xiàng)c:退出程序,選擇該項(xiàng)將退出程序。5.總結(jié):這次課程設(shè)計(jì)讓我更加了解了學(xué)到的C語言和數(shù)據(jù)結(jié)構(gòu)。課程設(shè)計(jì)不僅要求對(duì)課本知識(shí)有較深刻的了解,同時(shí)要求程序設(shè)計(jì)者有較強(qiáng)的思維和動(dòng)手能力同時(shí)這也使我更加了解編程思想和編程技巧。這次課程設(shè)計(jì)讓我有一個(gè)深刻的體會(huì),那就是細(xì)節(jié)決定成敗,編程最需要的是嚴(yán)謹(jǐn),如何的嚴(yán)謹(jǐn)都不過分,往往檢查了半天發(fā)現(xiàn)錯(cuò)誤發(fā)生在某個(gè)括號(hào),分號(hào),引號(hào),或者數(shù)據(jù)類型上。就像我在寫EvaluateExpression()函數(shù)時(shí),忘了指針的地址符值不用加*,這一點(diǎn)小小的錯(cuò)誤也耽誤了我?guī)资昼?,所以說細(xì)節(jié)很重要。程序設(shè)計(jì)時(shí),也不要怕遇到錯(cuò)誤,在實(shí)際操作過程中犯的一些錯(cuò)誤還會(huì)有意外的收獲,感覺課程設(shè)計(jì)很有意思。在具體操作中這學(xué)期所學(xué)的數(shù)據(jù)結(jié)構(gòu)的理論知識(shí)得到鞏固,達(dá)到課程設(shè)計(jì)的基本目的,也發(fā)現(xiàn)自己的不足之出,在以后的上機(jī)中應(yīng)更加注意。6.附錄三:源代碼//這個(gè)棧是用來存儲(chǔ)數(shù)字字符的#include<stdlib.h>#include<stdio.h>#include<string.h>#defineERROR0#defineOK1#define TRUE1#defineFALSE0typedefcharElemType;typedefintStatus;typedefdoubleElementType;typedefintStatus;#defineSTACK_INIT_SIZE30#defineSTACKINCREAMENT10#defineNUMBER30typedefstructnode{ElementTypedata;structnode*next;}StackNode,*LinkStack;voidInitStack(LinkStack&head){head=(LinkStack)malloc(sizeof(StackNode)); head->next=NULL;}StatusIsEmpty(LinkStackhead){ if(head->next==NULL)returnTRUE; elsereturnERROR;}StatusPush(LinkStack&head,ElementTypeelement){//入棧 LinkStackp; p=(LinkStack)malloc(sizeof(StackNode)); if(p==NULL)returnFALSE; p->data=element; p->next=head->next; head->next=p; returnOK;}StatusPop(LinkStack&head,ElementType&element){//出棧 if(IsEmpty(head))returnFALSE; LinkStacktemp=head->next;element=temp->data; head->next=temp->next; free(temp); returnOK;}StatusGetTop(LinkStackhead,ElementType&element){ if(head->next==NULL) returnERROR;element=head->next->data; returnOK;}StatusDestroyStack(LinkStack&head){ LinkStackq; while(head) { q=head->next; free(head); head=q; } returnTRUE;}//這個(gè)棧是用來存儲(chǔ)符號(hào)字符的typedefstructnode1{ ElemTypedata; structnode1*next;}StackCharNode,*LinkCharStack;voidCInitCharStack(LinkCharStack&head){ head=(LinkCharStack)malloc(sizeof(StackCharNode)); head->next=NULL;}StatusCIsEmpty(LinkCharStackhead){ return(head->next==NULL)?TRUE:FALSE;}StatusCPush(LinkCharStack&head,ElemTypeelement){ LinkCharStacktemp=(LinkCharStack)malloc(sizeof(StackCharNode)); if(!temp)returnERROR; temp->data=element; temp->next=head->next; head->next=temp; returnTRUE;}StatusCPop(LinkCharStack&head,ElemType&element){ if(CIsEmpty(head))returnFALSE; StackCharNode*temp=head->next; element=temp->data; head->next=temp->next; free(temp); returnTRUE;}StatusCGetTop(LinkCharStackhead,ElemType&element){ if(head->next!=NULL) { element=head->next->data; returnTRUE; } element='#'; returnFALSE;}StatusCDestroyStack(LinkCharStack&head){ LinkCharStackq; while(head) { q=head->next; free(head); head=q; } returnTRUE;}//判斷ch是否為運(yùn)算符intComop(charch){ switch(ch) { case'+': case'-': case'*': case'/': case'(': case')': case'[': case']': case'{': case'}': case'#':return1; default:return0; }}//Comop

//比較兩個(gè)運(yùn)算符的優(yōu)先級(jí)charPrecede(charch,charc)//ch是棧頂字符,c是表達(dá)式字符{ switch(ch) { case'+': case'-': if(c=='+'||c=='-'||c==')'||c=='#'||c==')'||c==']'||c=='}')return'>'; if(c=='*'||c=='/'||c=='('||c=='['||c=='{')return'<'; case'*': case'/': if(c=='+'||c=='-'||c=='*'||c=='/'||c==')'||c==']'||c=='}'||c=='#')return'>'; if(c=='('||c=='['||c=='{')return'<'; case'(': if(c=='+'||c=='-'||c=='*'||c=='/')return'<'; if(c==')')return'='; case')': if(c=='+'||c=='-'||c=='*'||c=='/'||c==']')return'>'; if(c=='#')return'>'; case'[': if(c=='+'||c=='-'||c=='*'||c=='/'||c=='(')return'<'; if(c==']')return'='; case']': if(c=='+'||c=='-'||c=='*'||c=='/'||c=='}')return'>'; if(c=='#')return'>';case'{': if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c=='[')return'<'; if(c=='}')return'=';case'}': if(c=='+'||c=='-'||c=='*'||c=='/')return'>'; if(c=='#')return'>'; case'#': if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c=='['||c=='{')return'<'; if(c=='#')return'='; default: return'$'; }}//precede//運(yùn)算函數(shù)ElementTypeOperate(ElementTypea,charch,ElementTypeb){ switch(ch) { case'+':returna+b; case'-':returna-b; case'*':returna*b; case'/': if(b==0) { return-32767; } returna/b; default: return-32767; }}//Operate

//錯(cuò)誤提示函數(shù)interror(char*str){inti=0;while(str[i]!='#')//主要通過判斷所有輸入的字符數(shù)組str[30]{if(((str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/'||str[i]=='.')&&//其它函數(shù)只要一聲明err=1也就說明輸入有誤(str[i+1]==')'||str[i+1]==']'||str[i+1]=='}'))||((str[i]=='+'||str[i]=='*'||str[i]=='/'||str[i]=='.')&&(str[i-1]=='('||str[i-1]=='['||str[i-1]=='{'))||( (str[i]==')'||str[i]==']'||str[i]=='}')&&str[i+1]=='.' )||( str[i]=='.'&&(str[i+1]=='('||str[i+1]=='['||str[i+1]=='{') )||(str[i]==')'&&str[i+1]=='(')||(str[i]=='('&&str[i+1]==')') ||(str[i]=='['&&str[i+1]==']')||(str[i]==']'&&str[i+1]=='[')||(str[i]=='{'&&str[i+1]=='}')||(str[i]=='}'&&str[i+1]=='{') ||( (str[i]==')'||str[i]==']'||str[i]=='}')&&str[i+1]>='0'&&str[i+1]<='9' ) ||( (str[i]>='0'&&str[i]<='9'&&(str[i+1]=='('||str[i+1]=='['||str[i+1]=='{') )||(str[0]=='+'||str[0]=='*'||str[0]=='/'||str[0]==')'||str[0]==']'||str[0]=='}')||((str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/'||str[i]=='.')&&(str[i+1]=='+'||str[i+1]=='-'||str[i+1]=='*'||str[i+1]=='/'||str[i+1]=='.') )||(int(str[i])>57&&(int(str[i])!=91&&int(str[i])!=93&&int(str[i])!=123&&int(str[i])!=125))||(str[i]=='/'&&str[i+1]=='0')||(int(str[i])>31&&int(str[i])<38)))return1;elseif(str[i]=='#')return0;i++;}//whilereturn0;}//錯(cuò)誤提示函數(shù)//表達(dá)式計(jì)算函數(shù)ElementTypeEvaluateExpression(char*exp){ charc,ch;//c代表輸入表達(dá)式中的字符,ch代表?xiàng)m斶\(yùn)算符 char*p,*q,*temp;//temp指向運(yùn)算符后面的一個(gè)字符 doublei=0,a=0,b=0; p=q=exp; LinkCharStackOPF;//運(yùn)算符棧 LinkStackOPS;//操作數(shù)棧 CInitCharStack(OPF);CPush(OPF,'#'); InitStack(OPS); c=*p;temp=p;p++; if(c=='-') { c=*p;temp=p;p++; } while(c!='#'||!CIsEmpty(OPF))//棧不為空或表達(dá)式?jīng)]有結(jié)束 {//*********************進(jìn)入最外層循環(huán)********************* if(!Comop(c))//不是運(yùn)算符則解析數(shù)字字符串然后進(jìn)操作數(shù)棧 { doublem=0,n=0; while(c!='.'&&c>='0'&&c<='9') {//解析整數(shù)部分 m=m*10+(c-48); c=*p; p++; } if(c=='.') {//解析小數(shù)部分 c=*p; while(c>='0'&&c<='9') {p++;c=*p;} q=p; p--; while(*p!='.') { n=n/10+(*p-48)/10.0; p--; } p=q; p++; } if(*(temp-2)=='('&&*(temp-1)=='-'||temp-1==exp) Push(OPS,-(m+n)); else Push(OPS,m+n); }//*****數(shù)字進(jìn)棧結(jié)束****** else//是運(yùn)算符時(shí)則進(jìn)棧OPF { if(c=='-'&&*(p-2)=='(') { c=*p; temp=p; p++; } else//else1 { CGetTop(OPF,ch); switch(Precede(ch,c)) { case'<'://棧頂運(yùn)算符優(yōu)先權(quán)低 CPush(OPF,c);c=*p;temp=p;p++;break; case'>'://棧頂運(yùn)算符優(yōu)先權(quán)高 CPop(OPF,ch); Pop(OPS,b);Pop(OPS,a); Push(OPS,Operate

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論