




已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式的規(guī)則。1.遇到操作數(shù):直接輸入到后綴表達(dá)式棧2.遇到運(yùn)算符,直接入操作符棧3.遇到左括號(hào):直接將其入棧4.遇到右括號(hào):執(zhí)行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號(hào),左括號(hào)不輸出。5.遇到其他運(yùn)算符:加減乘除:彈出所有優(yōu)先級(jí)大于或者等于該運(yùn)算符的棧頂元素,然后將該運(yùn)算符入棧6.最終將操作符棧中的元素依次出棧,輸出到后綴表達(dá)式棧。以下是自己寫的代碼。親測(cè)沒有問題。(模擬一個(gè)計(jì)算器,可以帶括號(hào),中間可以空格,只支持整數(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;/*比較兩個(gè) sour sour1 的優(yōu)先級(jí)*1 sour = sour1 直接入操作符棧*0 sour sour1 直接入計(jì)算表達(dá)式棧*/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;/判斷上一個(gè)字符是什么。如果是符號(hào),現(xiàn)在碰到-,那么數(shù)字就是負(fù)數(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) /如果上一個(gè)字符是 操作符,那么接下來的數(shù)字是負(fù)數(shù)isNumNegative = 1;/ 1代表 是負(fù)數(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ù),直接入計(jì)算棧stackCalPush(stackOperPop(), IS_OPER);/* 顯示轉(zhuǎn)換后的后綴表達(dá)式,用于調(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);/* 計(jì)算后綴表達(dá)式的計(jì)算結(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等.壓縮文件請(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2019-2025年一級(jí)建造師之一建市政公用工程實(shí)務(wù)提升訓(xùn)練試卷A卷附答案
- 2025年初級(jí)經(jīng)濟(jì)師之初級(jí)建筑與房地產(chǎn)經(jīng)濟(jì)模考預(yù)測(cè)題庫(奪冠系列)
- 2025年度二月份建筑裝飾工程AI設(shè)計(jì)施工協(xié)同協(xié)議
- 2025新版城市建設(shè)用地使用權(quán)轉(zhuǎn)讓合同
- 2025年度購銷合同模板
- 農(nóng)資銷售合同樣本
- 機(jī)場(chǎng)急救飛行通訊稿
- 2025年個(gè)人抵押借款合同模板
- 國際視野社團(tuán)培養(yǎng)全球思維計(jì)劃
- 2025個(gè)人借款抵押合同范本
- 消防安全知識(shí)培訓(xùn)課件文庫
- 2025年合肥興泰金融控股(集團(tuán))有限公司招聘23人筆試參考題庫附帶答案詳解
- 邊坡支護(hù)施工方案
- 2025年山東省淄博市張店區(qū)中考一模道德與法治試題(五四學(xué)制)(含答案)
- 湖北省部分高中聯(lián)考協(xié)作體2023-2024學(xué)年高二下學(xué)期期中考試政治試卷(原卷版)
- 定期考核醫(yī)師述職報(bào)告范文5篇
- 干混砂漿購銷規(guī)定合同6篇
- 2025-2030中國金屬化陶瓷基板行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 2025年中國民營精神病醫(yī)院行業(yè)市場(chǎng)前景預(yù)測(cè)及投資價(jià)值評(píng)估分析報(bào)告
- Unit4StageandScreen詞匯課件12023學(xué)年高中英語
- 六年級(jí)總復(fù)習(xí)常見的量市公開課一等獎(jiǎng)省賽課獲獎(jiǎng)?wù)n件
評(píng)論
0/150
提交評(píng)論