|
11111111111111111111111111111111111111111111111111111111111
void postfix(void)
{
char symbol;
precedence token;
int n=0;
int top=0;
stack[0]=eos;
for (token=get_token(&symbol,&n); token ! =eos; token=get_token(&symbol,&n))
if (token==operand)
printf("%c",symbol);
else if (token==rparen){
while (stack[top] ! =lparen)
print_token(deletes(&top));
deletes(&top);
}
else{
while(isp[stack[top]]>=icp[token])
print_token(deletes(&top));
add(&top,token);
}
}
while((token=deletes(&top) ! =eos)
print_token(token);
printf("\n");
}
22222222222222222222222222222222222222222222222222222222222
int eval(void)
{
precedence token;
char symbol;
int op1,op2;
int n=0;
int top=-1;
token=get_token(&symbol,&n);
while(token !=eos){
if(token==operand)
add(&top,symbol-'0');
else{
op2=deletes(&top);
op1=deletes(&top);
swith(token){
case plus : add(&top,op1+op2);
break;
case minus : add(&top,op1-op2);
break;
case times : add(&top,op1*op2);
break;
case divide : add(&top,op1/op2);
break;
case mod : add(&top,op1%op2);
}
}
token=get_token(&symbol,&n);
}
return deletes(&top);
}
33333333333333333333333333333333333333333333333333333333333
precedence get_token(char *symbol, int *n)
{
*symbol=expr[(*n)++];
swith(*symbol){
case '(' : return lparen;
case ')' : return lparen;
case '+' : return plus;
case '-' : return minus;
case '/' : return divide;
case '*' : return times;
case '%' : return mod;
case ' ' : return eos;
default : return operand;
}
}
===========================================================
這三段是我們簡易計算機的程式
第一段式轉碼
把a*b/c的算是改變=>ab*c/的方式堆疊進去第二段中
再由第二段算出結果 第三段 完成
可是 我兜不起來><
誰能幫幫我 急件 半夜趕作業ing |
|