| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 703 人关注过本帖
标题:计算器问题
只看楼主 加入收藏
ou1111
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:87
专家分:162
注 册:2010-10-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
计算器问题
写一个简单的计算器程序,请问:
  输入的算式如:3.5+4.56*78  该如何进行处理
搜索更多相关主题的帖子: 计算器 
2010-11-06 17:24
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:15 
这个不是很好处理。
解析表达式有很多不同的方法,但都不太容易实现。
一般来说,如果有可能,人们就会想办法避免手动编码处理这些东西。有一些 C 语言生成器,就是辅助生成相关代码的。

不过如果表达式很简单,涉及的运算符号不是很多,优先级规则也不是很复杂的话,手动写个解析器的难度是可以接受的。
你可以自己想想看有什么方法。大体上思路就是,读输入,区别是数还是运算符,进而决定应该怎么处理。这个技术难度比较高的其实是错误处理。一个表达式如果是对的,那很规范。但如果是错的,错出什么五花八门都有可能。想全面的做逻辑审查,并反馈相当有建设意见的信息是很难的。这个大概实现一下就已经是不小的锻炼了,你可以假设输入者不会犯错误,或者不会犯太离谱的错误。

如果你想具体学就要上网去查查资料,或者跑跑图书馆了。
2010-11-06 20:18
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:3 
#include <studio.h>
#include<math.h>
void main()
{flat sum=0,am,a=0,j;
  int i=0;
 scanf("%f&%f",&am,&j)
 { a=am*j;
  if(a)
  {scanf("%d",&i)
   sum=a+i;
return 0;
}
   
}
printf("the is sum:",sum);
}
2010-11-06 22:35
jianghong_02
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:143
专家分:476
注 册:2010-10-2
收藏
得分:0 
哦……我没有调试的,你去试试。
2010-11-06 22:36
ou1111
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:87
专家分:162
注 册:2010-10-26
收藏
得分:0 
回复 4楼 jianghong_02
额。。。你理解错了我的意思,我是要写一计算器程序,不仅仅是我举的一个式子
2010-11-06 23:00
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
呵呵,三楼的代码确实是“朴素”了点~~
2010-11-06 23:42
zz592987564
Rank: 2
来 自:广东省信宜市
等 级:论坛游民
帖 子:3
专家分:10
注 册:2010-11-6
收藏
得分:1 
我觉得你这个计算器应该用C#来编写,我的就是C#实现的

知识就像海洋的水,学之不进,但是不学就会废弃。。。
2010-11-07 00:23
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:1 
BJ在C++程序设计语言里有个计算器的代码。
傻一点的话还可以这么做。为每一个运算符号记录优先级,比如'+' '-'为0,'*' '/'为1,一无 '-'为2,每逢一个左括号则其右边的每个运算符都加上3,(‘+’为3,‘*’为4。。。。),逢右括则减去3。然后扫描链表。

迭代的是人,递归的是神。
2010-11-07 08:29
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
嗯,很多书上都会介绍类似的方法。其实都很经典,不是什么傻方法。

不知道楼主自己查没查。如果是有兴趣最好是自己学习,比别人讲的更具有实践性。

我说点个人经验吧,反正我也没仔细研究过这方面的东西,仅供参考。
楼主就用 C 语言,或者 C++ 写就可以。这类功能明显面向过程,使用高级一些的语言,分析表达式也没什么简单方法(除非有些自带了相关的库)。
这里会用的错误处理,C 语言里普遍是用 longjmp 实现的。C++ 里有异常的方法,实现起来会更方便一些。

算术表达式分析比较通用的技巧之一应该是构建表达式树。
但相对简单的一点的表达式也有简单一点的方法,以前我有个同学交作业要写类似的东西,我帮他写了个有限状态机的分析器。我自己感觉这个方法是可扩展性不太强,但错误处理做的比较漂亮。

总之我不太爱写这类代码,工作量比较大。做完了成就感也不是很强。

2010-11-08 17:47
ou1111
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:87
专家分:162
注 册:2010-10-26
收藏
得分:0 
谢谢9楼,我会自己去查一些资料的
2010-11-08 18:59
快速回复:计算器问题
数据加载中...
 
   



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

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