数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 3565|回复: 0

高手,看一下哪里出错啦?

[复制链接]
发表于 2005-11-18 07:16:55 | 显示全部楼层 |阅读模式
<>#include&lt;stdio.h&gt;<BR>#include&lt;malloc.h&gt;</P>
<>#define null 0<BR>#define stack_size 100<BR>typedef struct{<BR>    int *base;<BR>    int *top;<BR>    int stacksize;<BR>}stack;<BR>void init(stack *s){<BR>    s-&gt;base=(int*)malloc(stack_size*sizeof(int));<BR>    s-&gt;top=s-&gt;base;<BR>    s-&gt;stacksize=stack_size;<BR>}</P>
<>char gettop(stack *s){<BR>    char e;<BR>    e=*(s-&gt;top-1);<BR>    return e;<BR> <BR>}<BR>void push(stack *s,char e){<BR>    *s-&gt;top++=e;<BR>}<BR>char pop(stack *s){<BR>    char e;<BR>    e=*--s-&gt;top;return e;}<BR>     <BR>int compare(char e){<BR>    char op[7]={'(',')','*','/','-','+','#'};<BR>    int i=0;<BR>    while(op!=e)i++;<BR>    if(i&gt;6)return 0;<BR>    else return 1;<BR>}</P>
<P>int trust(char x){<BR>    int a;<BR>    switch(x){<BR>        case '#': a=0;break;<BR>        case '(': a=1;break;</P>
<P>        case '+': a=2;break;</P>
<P>        case '-': a=2;break;</P>
<P>        case '*': a=3;break;</P>
<P>        case '/': a=3;break;</P>
<P>        case ')': a=4;break;</P>
<P>    }<BR>    return a;<BR>}<BR>char precede(char a,char b){<BR>    int x,y;<BR>    x=trust(a);<BR>    y=trust(b);<BR>    if(x==0&amp;&amp;y==0)return '=';<BR>    if(x==1&amp;&amp;y==4)return '=';<BR>    else<BR>        if(x&gt;y||x==y) return '&gt;'; <BR>        <BR>    else<BR>        return '&lt;';<BR>    <BR>    }<BR>    <BR>char operate(char a,char theta,char b){<BR>    char r;<BR>    switch(theta){<BR>        case '+':r=a+b-'0';break;<BR>        case '-':r=a+'0'-b;break;<BR>        case '*':r=(a-'0')*(b-'0')+'0';break;<BR>        case '/':r=(a-'0')/(b-'0')+'0';break;<BR>    }<BR>    return r;<BR>}<BR>char way(){<BR>    stack *ch,*nb;char c,x,y,k,theta,a,b,l;<BR>    ch=null;nb=null;<BR>    </P>
<P>    init(ch);push(ch,'#');<BR>    init(nb);<BR>    printf("请输入算术表达式,#表示结束\n");<BR>    scanf("%c",&amp;c);k=gettop(ch);<BR>    while(c!='#'||k!='#'){<BR>        if(compare(c)==0){push(nb,c);scanf("%c",&amp;c);}<BR>    else{<BR>        l=precede(k,c);<BR>        switch(l){<BR>            case '&lt;':push(ch,c);scanf("%c",&amp;c);k=gettop(ch);break;<BR>            case '=':pop(ch);scanf("%c",&amp;c);k=gettop(ch);break;<BR>            case '&gt;':theta=pop(ch);b=pop(nb);a=pop(nb);<BR>                     x=operate(a,theta,b);push(nb,x);k=gettop(ch);break;<BR>        }<BR>    }getchar();<BR>    }</P>
<P>    y=gettop(nb);<BR>    return y;<BR>    <BR>    } </P>
<P>                <BR>    </P>
<P>main(){<BR>    char c;<BR>    c=way();<BR>    printf("算术表达式结果为: %c",c);<BR>}</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-27 05:30 , Processed in 0.068007 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表