| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 474 人关注过本帖
标题:求高手帮小弟一把
只看楼主 加入收藏
luosheng01
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2011-2-6
结帖率:33.33%
收藏
已结贴  问题点数:2 回复次数:2 
求高手帮小弟一把
首先感谢进来看帖的同志们
我现在大一,老师要求做程序设计
我想做一个简单的计算器
当初觉得很简单
但是后来想想,发现很多很麻烦的地方(对于我来说的,我很菜)
首先就是,就我自己的能力只能作出一个同一个运算符的运算。不如就是加法,确定之后就一直加法,中间不能乘除什么的
其次就是。我不知道怎么设定输入的数字有多少个
还有就是如果有个这样的式子的话
5+3*2/1 这个我就不知道怎么办了。很无奈啊。希望高人指点下,我不想百度找现成的程序设计。即使我很菜,我想自己学。
还有就是调用的问题,我也不知道怎么搞
希望高人给点思路,如果觉得时间充足。希望详细说明。毕竟我理解能力不是很好。。谢谢大家了~
搜索更多相关主题的帖子: 计算器 程序设计 百度 老师 
2011-03-11 17:04
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:1 
学习一下栈的知识 典型的计算器实现方式

具体操作步骤:
【1】先读入一行表达式,用一个字符数组line[]存储
【2】依次读入每个字符并进行处理同是进行表达式判错:
 
1. 遇数字,则继续判断下一个字符,直到下一个字符不是数字且不是小数点,若该数含有两个小以上数点,则表示输入错误。否则即可保证该操作数是完整的浮点数,然后将该数入操作数栈。
若数字不是表达式的最后一位,且数字后面跟的不是“+、-、*、/、^、)”,则为表达式错误

2. 遇运算符,则分两种情况:
1、若运算符为负号(该运算符为符号的情况有两种:一为负号在最开头,一为符号前面是“(” ),则先将0入操作数栈,然后再将负号入运算符栈。
2、该运算符不是负号则与运算符栈的栈顶元素比:
(1) 若栈顶元素优先级低, 新输入的运算符入栈。
(2) 若栈顶元素优先级高,
    1) 从符号栈弹出一个运算符,
    2) 从对象栈弹出一个/两个操作数,
    3) 运算结果压入对象栈。
(3) 优先级相等,则栈顶元素出栈,与输入元素对消。

若“(、+、-、*、/、^”放在表达式最后面,则表达式错误
若“+、-、*、/、^”后面跟的不是数字或者变量,表达式错误

3、遇字母变量,则继续判断下一个字符,直到下一个字符不是字母变量,即可保证该变量是完整的,然后输出“请输入变量的值”,再将输入的变量值入操作数栈。
   若变量后面跟的不是“+、-、*、/、^、)”,则表达式错误

4、若所读的该字符不是上述情况中的一种,则表达式错误

【3】当将所有的字符都读一遍之后,若表达式正确的话,则必然不含有“(”或者“)”。即若运算符栈中含有“(”或者“)”,则表达式必错误。 再考虑表达式正确的情况:运算符栈可能为空,则操作符栈中必剩下一个操作数,即最后的结果。若不为空,则留在运算符栈中的运算符的优先级别从栈顶至栈底依次递减。故可从运算符栈顶开始弹出一个运算符,从操作数栈中弹出两个操作数进行运算,再将运算结果入操作数栈,一直循环至运算符栈为空。此时操作数栈剩下的唯一一个操作数就是运算结果。

[ 本帖最后由 njkido 于 2011-3-11 17:18 编辑 ]
2011-03-11 17:17
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:1 
完全没有意思
2011-03-11 17:18
快速回复:求高手帮小弟一把
数据加载中...
 
   



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

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