中綴表達(dá)式求值實(shí)驗(yàn)報(bào)告_第1頁(yè)
中綴表達(dá)式求值實(shí)驗(yàn)報(bào)告_第2頁(yè)
中綴表達(dá)式求值實(shí)驗(yàn)報(bào)告_第3頁(yè)
中綴表達(dá)式求值實(shí)驗(yàn)報(bào)告_第4頁(yè)
中綴表達(dá)式求值實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專(zhuān)心-專(zhuān)注-專(zhuān)業(yè)中綴表達(dá)式求值實(shí)驗(yàn)報(bào)告一、需求分析(要實(shí)現(xiàn)的功能描述)1問(wèn)題描述:在計(jì)算機(jī)中,算術(shù)表達(dá)式由常量、變量、運(yùn)算符和括號(hào)組成。由于不同的運(yùn)算符具有不同的優(yōu)先級(jí),又要考慮括號(hào),因此,算術(shù)表達(dá)式的求值不可能?chē)?yán)格地從左到右進(jìn)行。因而在程序設(shè)計(jì)時(shí),借助棧實(shí)現(xiàn)。2實(shí)現(xiàn)功能:算法輸入:一個(gè)算術(shù)表達(dá)式,由常量、變量、運(yùn)算符和括號(hào)組成(以字符串形式輸入)。為簡(jiǎn)化,規(guī)定操作數(shù)只能為正整數(shù),操作符為“+、-、*、/”。算法運(yùn)行:將輸入的中綴表達(dá)式改為后綴表達(dá)式,并進(jìn)行運(yùn)算。算法輸出:輸出后綴表達(dá)

2、式和表達(dá)式運(yùn)算結(jié)果。3測(cè)試數(shù)據(jù):(1)、1+3*4-(5/5); 一位數(shù)運(yùn)算(2)、45-5*(1+2)/5; 多位數(shù)運(yùn)算二、概要設(shè)計(jì)整個(gè)程序包含功能模塊及模塊間的調(diào)用關(guān)系(1)、struct node 創(chuàng)建結(jié)構(gòu)體,被主函數(shù)調(diào)用(2)、struct node *Initialization() 創(chuàng)建棧鏈,被主函數(shù)調(diào)用(3)、struct node *assort(struct node *s) 將中綴表達(dá)式轉(zhuǎn)換為后綴表達(dá)式并存在s2中被主函數(shù)調(diào)用(4)、struct node *calcolate(struct node *s) 求出表達(dá)式的值,被主函數(shù)調(diào)用(5)、void main() 主函

3、數(shù),調(diào)用所有函數(shù)三、詳細(xì)設(shè)計(jì)抽象數(shù)據(jù)類(lèi)型中定義的各種操作算法實(shí)現(xiàn)(用N-S圖描述)開(kāi)始輸入中綴表達(dá)式將中綴表達(dá)式轉(zhuǎn)換成后綴表達(dá)式并存入s2中輸出后綴表達(dá)式計(jì)算結(jié)果輸出結(jié)果結(jié)束四、調(diào)試分析1程序在調(diào)式過(guò)程中出現(xiàn)的問(wèn)題及解決方法 一開(kāi)始選用直接運(yùn)算方式運(yùn)用兩個(gè)棧來(lái)存放數(shù)字和操作符,后來(lái)寫(xiě)著確實(shí)不行然后直接轉(zhuǎn)用轉(zhuǎn)為后綴表達(dá)式再進(jìn)行計(jì)算。 在寫(xiě)將多位數(shù)(比如123*12)存放字符串中時(shí),一開(kāi)始我想著直接轉(zhuǎn)換成數(shù)字存入數(shù)組中,但一直不成功,只能將第一個(gè)多位數(shù)轉(zhuǎn)換成功;后來(lái)在和同學(xué)之間交流并且百度搜索后改為直接存入字符串中,再存入字符串過(guò)程中,我發(fā)現(xiàn)幾個(gè)數(shù)字之間可能沒(méi)法區(qū)分是前一個(gè)數(shù)字的還是后一個(gè)數(shù)字的,

