| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 987 人关注过本帖
标题:[求助]带括号的四则运算~急!!
只看楼主 加入收藏
lolita
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-7-5
收藏
 问题点数:0 回复次数:3 
[求助]带括号的四则运算~急!!

在网上找了好多版本的,哪位GGJJ能给我个相对简单些的.急用啊.小妹这边先谢谢拉.今晚通宵看书了.要交程序设计...

最好是用栈实现的.不过不用的话也无所谓拉

搜索更多相关主题的帖子: 括号 运算 GGJJ 程序设计 
2006-07-06 22:41
xinhezai
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-7-14
收藏
得分:0 

有vb版本要吗??

2006-07-14 16:25
huanguyu
Rank: 1
等 级:新手上路
帖 子:90
专家分:0
注 册:2006-4-26
收藏
得分:0 
我发个 大家帮忙看下哦~~~~~~~~~这也是我们课程设计的题目
#include <iostream>
using namespace std;
class Calculator
{
public:
Calculator() {STop=0;NTop=0;SignTemp=NULL;NumTemp=0;}
void compute(); //计算函数
void getcal() {cin>>cal;} //获取表达式
void Run(); //运行函数 其中有对优先级的考虑
private:
char cal[200]; //保存表达式的数组
char Sign[100],SignTemp;
double Num[100],NumTemp; //用两个数组分别存放运算符和数字,用声明相对应的2个临时变量
int STop,NTop;
};
void Calculator::compute()//对数字栈的上面两个数字 和 运算符栈的第一个运算符进行运算
{
switch (Sign[STop-1])
{
case '+':
Num[NTop-2]+=Num[NTop-1];//运算后将结果存入
STop--;NTop--;break;
case '-':
Num[NTop-2]-=Num[NTop-1];
STop--;NTop--;break;
case '*':
Num[NTop-2]*=Num[NTop-1];
STop--;NTop--;break;
case '/'://判断除数是否为0,0的话结束
if (Num[STop-1]==0)
{cout<<"data error!!"<<endl; exit(0);}
else
{Num[NTop-2]/=Num[NTop-1];
STop--;NTop--;break; } //其中STop--;NTop--;实现的是将数据弹出栈
case ')':
STop=STop-2;break;//发现')'对上个运算符进行判断
}
}
void Calculator::Run()//运行函数
{
const int length(strlen(cal));
char temp;
int p=0;
while (p<=length)//读入数据
{
temp=cal[p];
if (temp>='0' && temp<='9')
NumTemp=NumTemp*10+double(temp-48); //对数字的处理,其中的NumTemp*10实现对多位数的一起保存
else
{
Sign[STop]=SignTemp;
SignTemp=temp;
STop++; //运算符入栈
if (Sign[STop-1]!=')' && temp!='(')
{
Num[NTop]=NumTemp;
NTop++; NumTemp=0;}//数字入栈
switch (temp) //进行有关运算优先级别的考虑
{
case '+':
case '-':
while(Sign[STop-1]!='(' && STop-1>0)
compute();
break;//"+""-"的时候考虑"("
case '*':
case '/':
while( Sign[STop-1]!='(' && Sign[STop-1]!='+' && Sign[STop-1]!='-'&& STop-1>0 )
compute();
break;
case '(':
break;//继续读取
case ')':
while(Sign[STop-1]!='(') compute();
break;
default:
while(STop-1>0) compute();//只要里面有运算符号就继续算
cout<<Num[0]<<endl;
exit(0);//结束
}
}p++;
}
}
void main()
{
Calculator Ca;
Ca.getcal();
Ca.Run();
}

看越多书就发现自己越无知 于是就越想知道更多
2006-07-16 01:23
明日路
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-9-17
收藏
得分:0 
好难呀!!!
2009-09-17 14:13
快速回复:[求助]带括号的四则运算~急!!
数据加载中...
 
   



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

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