数据结构课程设计之算术表达式求值

数据结构课程设计之算术表达式求值

ID:47518147

大小:74.77 KB

页数:17页

时间:2020-01-12

数据结构课程设计之算术表达式求值_第1页
数据结构课程设计之算术表达式求值_第2页
数据结构课程设计之算术表达式求值_第3页
数据结构课程设计之算术表达式求值_第4页
数据结构课程设计之算术表达式求值_第5页
资源描述:

《数据结构课程设计之算术表达式求值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1【实验题目及要求】[问题描述]  一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正实数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“算符优先法”求算术表达式的值。[基本要求](1)从键盘或文件读入一个合法的算术表达式,输出正确的结果。(2)显示输入序列和栈的变化过程。(3)考虑算法的健壮性,当表达式错误时,要给出错误原因的提示。(4)实现非整数的处理(可选功能)。2【源代码(C语言)】#

2、include#include#include#defineMAXSIZE20#defineOK1#defineERROR0#defineOVERLOW0#defineYES1#defineNO0typedefstruct{char*base;char*top;intstacksize;//最大存储量}OPTR;//字符存储栈typedefstruct{float*base;float*top;intstacksize;//最大存储量}OPND;//数值存储栈intInitOptrStack(OPTR*);//字符栈初始

3、化函数intOptrPush(OPTR*,char);//进字符栈操作intOptrPop(OPTR*,char*);//出字符栈操作intOptrEmpty(OPTR);//判断字符栈是否为空charGetOptrTop(OPTR);//返回字符栈顶元素intInitOpndStack(OPND*);//数值栈初始化函数intOpndPush(OPND*,float);//进数值栈操作intOpndPop(OPND*,float*);//出数值栈操作intOpndEmpty(OPND);//判断数值栈是否为空intJudgeChar(char);//判断是否为字符floatG

4、etFloat(char*);//接收一个数字charPrecede(char,char);//判断优先级操作floatCaculate(float,float,char);//计算数值voidmain(){charch,noMean,ci;floatnum,number1,number2;OPTRoptr;OPNDopnd;//system("color30");InitOptrStack(&optr);InitOpndStack(&opnd);while(1){printf("请输入表达式以“#”开始,以“#”结束");do{ch=getchar();}while(ch

5、!='#');//忽略前面非‘#’字符OptrPush(&optr,ch);ch=getchar();while(ch!='#'

6、

7、GetOptrTop(optr)!='#'){if(!JudgeChar(ch)){//如果输入的是数字num=GetFloat(&ch);OpndPush(&opnd,num);}else{//输入的是字符switch(Precede(GetOptrTop(optr),ch)){case'<':OptrPush(&optr,ch);//栈顶优先级低ch=getchar();break;case'=':OptrPop(&optr,&noMean);

8、//左右括号,把左括号出栈ch=getchar();break;case'>'://栈顶优先级高if(OpndPop(&opnd,&number2)&&OpndPop(&opnd,&number1)){OptrPop(&optr,&ci);num=Caculate(number1,number2,ci);//出栈计算OpndPush(&opnd,num);}else{printf("输入过多运算符!");system("PAUSE");exit(0);}break;}//witch}//else}if(opnd.top-opnd.base>=2){printf("俩个括号之

9、间缺少运算符!");system("PAUSE");exit(0);}OpndPop(&opnd,&num);//直接把OPND的栈元素赋值给numprintf("运算结果为%.3f",num);}system("PAUSE");}intInitOptrStack(OPTR*OP){OP->base=(char*)malloc((MAXSIZE+1)*sizeof(char));OP->top=OP->base;OP->stacksize=MAXSIZE;returnOK;}intO

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

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

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