表達(dá)式求值C語言實(shí)驗(yàn)報(bào)告.docx_第1頁
表達(dá)式求值C語言實(shí)驗(yàn)報(bào)告.docx_第2頁
表達(dá)式求值C語言實(shí)驗(yàn)報(bào)告.docx_第3頁
表達(dá)式求值C語言實(shí)驗(yàn)報(bào)告.docx_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

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

文檔簡介

表達(dá)式求值實(shí)驗(yàn)報(bào)告李一鵬 PB12001076 數(shù)學(xué)系1. 實(shí)驗(yàn)題目:表達(dá)式求值2. 實(shí)驗(yàn)?zāi)康模菏煜Ec隊(duì)列3. 實(shí)驗(yàn)內(nèi)容:話說令狐沖只告訴東方不?。骸皷|方姑娘你會(huì)永遠(yuǎn)活在我的心中。”東方姑娘聽了那是萬念俱灰啊,精通算術(shù)的東方姑娘一時(shí)想不開,拋給令狐沖一個(gè)表達(dá)式,說:“這個(gè)表達(dá)式你要是不能在一秒內(nèi)給我把值求出來我就要墜入懸崖!”令狐沖一看事態(tài)不對(duì),馬上發(fā)動(dòng)辟邪劍法之求助觀眾!觀眾們,你們又不是不知道令狐沖的那個(gè)笨,東方姑娘的生命可以說是掌握在你們的手中了,喜歡她就99她吧!4. 算法分析:本算法采用了鏈表來儲(chǔ)存表達(dá)式,加入了指數(shù)運(yùn)算和函數(shù)還有常數(shù)。由于指數(shù)運(yùn)算是右結(jié)合,本算法先全部儲(chǔ)存表達(dá)式再優(yōu)先級(jí)一個(gè)個(gè)運(yùn)算。對(duì)于函數(shù)和括號(hào),本算法用了遞歸,遇到右括號(hào)即返回,把表達(dá)式的直接求解operate()轉(zhuǎn)化成了無括號(hào)無函數(shù)表達(dá)式的求解calculate()。5. 程序清單:#include#include#include#include#define new1 (no*)malloc(sizeof(no)#define deletenode p2-prec=p1-prec;free(p1);p1=p2-prec;p1-next=p2#define error1 p1=head;p2=head- next;if(p2)while(p2!=r)free(p1);p1=p2;p2=p2-next;free(p1);p2-ope=1;return p2;elsep1-ope=1;return p1;#define fun(a,b,c) if(!numbegin)if(getchar()=a)if(getchar()=b)if(getchar()=()p=operate();if(p-ope)r-next=p;r=p;error1;num2=c(p-num);free(p);numbegin=1;numend=1;elseerror1;elseerror1;elseerror1;#define datadeal p=new1;p-num=(num1+num2)*minus;isfloat=0;num1=0;num2=0;minus=1;numbegin=0;flength=1;numend=0;r-next=p;p-prec=r;r=p;p-ope=ctypedef struct numopedouble num;char ope;struct numope *prec,*next;no;no *calculate(no *head,no *rear)no *p1,*p2;p2=rear;p1=rear-prec;while(p1!=head)if(p1-ope=)p2-num=pow(p1-num,p2-num);deletenode;elsep2=p1;p1=p1-prec;while(p1!=rear)p2=p1-next;if(p1-ope=*)p2-num=p1-num*p2-num;deletenode;if(p1-ope=/)p2-num=p1-num/p2-num;deletenode;p1=p2;p1=head;p2=head-next;while(p1!=rear)p2=p1-next;if(p1-ope=+)p2-num=p1-num+p2-num;deletenode;if(p1-ope=-)p2-num=p1-num-p2-num;deletenode;p1=p2;free(head);return rear;no *operate()char c,flength,numbegin,numend,isfloat;double num2;int num1,minus;no *head,*p,*r,*p1,*p2;num1=0;num2=0;minus=1;numbegin=0;numend=0;isfloat=0;flength=1;r=head=new1;head-ope=0;head-next=0;c=getchar();while(c!=)&c!=#)if(c=48&cope)r-next=p;r=p;error1; num2=p-num;free(p);numbegin=1;numend=1; break;case s:fun(i,n,sin) break;case c:fun(o,s,cos) break;case t:fun(a,n,tan) break;case a:fun(b,s,abs) break;case e:fun(x,p,exp) break;case l:fun(o,g,log) break;case f:fun(l,o,floor) break;case p:if(numbegin)error1;else if(getchar()=i)num2=3.141592653589793062;numbegin=1;numend=1;elseerror1;c=getchar();datadeal;r-ope=0;p=calculate(head,r);return p;main()no *head,*p,*r;char c;while(1)printf(=instruction=);printf(Input floats and + - * / ( ) to claculate.n);printf(These are functions you can use with a bracket.n);printf(Inputtsintcosttantabstexptlogtflotn);printf(Totsintcosttantabstexptlntfloortn);printf(Input pi to 3.14.n);printf(Make sure your expression is end with a #n);printf(=expression=);head=operate();if(head-ope)printf(error expressionn);else printf(%.12lfn,head-num);printf(Press C or c to continue,else to quitn);c=getchar();while(c!=10)c=getchar();c=getchar();if(c=C|c=c)system(CLS);else exit(1);6. 運(yùn)行結(jié)果:7. 調(diào)

溫馨提示

  • 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)論