| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 446 人关注过本帖
标题:用栈编个简单计算器。。出问题了
只看楼主 加入收藏
小健健
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-12-18
结帖率:100%
收藏
 问题点数:0 回复次数:0 
用栈编个简单计算器。。出问题了
这是我写的,但是输出不来结果,各位大大帮帮忙啊



#include <stdio.h>
#include <stdlib.h>
#define MAX 100

typedef struct
{
int a[MAX];
int top;
}OPND;

typedef struct
{
char a[MAX];
int top;
}OPTR;

void Init_OPND(OPND *s);
void Push_OPND(OPND *s,int x);
int Pop_OPND(OPND *s);
int GetTop_OPND(OPND *s);
void Init_OPTR(OPTR *s);
void Push_OPTR(OPTR *s,char x);
char Pop_OPTR(OPTR *s);
char GetTop_OPTR(OPTR *s);
int IsOpr(char c);
char Precede(char s,char c);
int Operate(int x,char opr,int y);


void Init_OPND(OPND *s)
{
s->top =-1;
}


void Init_OPTR(OPTR *s)
{
s->top =-1;
}

void Push_OPND(OPND *s,int x)
{
s->top ++;
s->a [s->top ]=x;
}


void Push_OPTR(OPTR *s,char x)
{
s->top ++;
s->a [s->top ]=x;
}


int Pop_OPND(OPND *s)
{
int x;
x=s->a [s->top];
s->top --;
return x;
}


char Pop_OPTR(OPTR *s)
{
char x;
x=s->a [s->top];
s->top --;
return x;
}


int GetTop_OPND(OPND *s)
{
return (s->a[s->top]);
}


char GetTop_OPTR(OPTR *s)
{
return (s->a[s->top]);
}

int IsOpr(char c)
{
if (c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
   return 1;
else
     return 0;
}


char Precede(char s,char c)
{
switch(s)
{
case '+':
case '-':
{
if(c=='+'||c=='-')
    return '>';
   else if (c=='*'||c=='/')
      return '<';
   else if(c=='(')
    return '<';
   else if(c==')')
    return '>';
   else
    return '>';
}
break;

case '*':
case '/':
{
if(c=='+'||c=='-')
    return '>';
   else if (c=='*'||c=='/')
    return '>';
   else if(c=='(')
    return '<';
   else if(c==')')
    return '>';
   else
     return '>';
}
break;

case '(':
{
if(c==')')
    return '=';
   else
    return '<';
}
break;


case ')':
{
   return '>';
}
break;


case '#':
{
if(c=='#')
     return '=';
    else
    return '<';
   
}
break;
}
}


int Operate(int x,char opr,int y)
{
int result;
switch (opr)
{
case '+':
     result = x + y;
     break;
case '-':
   result = x - y;
   break;
    case '*':
   result = x * y;
   break;
    case '/':
   result = x / y;
   break;
}
return result;
}


void main()
{
OPND sdata;
OPTR soper;
int a,b,result;
char ch,theta;
Init_OPND(&sdata);
Init_OPTR(&soper);
Push_OPTR(&soper,'#');
scanf("%c",&ch);
while(ch!='#'||GetTop_OPTR(&soper)!='#');
{
   if(!IsOpr(ch))
   {
     Push_OPND(&sdata,ch);
     scanf("%c",&ch);
   }
        else
   {
    switch(Precede(GetTop_OPTR(&soper),ch))
    {   
     
   case '<':
   Push_OPTR(&soper,ch);
   scanf("%c",&ch);
   break;
   
   case '=':
   theta=Pop_OPTR(&soper);
   scanf("%c",&ch);
   break;
   
   case '>':
   theta=Pop_OPTR(&soper);
   a=Pop_OPND(&sdata);
   b=Pop_OPND(&sdata);
   result=Operate(a,theta,b);
   Push_OPND(&sdata,result);
   break;
    }
    }
}        
printf("%d",GetTop_OPND(&sdata));
}
搜索更多相关主题的帖子: 计算器 
2009-11-06 09:10
快速回复:用栈编个简单计算器。。出问题了
数据加载中...
 
   



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

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