已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
中綴表達式轉(zhuǎn)后綴表達式中綴表達式轉(zhuǎn)后綴表達式的規(guī)則。1.遇到操作數(shù):直接輸入到后綴表達式棧2.遇到運算符,直接入操作符棧3.遇到左括號:直接將其入棧4.遇到右括號:執(zhí)行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。5.遇到其他運算符:加減乘除:彈出所有優(yōu)先級大于或者等于該運算符的棧頂元素,然后將該運算符入棧6.最終將操作符棧中的元素依次出棧,輸出到后綴表達式棧。以下是自己寫的代碼。親測沒有問題。(模擬一個計算器,可以帶括號,中間可以空格,只支持整數(shù)輸入,但是輸出結(jié)果精確到小數(shù)后6位)#include stdio.h#define MAX_LEN 100typedef struct calunsigned char isOper;/是否是操作數(shù) 1,操作符 0.操作數(shù)double Num;/值?;蛘呤遣僮鞣腁SCII值STRUCT_CAL;#define IS_NUM 0x00#define IS_OPER0x01STRUCT_CAL stackCalMAX_LEN;STRUCT_CAL stackCalBackMAX_LEN;unsigned char topCal;char stackOperMAX_LEN;unsigned char topOper;/* 堆棧初始化*/void stackInit(void)int i;for(i=0;i=MAX_LEN)return;stackCaltopCal.Num = num;stackCaltopCal.isOper= isOper;topCal+;/* 操作符出棧*/char stackOperPop(void)if(topOper = 0)return 0;return stackOper-topOper;/* 操作符入棧*/void stackOperPush(char oper)if(topOper =MAX_LEN)return;stackOpertopOper+ = oper;/*比較兩個 sour sour1 的優(yōu)先級*1 sour = sour1 直接入操作符棧*0 sour sour1 直接入計算表達式棧*/unsigned char comparPrior(char sour, char sour1)if(sour =0 |sour1 = 0) return 1;switch(sour)case +:case -:if(sour1 = * |sour1 = /|sour1 = + |sour1 = - )return 0;elsereturn 1;break;case *:case /:if(sour1 = * |sour1 = /|sour1 = + |sour1 = -|sour1 = ()return 1;elsereturn 0;break;default:return 1;break;/* 將輸入的字符串轉(zhuǎn)換為棧*/void StrToCal(char *pStr)int tmpNum = 0;char tmpOper;char islastNum = 0;/判斷上一個字符是什么。如果是符號,現(xiàn)在碰到-,那么數(shù)字就是負數(shù)char isNumNegative = 0;while(*pStr != 0)switch(*pStr)case +:while(comparPrior(+,stackOpertopOper-1) = 0)stackCalPush(stackOperPop(), IS_OPER);if(topOper1)break;stackOperPush(+);pStr+;islastNum = 0;break;case -:if(islastNum = 0) /如果上一個字符是 操作符,那么接下來的數(shù)字是負數(shù)isNumNegative = 1;/ 1代表 是負數(shù)pStr+;break;while(comparPrior(-,stackOpertopOper-1) = 0)stackCalPush(stackOperPop(), IS_OPER);if(topOper1)break;stackOperPush(-);pStr+;islastNum = 0;break;case *:while(comparPrior(*,stackOpertopOper-1) = 0)stackCalPush(stackOperPop(), IS_OPER);if(topOper1)break;stackOperPush(*);pStr+;islastNum = 0;break;case /:while(comparPrior(/,stackOpertopOper-1) = 0)stackCalPush(stackOperPop(), IS_OPER);if(topOper=0 )& (*pStr =9)tmpNum = tmpNum *10 +*(pStr+) - 0;if(isNumNegative)isNumNegative = 0;tmpNum = -tmpNum;stackCalPush(tmpNum, IS_NUM);tmpNum = 0;islastNum = 1;break;case :pStr+;break;default:pStr+;break;while(topOper) /如果最后操作符棧還有數(shù)據(jù),直接入計算棧stackCalPush(stackOperPop(), IS_OPER);/* 顯示轉(zhuǎn)換后的后綴表達式,用于調(diào)試,看轉(zhuǎn)換是否正確*/void dispCalc(void)int i = 0;printf(n);for(i = 0;itopCal;i+)if(stackCali.isOper = IS_NUM)printf(%d,(int)stackCali.Num);else if(stackCali.isOper = IS_OPER)printf(%c,(char)stackCali.Num);/* 計算后綴表達式的計算結(jié)果*/void suffixExpression(void)int i = 0;int tmpTop;double num1,num2;for(i = 0;iNum;num2 = stackCalPop()-Num;switch(char)stackCalBacki.Num)case +:stackCalPush(num2+num1, IS_NUM);break;case -:stackCalPush(num2-num1, IS_NUM);break;case *:stackCalPush(num2*num1, IS_NUM);break;case /:stackCalPush(int)num2/num1, IS_NUM);break;default :break;elsestackCalPush(stackCalBacki.Num, IS_NUM);i+;if(i=tmpTop) break;printf(nThe result is : %fn, stackCal0.Num);stackInit();int main
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《柴油機燃料供給》課件
- 三年級數(shù)學下冊總復習課件
- 乙酸的說課課件
- 《畜禽免疫學》課件
- 中醫(yī)診斷學課件-中醫(yī)診斷學緒論
- 2024年高考歷史總復習考前沖刺攻略 第4講 高考應試能力的培養(yǎng)
- 單位管理制度集粹匯編【職工管理】十篇
- 單位管理制度匯編大合集【職工管理】
- 單位管理制度合并匯編職員管理十篇
- 單位管理制度范文大合集人事管理篇十篇
- 東方電影學習通超星期末考試答案章節(jié)答案2024年
- 人教版四年級上冊數(shù)學數(shù)學復習資料
- SB/T 10439-2007醬腌菜
- 化糞池計算表格Excel(自動版)
- 2022年人美版美術(shù)六年級上冊教案全一冊
- 超外差調(diào)幅收音機課設(shè)報告——內(nèi)蒙古工業(yè)大學
- 3.2熔化和凝固-人教版八年級上冊課件(21張PPT)pptx
- 2017衢州新城吾悅廣場開業(yè)安保方案
- 名師工作室考核評價表.doc
- 公司宣傳品管理辦法1
- 人教版(PEP)小學英語六年級上冊各單元知識點歸納(三年級起點)
評論
0/150
提交評論