亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    用復(fù)合鏈表和棧外理四則運算

    原帖及討論:http://bbs.bccn.net/thread-151098-1-1.html

    #include<stdio.h>
    #include<malloc.h>
    union nuionnum
    {
        double num1;
        char num2;
    };
    struct lianbiao
    {
        struct lianbiao *p;
        union nuionnum num;
        int flage;//標志是數(shù)字還是符號

    };
    void main()
    {    
        char c;
        struct lianbiao lianhe;
        struct lianbiao *next;
        printf(“請輸入一個計算機能識別的四則運算表達式,如:a+b*(c+d)/en”);
        while(1)
        {
    first:
            next=&lianhe;
            while((int)(c=getchar())!=10)
            {    
    loop:
            //將表達式放入復(fù)合鏈表中
                if (c==’+’||c==’-‘||c==’*’||c==’/’||c=='(‘||c==’)’)
                {
                    next->num.num2=c;
                    if (c== ‘+’ || c== ‘-‘ )
                        next->flage =1;
                    else if(c== ‘*’ ||c== ‘/’ )
                        next->flage =2;
                    else if(c== ‘(‘ )
                        next->flage =3;
                    else if(c== ‘)’ )
                        next->flage =4;
                    next->p=calloc(1,sizeof(struct lianbiao));
                    next=next->p;
                    next->p=NULL;
                }
                else if(c>=’0’&&c<=’9′)
                {  long int t=1;
                   int flag=0;
                    next->num.num1=c-48;
                    while(((c=getchar())>=’0’&&c<=’9′)||c==’.’)
                    {    
                        if (flag==1 && c!=’.’)
                                {
                                    t=t*10;
                                    next->num.num1=next->num.num1+(c-48.0)/t;
                                }
                        else if(c>=’0’&&c<=’9′)
                            next->num.num1=next->num.num1*10+c-48;

                        if (c==’.’)
                        {
                            flag=1;
                        }
                    }
                    next->flage =0;
                    next->p=calloc(1,sizeof(struct lianbiao));
                    next=next->p;
                    next->p=NULL;
                    if (c==’n’)break;
                    goto loop;
                }
                else
                {
                    printf(“不是合法的算術(shù)表達式!!!n請重新輸入:n”);
                    while(getchar()!=’n’);//設(shè)置重新輸入
                    goto first;
                }
            }
    //將鏈表中的數(shù)字和符號分別入棧
        next=&lianhe;
        {
            int i=0,j=0;//用來標記棧的頂點
            double arrd[100];
            char arrc[2][100];
            while(next->p!=NULL)
            {
                if (next->flage !=0&&next->num.num2==’)’)//括號的外理
                {
                    while(arrc[0][i-1]!='(‘)//出棧
                    {
                        if (arrc[0][i-1]==’+’)
                        {
                            arrd[j-2]=arrd[j-2]+arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                        else if(arrc[0][i-1]==’-‘)
                        {
                            arrd[j-2]=arrd[j-2]-arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                        else if(arrc[0][i-1]==’*’)
                        {
                            arrd[j-2]=arrd[j-2]*arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                        else if(arrc[0][i-1]==’/’)
                        {
                            arrd[j-2]=arrd[j-2]/arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                    }
                    i=i-1;
                }
                else if (next->num.num2 =='(‘)//入棧
                {
                    arrc[1][i]=next->flage;
                    arrc[0][i]=next->num.num2;
                    i++;
                }
                else if (next->flage !=0)//對運算復(fù)符的理
                {
    front:
                    if (i>0&&next->flage<arrc[1][i-1]&&arrc[1][i-1]!=3)
                    {
                        if (arrc[0][i-1]==’*’)
                        {
                            arrd[j-2]=arrd[j-2]*arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                        else if(arrc[0][i-1]==’/’)
                        {
                            arrd[j-2]=arrd[j-2]/arrd[j-1];
                            i=i-1;
                            j=j-1;    
                        }
                        goto front;
                    }
                    arrc[1][i]=next->flage;
                    arrc[0][i]=next->num.num2;
                    i++;
                }
                else
                {
                    arrd[j]=next->num.num1; //對數(shù)字的理
                    j++;
                }
                next=next->p;
            }
            while(i!=0)//全部入棧之后對椎的外理
            {
                    if (arrc[0][i-1]==’+’)
                        {
                            arrd[j-2]=arrd[j-2]+arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                    else if (arrc[0][i-1]==’-‘)
                        {
                            arrd[j-2]=arrd[j-2]-arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                    else if (arrc[0][i-1]==’*’)
                        {
                            arrd[j-2]=arrd[j-2]*arrd[j-1];
                            i=i-1;
                            j=j-1;
                        }
                        else if(arrc[0][i-1]==’/’)
                        {
                            arrd[j-2]=arrd[j-2]/arrd[j-1];//1+2*3/4+5   1 1.5 5   ++
                            i=i-1;
                            j=j-1;    
                        }
            }
            printf(“%lfn”,arrd[0]);

        }
        }
    }

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號