中綴表達式求值實驗報告_第1頁
中綴表達式求值實驗報告_第2頁
中綴表達式求值實驗報告_第3頁
中綴表達式求值實驗報告_第4頁
中綴表達式求值實驗報告_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

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

2、式和表達式運算結(jié)果。3測試數(shù)據(jù):(1)、1+3*4-(5/5); 一位數(shù)運算(2)、45-5*(1+2)/5; 多位數(shù)運算二、概要設計整個程序包含功能模塊及模塊間的調(diào)用關系(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) 將中綴表達式轉(zhuǎn)換為后綴表達式并存在s2中被主函數(shù)調(diào)用(4)、struct node *calcolate(struct node *s) 求出表達式的值,被主函數(shù)調(diào)用(5)、void main() 主函

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

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

5、數(shù),操作符為“+、-、*、/”,按回車結(jié)束輸入。程序運行輸出輸出后綴表達式和表達式運算結(jié)果。六、測試結(jié)果根據(jù)已提供的測試數(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é)點 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)將棧頂運算符出棧,再進棧。 top-data=a; break; else p=(struct node *)malloc(sizeof(struct node);/否,直接進棧 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(后綴表達式為:); for(i=0; ij; i+) if(s2i!= ) printf(%c ,s2i); printf(n ); return top;struct node *calcolate(struct node *s)/計算表達式的值 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=;) /遇;號結(jié)束標志,輸出棧中的最后計算結(jié)果 printf(計算結(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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

提交評論