- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
表达式求值C语言实验报告
表达式求值实验报告
李一鹏 P 数学系
实验题目:表达式求值
实验目的:熟悉栈与队列
实验内容:
话说令狐冲只告诉东方不败:“东方姑娘你会永远活在我的心中。”东方姑娘听了那是万念俱灰啊,精通算术的东方姑娘一时想不开,抛给令狐冲一个表达式,说:“这个表达式你要是不能在一秒内给我把值求出来我就要坠入悬崖!”令狐冲一看事态不对,马上发动辟邪剑法之求助观众!
观众们,你们又不是不知道令狐冲的那个笨,东方姑娘的生命可以说是掌握在你们的手中了,喜欢她就99她吧!
算法分析:
本算法采用了链表来储存表达式,加入了指数运算和函数还有常数π。由于指数运算是右结合,本算法先全部储存表达式再优先级一个个运算。对于函数和括号,本算法用了递归,遇到右括号即返回,把表达式的直接求解operate()转化成了无括号无函数表达式的求解calculate()。
程序清单:
#includestdio.h
#includestdlib.h
#includeprocess.h
#includemath.h
#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;}else{p1-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;}else{error1;}else{error1;}else{error1;}
#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=c
typedef struct numope{
double 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;
}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=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=48c=57){
if(numend){error1;}
numbegin=1;
if(i
您可能关注的文档
最近下载
- 2024-2025学年北京顺义区九年级初三(上)期末数学试卷(含答案).pdf
- T∕CSEM 0024-2024 智慧消防 火灾防控系统建设要求.pdf
- 苏轼《蝶恋花 春景》古诗词PPT.pptx
- 新版人教版高中英语选修三、选修四词汇表(带音标).docx
- 《急诊预检分诊》课件.ppt VIP
- 房屋抵还欠款合同协议书范本模板 .pdf VIP
- 高中语文 2023-2024学年北京市石景山区高一(上)期末语文试卷完整版720979162.pdf VIP
- 全国职业大赛(中职)ZZ036新能源汽车维修赛项赛题库共计10套.pdf
- 【新高考读后续写】系列研讨Continuation Writing 课件(5个).pptx
- 浪潮英信服务器 NF5280M5 用户手册 V1.0.pdf VIP
文档评论(0)