4、于是我在掃描字符串過(guò)程中在掃描到操作字符時(shí)將存入數(shù)字的那個(gè)字符串s2空出一位,用以區(qū)分前后兩個(gè)數(shù)字,如12+45*,如果直接存入字符串中會(huì)是 s2:1245*+;但加空格后為s2:12(空格)45*+;這樣后面運(yùn)算時(shí)就好區(qū)分兩多位數(shù)字。 2心得體會(huì) 在寫(xiě)程序之前要選擇適合自己的算法即自己熟悉的能編出的算法,這樣后續(xù)的編程會(huì)簡(jiǎn)便多了。 對(duì)于一個(gè)要實(shí)現(xiàn)的功能,會(huì)有很多不同的算法,當(dāng)你一個(gè)算法用不了時(shí),可以換一個(gè)算法編程,目的是死的,人是活的,算法是活的,程序也是活的!五、用戶(hù)手冊(cè)該軟件的操作方法簡(jiǎn)介輸入一個(gè)算術(shù)表達(dá)式,由常量、變量、運(yùn)算符和括號(hào)組成(以字符串形式輸入)。為簡(jiǎn)化,規(guī)定操作數(shù)只能為正整

5、數(shù),操作符為“+、-、*、/”,按回車(chē)結(jié)束輸入。程序運(yùn)行輸出輸出后綴表達(dá)式和表達(dá)式運(yùn)算結(jié)果。六、測(cè)試結(jié)果根據(jù)已提供的測(cè)試數(shù)據(jù)得到什么樣的結(jié)果(可以截屏)(1)、1+3*4-(5/5);(2)、45-5*(1+2)/5;七、程序清單#include#include#include#include#define MAX 60#define RIGHT 1#define WRONG 0#define DEMAX 15#define NULL 0char s1MAX;char s2MAX;int j=0;struct node /定義結(jié)構(gòu)體。 char data; int num; struct no

6、de *next;struct node *Initialization()/初始化棧鏈,鏈棧不帶頭結(jié)點(diǎn) struct node *top; top=(struct node *)malloc(sizeof(struct node); top-data=; top-num=0; top-next=NULL; return top;struct node *assort(struct node *s)/輸入字符串 struct node *p,*top; int i; top=s; int m; char a; m=strlen(s1); for(i=0; i=m; i+) a=s1i; if(

7、0=s1i&s1idata=a; p-next=top; top=p; break; case *: case /: s2j= ; j+; if(top-data=*)|(top-data=/) s2j=top-data; j+; /比其高,現(xiàn)將棧頂運(yùn)算符出棧,再進(jìn)棧。 top-data=a; break; else p=(struct node *)malloc(sizeof(struct node);/否,直接進(jìn)棧 p-data=a; p-next=top; top=p; break; case +: case -: s2j= ; j+; if(top-data=+|top-data=-|

8、top-data=*|top-data=/) s2j=top-data; j+; top-data=a; break; else p=(struct node *)malloc(sizeof(struct node); p-data=a; p-next=top; top=p; break; case ): s2j= ; j+; if(top-data=;) printf(input error); break; while(top-data!=() s2j=top-data; j+; p=top; top=top-next; free(p); p=top; top=top-next; free

9、(p); break; while(top-data!=;) s2j=top-data; j+; p=top; top=top-next; free(p); s2j=; printf(后綴表達(dá)式為:); for(i=0; ij; i+) if(s2i!= ) printf(%c ,s2i); printf(n ); return top;struct node *calcolate(struct node *s)/計(jì)算表達(dá)式的值 struct node *top,*p; char *q; int x,y,a; int i,n; top=s;/指向棧頂?shù)闹羔?for(i=0; i=0&s2i=0

10、&s2nnum=a; p-next=top; top=p; i=n-1; else if(s2i=;) /遇;號(hào)結(jié)束標(biāo)志,輸出棧中的最后計(jì)算結(jié)果 printf(計(jì)算結(jié)果為:%dn,top-num); else if(s2i= ) else y=top-num; p=top; top=top-next; free(p); x=top-num; p=top; top=top-next; free(p); switch(s2i) case +: a=x+y; p=(struct node *)malloc(sizeof(struct node); p-num=a; p-next=top; top=p; break; case -: a=x-y; p=(struct node *)malloc(sizeof(struct node ); p-num=a; p-next=top; top=p; break; case *: a=x*y; p=(struct node *)malloc(sizeof(struct node ); p-num=a; p-next=top; top=p; break; case /: a=(float)x/y; p=(struct node *)malloc(sizeof(struct node ); p-num=a; p-ne

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論