- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构程序设计作业——《表达式求值》
数据结构实验报告
题 目 表达式求值
学生姓名 王某某
专业班级 测控120X班
学 号 U2012XXXXX
1 问题描述
输入一数学表达式,计算其值。表达式中数据位浮点数,包含加、减、乘、除、乘幂和取模运算,且有嵌套括号。规定加法运算符为‘+’,减法为‘-’,乘法为‘*’,除法‘\’,乘幂为‘^’,取模为‘%’。规定输入中运算符与数字之间有一空格,浮点正数不加符号,负数在前面加‘-’。表达式最后要加‘=’。
2??算法设计?
1. Precede(char c1,char c2) 判断运算符优先权,返回优先权高的。
算符间的优先关系如下:
+ - * / ( ) # + - * / ( = ) # = 表 1
算法代码如下:
char Precede(char c1,char c2)
{
static char array[49]={
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , , ,
, , , , , =, !,
, , , , !, , ,
, , , , , !, =}; //用一维数组存储49种情况
switch(c1)
{
/* i为下面array的横标 */
case + : i=0;break;
case - : i=1;break;
case * : i=2;break;
case / : i=3;break;
case ( : i=4;break;
case ) : i=5;break;
case # : i=6;break;
}
switch(c2)
{
/* j为下面array的纵标 */
case + : j=0;break;
case - : j=1;break;
case * : j=2;break;
case / : j=3;break;
case ( : j=4;break;
case ) : j=5;break;
case # : j=6;break;
}
return (array[7*i+j]); /* 返回运算符array[7*i+j]为对应的c1,c2优先关系*/
}
2. int EvalExpr()主要操作函数。算法概要流程图:
利用该算法对算术表达式3*(7-2)求值操作过程如下:
步骤 OPTR栈 OPND栈 输入字符 主要操作 1 # 3*(7-2)# Push(OPND,’3’) 2 # 3 *(7-2)# Push(OPTR,’*’) 3 #* 3 (7-2)# Push(OPNR,’(’) 4 #*( 3 7-2)# Push(OPND,’7’) 5 #*( 3 7 -2)# Push(OPNR,’-’) 6 #*(- 3 7 2)# Push(OPND,’2’) 7 #*(- 3 7 2 )# Operate(‘7’,’-’,’2’) 8 #*( 3 5 )# Pop(OPTR) 9 #* 3 5 # Operate(‘3’,’*’,5’) 10 # 15 # Return(GetTop2(OPND)) 表2
算法代码如下:
int EvalExpr()//主要操作函数
{ c = *ptr++;
while(c!=#||GetTop(OPTR)!=#)
{
if(!In(c)) //不是运算符即进栈
{ if(!In(*(ptr-1))) ptr=ptr-1;
m=atoi(ptr);//取字符串前面的数字段
n=num(m);
Push2(OPND,m);
ptr=ptr+n;
c=*ptr++;
}
else
switch(Precede(GetTop(OPTR),c))
{
case : //栈顶元素优先权底
Push(OPTR,c);
c = *ptr++;
break;
case =: //脱括号并接收下一字符
x=Pop(OPTR);
c = *ptr++;
break;
case ://退栈并将运算结果入栈
theta=Pop(OPTR);
b=Pop2(OPND); a=Pop2(OPND);
Push2(OPND,Operate(a,theta,b));
break;
}
}
3 程序设计
因为表达式是由操作符,运算符和界限符组成的。如果只用一个char类型栈,不能满足2位以上的整数,所以还需要定义一个int类型的栈用来寄存操作数。?
/*
您可能关注的文档
最近下载
- 海南省海口市(新版)2024小学语文人教版小升初真题(巩固卷)完整试卷(含答案).docx VIP
- 2025-2030中国医学影像设备行业深度调研及投资前景预测研究报告.docx
- 公安院校公安专业本专科招生政治考察表(2022年西藏报考公安院校公安专业招生).doc VIP
- 劳动争议管理制度.docx VIP
- 2024年秋季新北师大版七年级上册数学全册导学案.docx
- 2020-2021学年北京市朝阳区北京版四年级下册期末测试英语试卷.docx VIP
- 骨关节感染患者的护理(外科护理).pptx
- 波形护栏质量检验评定表、报告单.pdf VIP
- 大学《传感器原理及应用》习题解析及期末考试真题.docx VIP
- 基于PLC控制的泡沫切割机-毕业论文.doc VIP
文档评论(0)