连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=35
表达式求值
时间限制:3000 ms | 内存限制:65535 KB
难度:4
比如输入:“1+2/4=”,程序就输出1.50(结果保留两位小数)
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式,每个运算式都是以“=”结束。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。
数据保证除数不会为0
2 1.000+2/4= ((1+2)*5+1)/4=
1.50 4.00
#include<stdio.h> #include<string.h> #define M 1010 char str[M],*pstr[M]; int zuo[M],you[M],op[M],nc,pn,n; int buildtree(int x=0,int y=strlen(str)-1) { int u,i,c1=-1,c2=-1,p=0,ismun=1; for(i=x;i<y;i++) { switch(str[i]) { case '(':p++;ismun=0;break; case ')':p--;ismun=0;break; case '+':case '-':ismun=0;if(p==0)c1=i;break; case '*':case '/':ismun=0;if(p==0)c2=i;break; } } if(ismun) { pstr[pn++]=str+x; return(n--); } if(c1<0)c1=c2; if(c1<0)return(buildtree(x+1,y-1)); u=++nc; zuo[u]=buildtree(x,c1); you[u]=buildtree(c1+1,y); op[u]=str[c1]; return(u); } float findtree(int n=1) { float a,b; if(zuo[n]>0)a=findtree(zuo[n]); else sscanf(pstr[-zuo[n]],"%f",&a); if(you[n]>0)b=findtree(you[n]); else sscanf(pstr[-you[n]],"%f",&b); switch(op[n]) { case '*':return(a*b); case '/':return(a/b); case '+':return(a+b); case '-':return(a-b); } } int main() { int T; scanf("%d",&T); while(T--) { nc=pn=n=0; scanf("%s",str); buildtree(); printf("%.2lf\n",findtree()); } return(0); }
相关推荐
表达式求值,用二叉树来表示以后,进行遍历求解。
POJ2014考研试题表达式·表达式树·表达式求值答案
将简单的中缀表达式转换成表达式树,然后利用表达式树对中缀表达式进行求值。
(1)题目一的内容和要求: 1、编写已知二叉树的先序、中序序列,恢复此二叉树的程序 2、编写求二叉树深度的程序 (2)题目二的内容和要求: 1、算术表达式由操作数、运算符和界限... 3、依据后缀表达式计算表达式的值
算术表达式求值,所属为C语言种数据结构相关实验。 已编程为主,要懂基本的C++编译原理。
用C语言编写的表达式求值程序,数据结构采用带首尾指针的单链表和树来实现。表达式中可用的字符为+,-,*,/,(,)和数字,可以是多位数或带小数点的小数。在visual studio 2010下调试通过。该程序也可用数组和树...
一次课堂作业,就是对字符串表达式进行求值,比如char型数组(1+2)*4%3,能转化成计算数值(1+2)*4%3
这个程序是根据数据结构中二叉树,根据这个树,输入表达式,然后创建树,输出计算结果还有遍历等信息
数据结构实验(约瑟夫环、哈弗曼树、表达式求值、树的遍历、图的遍历),详细介绍:http://blog.csdn.net/xunciy/article/details/79242866
数据结构课设,用c语言编写的单链表, 表达式求值, 二叉树 ,二叉排序树 ,Huffman编码,五个做成菜单,只有一个main函数
数据结构中常用的程序。...解压后有四个程序,分别是 表达式求值,二叉树,哈夫曼树,三元组系数矩阵。 程序用VS 2008写的。用其他编译器时去掉不必要的文件。 程序全部测试过。每个程序都有相应的程序说明。
北邮计算机学院数据结构课的中期检查代码,用二叉树存储表达式,并求出表达式的值。同时带有表达式检错功能。
在Linux环境下运用gedit工具,通过C语言编程实现四个程序,分别为:堆排序、用栈实现表达式求值、B+树和红黑树。 利用大顶堆(或小顶堆)堆顶记录的是最大关键字(或最小关键字)这一特性,使得每次从无序中选择...
标识符树与表达式求值[定义].pdf
表达式求值,输入的表达式可以转化为一棵树来存放,每一个叶子节点都是一个数。
[基本内容] (1) 以逆波兰表示输入的算术表达式(假设每个操作数都以单字符字母表示,即操作数的标 识符为一个字母); (2) 初始化表达式树;...按C++语法规则的形式输入表达式,完成上述功能计算并输出表达式的值。
printf("**** 3:表达式求值 *****\n"); printf("**** 4:哈夫曼树 *****\n"); printf("**** 5:单链表 *****\n"); printf("**** 0:退出 *****\n"); printf("*******************************\n"); printf("请...
设计一个程序,演示用算符优先法对算术表达式求值的过程。 【基本要求】 以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用运算符优先关系,实现对算术四则混合运算表达式的求值。 【测试数据】 ...
在Linux环境下,通过C语言编程实现四个程序,分别为:堆排序、用栈实现表达式求值、B+树和红黑树+源代码+文档说明+实验报告 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码...
面向对象 北工大 课设 使用多种设计模式,实现的求值引擎,包括表达式树的构建