表达式求值源代码(数据结构课程设计).doc_第1页
表达式求值源代码(数据结构课程设计).doc_第2页
表达式求值源代码(数据结构课程设计).doc_第3页
表达式求值源代码(数据结构课程设计).doc_第4页
表达式求值源代码(数据结构课程设计).doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计源代码:表达式求值 0900340131 张宁 2011.6.26 #include#include/*函数功能:将数字字符串转变成相应的数 */*函数参数:char类型数组f,指向int类型变量的指针i*/*函数返回值:int类型。返回数字字符串对应的数 */int readnumber(char f,int *i)int x=0;while(f*i=0&f*i=0&fi=9) /*字符如果是数字字符*/obsttop=readnumber(f,&i); /*调用函数将其转化成整型*/top+; /*入栈*/else if(fi= ) /*遇到空格,跳过去,不进行处理*/i+; else if(fi=+) /*如果字符是运算符+,则从操作数栈中取出两个元素进行相加*/x2=obst-top;x1=obst-top;obsttop=x1+x2; /*将运算结果入栈*/top+;i+; /*继续下一个字符*/else if(fi=-) /*如果字符是运算符-,则从操作数栈中取出两个元素进行相减*/x2=obst-top;x1=obst-top;obsttop=x1-x2; /*将运算结果入栈*/top+;i+; /*继续下一个字符*/else if(fi=*) /*如果字符是运算符*,则从操作数栈中取出两个元素进行相乘*/x2=obst-top;x1=obst-top;obsttop=x1*x2;/*将运算结果入栈*/top+;i+;/*继续下一个字符*/else if(fi=/) /*如果字符是运算符/,则从操作数栈中取出两个元素进行相除*/x2=obst-top;x1=obst-top;obsttop=x1/x2;/*将运算结果入栈*/top+;i+;/*继续下一个字符*/return obst0; /*最后栈中只剩下一个元素,即为后缀表达式的值*/*函数功能:判断一个字符是否为运算符 */*函数参数:char类型变量op */*函数返回值:int类型。返回1表示op是运算符,否则不是*/int is_operation(char op)switch(op)case +:case -:case *:case /:return 1;default:return 0;/*函数功能:求运算符的优先级 */*函数参数:char类型变量op */*函数返回值:int类型。返回各中运算符的优先级*/int priority(char op)switch(op)case #:return -1;case (:return 0;case +:case -:return 1;case *:case /:return 2;default:return -1;/*函数功能:判断该表达式是符合要求 */*函数参数:存放从键盘输入的表达式 */*函数返回值:int类型。1代表正确,0代表错误 */int judge(char * a)int i=0,flog=1, b5=0; /x1记录运算符的个数,while(ai!=#)if(ai=+|ai=-|ai=/|ai=*)b0+;else if(0=ai&ai=0&ei=priority(ei) /*判断数组e和栈顶的操作符的优先级,大的,赋值给数组f*/fj+=opst-top;opsttop=ei;top+; /*当前元素进栈*/i+; /*处理下一个元素*/while(top) /*栈中还有的全部运算符赋值到数组f中,包括#*/fj+=opst-top; main()int i=0,result,flog=0,flog2=0;char a100,b100,x,w; /*数组a用来保存中缀表达式,数组b用来表达后缀表达式,*/printf(n);printf( 0代表退出系统 n);printf( 1代表输入算术表达式 n);printf( 2代表判断输入的算术表达式的正确性 n);printf( 3代表查看算术表达式的中缀表达式 n);printf( 4代表查看算术表达式的后缀表达式 n);printf( 5代表给出输入的算术表达式的最终结果 n);printf( 规定:第一步必须先输入算术表达式,然后才能进行其他的操作 n);printf(n); printf(版权所有,盗版必究 张宁 2010/6/24 nnn);doprintf(请输入您要操作所对应的数字: );fflush(stdin);scanf(%c,&x);if(48=x&x=53)switch(x)case 1:if(flog=1)printf(您已经输入过表达式了!进行此操作需要重新输入,请问你是否要继续操作!n);printf(继续,请输入y;n返回,请输入nn); dofflush(stdin); /*清楚缓存中的回车*/scanf(%c,&w);if(w=n)printf(您的操作已取消!nnn);break;else if(w=y)printf(请输入算术表达式:(以#号结尾!) );i=0;doscanf(%c,&ai);while(ai+!=#);flog=1;printf(nnn);break;elseprintf(请输入正确的选项!n);while(w!=n&w!=y);elseprintf(请输入算术表达式:(以#号结尾!) );doscanf(%c,&ai);while(ai+!=#);flog=1;printf(nnn);break;case 2:if(flog=0)printf(您还没有输入过表达式!n请您按照规定先输入后判断!nnn);elseflog2=1;if(judge(a)printf(表达式符合要求!n您可以继续下面的操作!n);elseprintf(表达式不符合要求!n请重新输入!n);break;break;case 3:if(flog=0)printf(您还没有输入过表达式!n请您按照规定先输入后算术表达式的中缀表达式nnn);break;else if(flog2=0)printf(您还没有判断表达式的正确性!n请您按照规定先判断表达式的正确性后查看算术表达式的中缀表达式 nnn);break;elseprintf(中缀表达式为:);i=0;doprintf(%c,ai);while(ai+!=#); /*i+;*/printf(nnn);break;case 4:if(flog=0)printf(您还没有输入过表达式!n请您按照规定先输入后算术表达式的中缀表达式nnn);break;else if(flog2=0)printf(您还没有判断表达式的正确性!n请您按照规定先判断表达式的正确性后查看算术表达式的中缀表达式 nnn);break;elsepostfix(a,b);printf(后缀表达式为:n);i=0;doprintf(%c,bi);while(bi+!=#); /*i+;*/printf(nnn);break;case 5:fflush(stdin);if(flog=0)printf(您还没有输入过表达式!n请您按照规定先输入表达式nnn);break;else if(flog2=0)printf(您还没有判断表达式的正确性!n请您按照规定先判断表达式的正确性后查看算术表达式的中缀表达式 nnn);break;else /*postfix(a,b);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论