表达式求值C语言实验报告.docx

表达式求值C语言实验报告.docx

ID:50131634

大小:47.34 KB

页数:4页

时间:2020-03-05

表达式求值C语言实验报告.docx_第1页
表达式求值C语言实验报告.docx_第2页
表达式求值C语言实验报告.docx_第3页
表达式求值C语言实验报告.docx_第4页
资源描述:

《表达式求值C语言实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、表达式求值实验报告李一鹏PB12001076数学系1.实验题目:表达式求值2.实验目的:熟悉栈与队列3.实验内容:话说令狐冲只告诉东方不败:“东方姑娘你会永远活在我的心中。”东方姑娘听了那是万念俱灰啊,精通算术的东方姑娘一时想不开,抛给令狐冲一个表达式,说:“这个表达式你要是不能在一秒内给我把值求出来我就要坠入悬崖!”令狐冲一看事态不对,马上发动辟邪剑法之求助观众!观众们,你们又不是不知道令狐冲的那个笨,东方姑娘的生命可以说是掌握在你们的手中了,喜欢她就99她吧!4.算法分析:本算法采用了链表来储存表达式,加入了指数运算和函数还有常数π。由于指数运算是右结合,本

2、算法先全部储存表达式再优先级一个个运算。对于函数和括号,本算法用了递归,遇到右括号即返回,把表达式的直接求解operate()转化成了无括号无函数表达式的求解calculate()。5.程序清单:#include#include#include#include#definenew1(no*)malloc(sizeof(no))#definedeletenodep2->prec=p1->prec;free(p1);p1=p2->prec;p1->next=p2#defineerror1p1

3、=head;p2=head->next;if(p2){while(p2!=r){free(p1);p1=p2;p2=p2->next;}free(p1);p2->ope=1;returnp2;}else{p1->ope=1;returnp1;}#definefun(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;nu

4、mend=1;}else{error1;}else{error1;}else{error1;}#definedatadealp=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=ctypedefstructnumope{doublenum;charope;structnumope*prec,*next;}no;no*calculate(no*head,no*rear){

5、no*p1,*p2;p2=rear;p1=rear->prec;while(p1!=head)if(p1->ope=='^'){p2->num=pow(p1->num,p2->num);deletenode;}else{p2=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=hea

6、d->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);returnrear;}no*operate(){charc,flength,numbegin,numend,isfloat;doublenum2;intnum1,minus;no*head,*p,*r,*p1,*p2;num1=0;num2=0;

7、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&&c<=57){if(numend){error1;}numbegin=1;if(isfloat)num2+=(c-48)*pow(0.1,flength++);elsenum1=num1*10+c-48;c=getchar();continue;}switch(c){case'.':isfloat=1;bre

8、ak;case'-':i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。