lfz_1912
白於青
采纳率50%
2015-04-11 08:45

C++中一个类型转换的问题。

2
已采纳

//第一个
// Expression.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include"SeqStack.cpp"
using std::cout;
using std::endl;
using std::cerr;

double Operate(double a,char pre_op,double b);
char Precede(char pre_op,char ch);
double Expression_Eval();

int _tmain(int argc, _TCHAR* argv[])
{
double value=Expression_Eval();
cout<<value<<endl;
return 0;
}

double Expression_Eval()
{
SeqStack OPTR;
SeqStack OPND;
OPTR.Push('@');
char ch = getchar();
while(ch!='@' || OPTR.Top()!='@')
{
if(ch>='0' && ch<='9')
{
OPND.Push(ch-'0');
ch=getchar();
}
else
{
char pre_op = OPTR.Top();
switch(Precede(pre_op,ch))
{
case'<':
OPTR.Push(ch);
ch = getchar();
break;
case'=':
OPTR.Pop();
ch = getchar();
break;
case'>':
double b = OPND.Pop();
double a = OPND.Pop();
pre_op = OPTR.Pop();
OPND.Push(Operate(a,pre_op,b));
break;
}
}
}
return OPND.Top();
}

double Operate(double a,char pre_op,double b)
{
switch(pre_op)
{
case'+': return a+b;
case'-': return a-b;
case'*': return a*b;
case'/': return a/b;
default: cout<<"不能进行该运算。"<<endl;
}
return 0;
}

char Precede(char pre_op,char ch)
{
char operates[7][7] =
{
'>' , '>' , '<' , '<' , '<' , '>' , '>' ,
'>' , '>' , '<' , '<' , '<' , '>' , '>' ,
'>' , '>' , '>' , '>' , '<' , '>' , '>' ,
'>' , '>' , '>' , '>' , '<' , '>' , '>' ,
'<' , '<' , '<' , '<' , '<' , '=' , ' ' ,
'>' , '>' , '>' , '>' , ' ' , '>' , '>' ,
'<' , '<' , '<' , '<' , '<' , ' ' , '='
};
int x=0,y=0;
switch(pre_op)
{
case'+' :x=0;break;
case'-' :x=1;break;
case'*' :x=2;break;
case'/' :x=3;break;
case'(' :x=4;break;
case')' :x=5;break;
case'@' :x=6;break;
default:cerr<<"输入错误。"<<endl;
}
switch(ch)
{
case'+' :y=0;break;
case'-' :y=1;break;
case'*' :y=2;break;
case'/' :y=3;break;
case'(' :y=4;break;
case')' :y=5;break;
case'@' :y=6;break;
default :cerr<<"输入错误。"<<endl;
}
return operates[x][y];
}
//第二个
#ifndef SEQSTACK_H
#define SEQSTACK_H

template
class SeqStack
{
T data[MaxSize]; //存放栈元素的数组
int top; //栈顶指针,指定栈顶元素在数组中的下标
public:
SeqStack(); //构造函数
void Push(T x); //入栈
T Pop(); //出栈
T Top(); //取栈顶元素,元素并不出栈
bool Empty(); //判断栈是否为空
bool Full(); //判断栈是否满了
};

#endif
//第三个
#include "stdafx.h"
#include"SeqStack.h"
#include
using namespace std;

//初始化
template
SeqStack::SeqStack()
{
top=-1;
}

//入栈操作
template
void SeqStack::Push(T x)
{
if(top==MaxSize-1)
{
cerr<<"上溢。"<<endl;
exit(1);
}
++top;
data[top]=x;

}

//出栈,类似于删除
template
T SeqStack::Pop()
{
if(top==-1)
{
cerr<<"下溢。"<<endl;
exit(1);
}
int x=data[top];
top--;
return x;
}

//取出栈元素
template
T SeqStack::Top()
{
if(top==-1)
{
cerr<<"下溢。"<<endl;
exit(1);
}
return data[top];
}

//判断栈是否满了
template
bool SeqStack::Full()
{
if(top==MaxSize-1)
{
cerr<<"栈已经满了。"<<endl;
return true;
}
else
cout<<"未满"<<endl;
return false;
}

//判断栈是否为空
template
bool SeqStack::Empty()
{
if(top==-1)
{
cerr<<"栈为空。"<<endl;
return true;
}
return false;
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • lfz_1912 白於青 6年前

    我已经把代码附全了,还望帮助!谢谢!

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 6年前

    代码不完整,用编辑框的第6个按钮贴你的代码

    点赞 评论 复制链接分享
  • 91program 91program 6年前

    1+3/6 的结果正确的是:1。
    如果想得到小数点后的结果,就需要将 3 或 6 强制转成 float 或 double。如:
    1+ (float)3/6 或
    1+ (double)3/6
    因为数值的类型转换,默认是向精度较大的转换。如果都是 int 型,计算出来的结果就只是 int 型,没有小数。

    点赞 评论 复制链接分享
  • lfz_1912 白於青 6年前

    //第一个文件
    #include "stdafx.h"
    #include"SeqStack.h"
    #include
    using namespace std;

    //初始化
    template
    SeqStack::SeqStack()
    {
    top=-1;
    }

    //入栈操作
    template
    void SeqStack::Push(T x)
    {
    if(top==MaxSize-1)
    {
    cerr<<"上溢。"<<endl;
    exit(1);
    }
    ++top;
    data[top]=x;

    }

    //出栈,类似于删除
    template
    T SeqStack::Pop()
    {
    if(top==-1)
    {
    cerr<<"下溢。"<<endl;
    exit(1);
    }
    int x=data[top];
    top--;
    return x;
    }

    //取出栈元素
    template
    T SeqStack::Top()
    {
    if(top==-1)
    {
    cerr<<"下溢。"<<endl;
    exit(1);
    }
    return data[top];
    }

    //判断栈是否满了
    template
    bool SeqStack::Full()
    {
    if(top==MaxSize-1)
    {
    cerr<<"栈已经满了。"<<endl;
    return true;
    }
    else
    cout<<"未满"<<endl;
    return false;
    }

    //判断栈是否为空
    template
    bool SeqStack::Empty()
    {
    if(top==-1)
    {
    cerr<<"栈为空。"<<endl;
    return true;
    }
    return false;
    }
    //第二个文件
    #ifndef SEQSTACK_H
    #define SEQSTACK_H

    template
    class SeqStack
    {
    T data[MaxSize]; //存放栈元素的数组
    int top; //栈顶指针,指定栈顶元素在数组中的下标
    public:
    SeqStack(); //构造函数
    void Push(T x); //入栈
    T Pop(); //出栈
    T Top(); //取栈顶元素,元素并不出栈
    bool Empty(); //判断栈是否为空
    bool Full(); //判断栈是否满了
    };

    #endif

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 6年前

    SeqStack.cpp 的源代码呢

    你的测试用例实在看不出是因为后面被当作整除了,还是表达式没有对后面求值。代码不全也不好调试。

    点赞 评论 复制链接分享

相关推荐