| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 501 人关注过本帖
标题:求各位大神指导,我感觉好困难的问题,搞了一天了
取消只看楼主 加入收藏
whisper_time
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2013-12-30
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
求各位大神指导,我感觉好困难的问题,搞了一天了
把这段代码补全或修改部分,是可以实现最多5位数的四则运算,正负数,还有小数,本人自己改了一点……实在拿不出手,望各位大神指点!感谢啊
#include"conio.h"
#include "stdio.h"
#include "stdlib.h"
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10
typedef char  SElemType;
typedef int    Status;
#define  OK        1
#define  OVERFLOW  0
#define  ERROR     0
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;

Status InitStack(SqStack &s)
{
//构造一个空栈
        s.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!s.base)exit(OVERFLOW);
        s.top=s.base;
    s.stacksize=STACK_INIT_SIZE;
    return OK;
}//InitStack

SElemType Getop(SqStack s)
{    //若栈不空,则返回用e返回s栈元素
      SElemType e;
    if(s.top==s.base)return ERROR;
        e=*(s.top-1);
    return e;
}

Status Push(SqStack &s,SElemType e)
{
//插入元素e为新的栈顶元素
    if(s.top-s.base>=s.stacksize)
{//栈满,追加存储空间
s.base=(SElemType *)realloc
(s.base,(s.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!s.base)exit(OVERFLOW);//存储分配失败
                 s.top=s.base+s.stacksize;
s.stacksize+=STACKINCREMENT;
}
*s.top++=e;
    return OK;
}

Status Pop(SqStack &s,SElemType &e)
{
//若栈不空,则删除s的栈顶元素,用e 返回其值,并返回OK,否则返回ERROR
if(s.top==s.base)
return ERROR;
e=*--s.top;
return OK;
}

char Precede(char e,char c)
{
//比较运算任符的优先权
    if(e=='+')
    {
if(c=='+'||c=='-'||c==')'||c=='#')
            return '>';
              return '<';
    }
    else if(e=='-')
    {
        if(c=='+'||c=='-'||c==')'||c=='#')
            return '>';
        return '<';
    }
    else if(e=='*')
    {
        if(c=='(')
            return '<';
             return '>';
    }
    else if(e=='/')
    {
        if(c=='(')
            return '<';
             return '>';
    }
    else if(e=='(')
    {
        if(c==')')
            return '=';
        else if(c=='+'||c=='-'||c=='*'||c=='/'||c=='(')
            return '<';
    }
    else if(e==')')
    {
        if(c=='+'||c=='-'||c=='*'||c=='/'||c==')'||c=='#')
            return '>';
    }
    else if(e=='#')
    {    if(c=='#')
            return '=';
        else if(c=='+'||c=='-'||c=='*'||c=='/'||c=='(')
            return '<';
    }
return 0;
}

int  Operate(char b,char theta,char a)
{    //运算
int  temp;
//    b-=48;a-=48;
if(theta=='+')
temp =b+a;
    else if(theta=='*')
        temp=b * a;
    else if(theta=='-')
        temp=b-a;
    else if(theta=='/')
        temp=b/a;
    return temp;
}

char OP[]={'+','-','*','/','(',')','#'};
int In(char c,char OP[])//比较是否为运算符
{   
int i;
         for(i=0;i<=6;i++)
if(c==OP[i])
        return 1;
return 0;
}   
char EvluateExpression()
{
//算术表达式求值的算符优先算法.设OPTR和OPND分别为运算栈和运算数栈,
    //OP为运算任集合
    SqStack OPTR,OPND;char a,b,c,x,theta;
    InitStack(OPTR); Push(OPTR,'#');
    InitStack(OPND);c=getchar();
while(c!='#'||Getop(OPTR)!='#'){
if(!In(c,OP))
{
Push(OPND,c-48);
c=getchar();
}//不是运算符则进栈
        else
            switch(Precede(Getop(OPTR),c))
{
            case '<'://栈顶元素优先权低
                  Push(OPTR,c);c=getchar();break;
            case  '='://脱括号并接收下一字符
                  Pop(OPTR,x);c=getchar();break;
            case  '>'://退栈并将运算结果入栈
                  Pop(OPTR,theta);
                  Pop(OPND,b);Pop(OPND,a);
                  Push(OPND,Operate(a,theta,b));
                  break;
            }
    }//while
    return Getop(OPND);
}
void main()
{
char temp;
       temp=EvluateExpression();
       printf("%d\n",temp);
       return;
}
搜索更多相关主题的帖子: include 
2013-12-30 17:20
whisper_time
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2013-12-30
收藏
得分:0 
回复 2楼 未未来
可以帮个忙在看一下吗?谢谢了
2013-12-31 08:15
whisper_time
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2013-12-30
收藏
得分:0 
求救啊
2013-12-31 14:04
whisper_time
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2013-12-30
收藏
得分:0 
实习中啊,急用……
2013-12-31 14:24
whisper_time
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2013-12-30
收藏
得分:0 
各位大神新年好,只是我的问题求解答啊啊……
2014-01-02 08:17
快速回复:求各位大神指导,我感觉好困难的问题,搞了一天了
数据加载中...
 
   



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

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