c++两种方法现表达式的计算.docVIP

  • 6
  • 0
  • 约1.6万字
  • 约 16页
  • 2016-10-09 发布于广东
  • 举报
c两种方法现表达式的计算

数据结构(双语) ——项目文档报告 用两种方式实现表达式自动计算 专 业: 网络工程 班 级: 网络1班 指导教师: 吴亚峰 姓 名: 王嘉宇 学 号: 201214620111 目 录 一、设计思想……………………………………………………….01 二、算法流程图…………………………………………………….01 三、源代码………………………………………………………….04 四、运行结果……………………………………………………….12 五、遇到的问题及解决…………………………………………….13 六、心得体会……………………………………………………….14 一、设计思想 (1)先将中缀表达式转化为后缀表达式,再通过计算后缀表达式求表达式的值。因为运算数的位数不一定而且还有小数点,所以在扫到一个数时要判断这个数的位数,将这个完整的运算数字符串整个取出,因为运算数的位数不一定而且还有小数点,所以在扫到一个数时要判断这个数的位数,将这个完整的运算数字符串整个取出, #includestdio.h//导入要用的包 #includestdlib.h #includemath.h #define len 1000 struct opnode { char data[len]; int top; }op;//定义字符栈 struct odnode { int top; float data[len]; }od;//定义数栈 void trans(char str[],char exp[],struct opnode op)//中缀变后缀的方法 { char ch; int i=0,t=0; op.top=-1;//初始字符栈顶为空 od.top=-1; //初始数栈顶为空 ch=str[i];i++; //定义存放字符串的数组 while(ch!=\0)//数组中字符串不为空 { switch(ch) { case+: //判断是否是+、- case-: while(op.top!=-1op.data[op.top]!=()//栈不为空且栈顶符号不为( { exp[t++]=op.data[op.top--];//存放后缀表达式的数组添加元素 } op.top++; op.data[op.top]=ch;//入栈 break; case*: //判断是否是*、/、% case/: case%: while(op.data[op.top]==*||op.data[op.top]==/||op.data[op.top]==%) { exp[t++]=op.data[op.top--]; }//栈顶元素为*或/,存放后缀表达式的数组添加元素 op.top++; op.data[op.top]=ch;//入栈 break; case(: op.top++;op.data[op.top]=ch;break;//扫描若是(,入栈 case): while(op.data[op.top]!=()//不是左括号出栈 { exp[t++]=op.data[op.top--]; }//栈顶元素不为(,出栈 op.top--;//(出栈 break; case=:break; default: while(ch=0ch=9||ch==.) { exp[t++]=ch; ch=str[i++]; }//扫描是否是数字或小数点,存入数组 i--; exp[t]=|;t++;//分隔后缀中的数值元素 break; }

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档