| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 368 人关注过本帖
标题: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
快速回复:C语言:计算器算法中的括号问题
数据加载中...
 
   



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

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