| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 304 人关注过本帖
标题:用数据结构编写算术表达式得不出结果 大虾们看看错在哪了
取消只看楼主 加入收藏
dongdong0
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-3-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:1 
用数据结构编写算术表达式得不出结果 大虾们看看错在哪了
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define maxlen 1000
typedef struct
{
    char stack[maxlen];
    int  top;
 }stack1;

typedef struct
{
    int  stack[maxlen];
    int  top;
}stack2;

stack1 *creat1()
{
    stack1 *s;
    s=(stack1 *)malloc(sizeof(stack1));
    s->top=-1;
    return s;
}

stack2 *creat2()
{
    stack2 *s;
    s=(stack2 *)malloc(sizeof(stack2));
    s->top=-1;
    return s;
}

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

void push1(stack1 *s,char ch)
{
    (s->top)++;
    s->stack[s->top]=ch;
}

void push2(stack2 *s,char ch)
{
    (s->top)++;
    s->stack[s->top]=ch;
}

void pop1(stack1 *s,char *a)
{
    *a=s->stack[s->top];
    (s->top)--;
}

void pop2(stack2 *s,int *a)
{
    *a=s->stack[s->top];
    (s->top)--;
}

char precede(char ch1,char ch2)
{
    char ch;
    switch(ch1)
    {
        case'+':if((ch2=='*')||(ch2=='/')||(ch2=='('))ch='<';else ch='>';break;
        case'-':if((ch2=='*')||(ch2=='/')||(ch2=='('))ch='<';else ch='>';break;
        case'*':if((ch2=='('))ch='<';else ch='>';break;
        case'/':if((ch2=='('))ch='<';else ch='>';break;
        case'#':if((ch2=='#'))ch='=';else ch='<';break;
    }
    return ch;
}

char gettop1(stack1 *s)
{
    return (s->stack[s->top]);
}

char gettop2(stack2 *s)
{
    return (s->stack[s->top]);
}

int operate(int a,char thrate,int b)
{
    int s;
    switch(thrate)
    {
        case'+':s=a+b;break;
        case'-':s=a-b;break;
        case'*':s=a*b;break;
        case'/':s=a/b;break;
    }
    return s;
}

void main()
{
    stack1 *OPTR;
    stack2 *OPND;
    int a,b,s;
    char c,x,thrate;
    OPTR=creat1();
    OPND=creat2();
    push1(OPTR,'#');
    printf("请输入算术表达式并以#结束:\n");
    c=getchar();
    while((c!='#')||(gettop1(OPTR)!='#'))
    {
        if(!in(c))
        {
                s=c-'0';
                push2(OPND,s);
                c=getchar();
        }   
        else
            switch(precede(gettop1(OPTR),c))
            {
                case'<':push1(OPTR,c);c=getchar();break;
                case'=':pop1(OPTR,&x);c=getchar();break;
                case'>':pop1(OPTR,&thrate);pop2(OPND,&b);pop2(OPND,&a);push2(OPND,operate(a,thrate,b));break;
            }
    }
        printf("结果为:\n");
        c=gettop2(OPND);
}
搜索更多相关主题的帖子: top 数据 include return 表达式 
2012-03-20 23:12
dongdong0
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-3-20
收藏
得分:0 
回复 楼主 dongdong0
我加了printf 输出的结果还是不正确 能不能在帮我看看错在哪了??谢谢了
2012-03-20 23:54
快速回复:用数据结构编写算术表达式得不出结果 大虾们看看错在哪了
数据加载中...
 
   



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

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