| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 15454 人关注过本帖, 4 人收藏
标题:[原创]算术表达式求值演示
取消只看楼主 加入收藏
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏(4)
 问题点数:0 回复次数:10 
[原创]算术表达式求值演示


我的一个同学找我搞定数据结构的实验报告,因为只有2天的时间,我就胡乱做了个。
下面是运行后生成的应用程序,给大家看看效果。(开始发的那个运行太快,看不见,请重新下载)
这是按照《数据结构习题集》严蔚敏版的实验2.5做的。
至于完整源代码,我下个星期5以后再发出来(呵呵,一点私心,防止上交的报告中有重复的)。
这里把关键的函数发出来。

int power(char x,int &base)// base用来保证括号内运算权限比括号外高(最关键的地方,运算符的权值设定)
{
int power;
if(x=='+'||x=='-')
power=base+1;
if(x=='*'||x=='/')
power=base+2;
if(x=='(')
{
power=3;
base+=3;
}
if(x==')')
{
power=-1;
base+=3;
}
if('0'<=x&&x<='9')
power=0;
}


void guocheng(char *infix)//整个算术表达式运算的过程,请在适当位置自行添加显示OPTR,OPND栈中内容和操作的函数(现在这个函数相当于算法)
{
int a,b,c,base=0,i;
char x,y;

for (i = 0; infix[i] != '\0'; i++)
{
x=infix[i];
if (power(x)==0)//数字就入栈
{
a=x-'0';
push(opnd,a);
}
else if(power(x)==3)// 遇到'('就进栈
{
push(optr,c);
}
else if (power(x)==-1)//')',运算消除一对()
{
a=pop(opnd);
b=pop(opnd);
y=pop(optr);
c=math(b,y,a);
push(opnd,c);
y=pop(optr);
if(y=='('); //考虑如3+5*(3+5*6)
else
{
a=pop(opnd);
b=pop(opnd);
c=math(b,y,a);
push(opnd,c);
pop(optr);
}

}
else
{
if(power(x)>power(top(optr))) //如果运算符权值打于栈顶元素的权值,就入栈
push(optr,x);
else //权值相同情况下就先计算前面的。
{
a=pop(opnd);
b=pop(opnd);
y=pop(optr);
c=math(b,y,a);
push(opnd,c);
push(optr,x);
}
}
}//for
y=pop(optr);
while(y)
{
a=pop(opnd);
b=pop(opnd);
c=math(b,y,a);
push(opnd,c);
y=pop(optr);
}
}


5lWFcR86.rar (30.05 KB) [原创]算术表达式求值演示

这个是老版本了,只有一个可执行文件,请到第3楼下载新版本,有原代码

[此贴子已经被作者于2006-4-25 10:46:35编辑过]



cvSFjLGr.rar (29.91 KB) [原创]算术表达式求值演示

搜索更多相关主题的帖子: 算术 求值 演示 表达 
2005-11-24 11:14
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
说明一下,像2*2(1+1)这样数子后面直接接'('的表达式非法,12+1这种数字超过了9的表达式非法

我的征途是星辰大海
2005-11-24 11:28
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
1ww245KF.rar (31.87 KB)

[此贴子已经被作者于2006-4-27 19:10:48编辑过]



YRpbH2V5.jpg (91.3 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

我的征途是星辰大海
2005-12-25 13:27
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 

前几天忙着考试去了,没有按时发上来,不好意思啊。


我的征途是星辰大海
2005-12-25 13:34
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 



看过或用过的朋友给 个意见啊,看看这个程序有什么BUG或不足啊?我好改进。
希望各位不吝赐教啊


我的征途是星辰大海
2006-01-13 11:59
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
哈哈,不错不错,很有意思,待我下去好好研究下

顺便给个楼上的程序下载网页连接(EXE文件,没有原代码,原代码在楼上), 方便大家学习鉴赏
http://www.bc-cn.net/bbs/dispbbs.asp?boardID=179&ID=60661&page=1

[此贴子已经被作者于2006-4-27 18:57:26编辑过]


我的征途是星辰大海
2006-04-27 18:54
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 

哇,给我扣了顶这么大的帽子,想不努力都不行啊.
欢迎回来, 激情!
这次怎么也该在静老大的数据结构历届斑竹名录里面留个名吧,不然就说不过去了啊, 你看热情都上榜n次了.

[此贴子已经被作者于2006-4-29 21:15:55编辑过]


我的征途是星辰大海
2006-04-29 12:02
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用方方在2006-6-29 13:22:00的发言:

程序运行的时候,如果输入错误的表达式,但是它还是会继续运行.

是的,即使是错误的表达式也会把它的入栈出栈顺序表示出来,但计算的结果是错的


我的征途是星辰大海
2006-07-01 20:19
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用Zacard在2006-7-7 18:47:00的发言:

不错,但是比不上我的
我也做这个
我的能实现实数运算,
你的好像不能处理大于10的数
569912111

谁说不能处理大于10的数啊,楼顶的老版本好象是不行,但后面的新版本100*100 都可以,不过我设定的变量类型为int , 所以最好计算时不要溢出,否则计算结果能显示,但结果是错的。


我的征途是星辰大海
2006-07-09 15:15
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用mnzmx在2006-7-7 20:02:00的发言:

在WIN-TC下编译会说int power(char x,int &base)这句“说明语法错误”??????

SunShine 过来帮忙看看,我现在在网吧上网,自己电脑前几天格式化了一次,没装WIN-TC。


我的征途是星辰大海
2006-07-09 15:20
快速回复:[原创]算术表达式求值演示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039699 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved