标题:C语言:计算器算法中的括号问题
只看楼主
yukuai1991
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-14
结帖率:66.67%
 问题点数:0 回复次数:0 
C语言:计算器算法中的括号问题
编了一个计算器的程序,如果要实现括号的运算,不知道怎么改!!!

#include<stdio.h>
#include<malloc.h>
typedef struct
{
    char *base;
    char *top;
    int stacksize;
}SqStack1;

typedef struct
{
    int *base;
    int *top;
    int stacksize;
}SqStack2;

void InitStack1(SqStack1 &OPTR)
{
    OPTR.base=(char *)malloc(100*sizeof(char));
    OPTR.top=OPTR.base;
    OPTR.stacksize=100;

}

void InitStack2(SqStack2 &OPND)
{
    OPND.base=(int *)malloc(100*sizeof(int));
    OPND.top=OPND.base;
    OPND.stacksize=100;

}

void Push1(SqStack1 &OPTR,char a)
{
    if(OPTR.top-OPTR.base>=OPTR.stacksize)
    {
    OPTR.base=(char *)realloc(OPTR.base,(OPTR.stacksize+100)*sizeof(char));
    OPTR.top=OPTR.base+OPTR.stacksize;
    OPTR.stacksize+=100;
    }
    OPTR.top++;
    *OPTR.top=a;

}

void Push2(SqStack2 &OPND,int b)
{
    if(OPND.top-OPND.base>=OPND.stacksize)
    {
    OPND.base=(int *)realloc(OPND.base,(OPND.stacksize+100)*sizeof(int));
    OPND.top=OPND.base+OPND.stacksize;
    OPND.stacksize+=100;
    }
    OPND.top++;
    *OPND.top=b;

}

char Pop1(SqStack1 &OPTR)
{
    char c;
    c=*(OPTR.top--);
    return c;
}

int Pop2(SqStack2 &OPND)
{
    int d;
    d=*(OPND.top--);
    return d;
}

char GetTop1(SqStack1 OPTR)
{
    char e;
    e=*(OPTR.top--);
    return e;
}

int GetTop2(SqStack2 OPND)
{
    int e;
    e=*(OPND.top--);
    return e;
}


int Precede(char a,char b)//第一个为GetTop的数值,第二个为将要进入的数值
{
    if((a=='+'||a=='-')&&(b=='+'||b=='-'))
        return 1;
    if((a=='*'||a=='/')&&(b=='*'||b=='/'))
        return 1;
    if((a=='*'||a=='/')&&(b=='+'||b=='-'))
        return 1;
    if((a=='+'||a=='-')&&(b=='*'||b=='/'))
        return 0;
    else return -1;
}

int Operate(int a,int b,char c)
{
    if(c=='+') return b+a;
    if(c=='-') return b-a;
    if(c=='*') return b*a;
    if(c=='/') return b/a;

}

void main()
{
    char a,b;
    int c,d,e,f,g;
    SqStack1 OPTR;
    SqStack2 OPND;
    InitStack1(OPTR);
    InitStack2(OPND);
    Push1(OPTR,'#');
    scanf("%d",&c);

    Push2(OPND,c);
    a=getchar();
    while(a!='#')
    {
        d=Precede(GetTop1(OPTR),a);
        if(d==1)
        {   
            e=Pop2(OPND);
            f=Pop2(OPND);
            g=Operate(e,f,GetTop1(OPTR));
            Pop1(OPTR);
            Push2(OPND,g);
            Push1(OPTR,a);
            scanf("%d",&c);
        
            Push2(OPND,c);
            a=getchar();
            if(a=='#')
            {
            e=Pop2(OPND);
            f=Pop2(OPND);
            g=Operate(e,f,b=Pop1(OPTR));
            Push2(OPND,g);
            c=Pop2(OPND);
            }
            
        }
        if(d==0)
        {    scanf("%d",&c);
           
            Push2(OPND,c);
            Push1(OPTR,a);
            e=Pop2(OPND);
            f=Pop2(OPND);
            g=Operate(e,f,a);
            Push2(OPND,g);
            Pop1(OPTR);
            a=getchar();
            if(a=='#')
            {
                e=Pop2(OPND);
                f=Pop2(OPND);
                g=Operate(e,f,b=Pop1(OPTR));
                Push2(OPND,g);
                c=Pop2(OPND);
            }
        }
        if(d==-1)
        {
            scanf("%d",&c);
            
            Push2(OPND,c);
            Push1(OPTR,a);
            a=getchar();
            if(a=='#')
            {
            e=Pop2(OPND);
            f=Pop2(OPND);
            g=Operate(e,f,b=Pop1(OPTR));
            Push2(OPND,g);
            c=Pop2(OPND);
            }
         }

    }
   
    printf("%d",c);
    printf("\n");
}
搜索更多相关主题的帖子: 计算器 include C语言 
2011-11-10 13:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-354847-1-1.html




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

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