您的位置:首页 > 其它

简单表达式求值

2005-04-18 21:29 369 查看
#include "stack.h"
#include "stdio.h"
#include "conio.h"
#include "stack.h"
#include "stdio.h"
#include "conio.h"

main()
{
char c,theta,array[20];
int a,b,t,i=0,j=0;
SqStack OPTR;
SqStack2 OPND;
clrscr();
main()
{
char c,theta,array[20];
int a,b,t,i=0,j=0;
SqStack OPTR;
SqStack2 OPND;
clrscr();

InitStack(&OPTR);
Push(&OPTR,'#');
InitStack2(&OPND);
gets(array);
while(array[i]) i++;
InitStack(&OPTR);
Push(&OPTR,'#');
InitStack2(&OPND);
gets(array);
while(array[i]) i++;

if(array[i-1]!='=')
printf("You must put a character make this procedure to the end!!!");
else{
i=0;
while(array[i]!='='||GetTop(OPTR)!='#'){
while(In(array[i])){i++;j++;}
if(j){
t=atoi(&array[i-j]);
Push2(&OPND,t);
j=0;
}
if(!In(array[i])){
switch(Precede(GetTop(OPTR),array[i])){
case '<': Push(&OPTR,array[i]);i++;
break;
case '=': Pop(&OPTR,&c);i++;
break;
case '>': Pop(&OPTR,&theta);
Pop2(&OPND,&a);Pop2(&OPND,&b);
Push2(&OPND,Operate(a,theta,b));
break;
default:printf("Warning:Data Error!");
} /*switch*/
} /*if*/
} /*swicth*/
} /*else*/
printf("%d",GetTop2(OPND));
sleep(2);
} /*main*/
if(array[i-1]!='=')
printf("You must put a character make this procedure to the end!!!");
else{
i=0;
while(array[i]!='='||GetTop(OPTR)!='#'){
while(In(array[i])){i++;j++;}
if(j){
t=atoi(&array[i-j]);
Push2(&OPND,t);
j=0;
}
if(!In(array[i])){
switch(Precede(GetTop(OPTR),array[i])){
case '<': Push(&OPTR,array[i]);i++;
break;
case '=': Pop(&OPTR,&c);i++;
break;
case '>': Pop(&OPTR,&theta);
Pop2(&OPND,&a);Pop2(&OPND,&b);
Push2(&OPND,Operate(a,theta,b));
break;
default:printf("Warning:Data Error!");
} /*switch*/
} /*if*/
} /*swicth*/
} /*else*/
printf("%d",GetTop2(OPND));
sleep(2);
} /*main*/

Precede(char a,char b){
if(((a=='(')&&(b==')')) ||((a=='#')&&(b=='=')))
return '=';
else if(((a=='('||a=='#')&&(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')) ||((a=='+'||a=='-')&&(b=='*'||b=='/'||b=='(')) ||((a=='*'||a=='/')&&b=='('))
return '<';
else if(((a=='+'||a=='-'||a=='*'||a=='/'||a==')')&&(b=='+'||b=='-'||b==')'||b=='='))||((a=='*'||a=='/')&&(b=='*'||b=='/')))
return '>' ;
else return '@';
Precede(char a,char b){
if(((a=='(')&&(b==')')) ||((a=='#')&&(b=='=')))
return '=';
else if(((a=='('||a=='#')&&(b=='+'||b=='-'||b=='*'||b=='/'||b=='(')) ||((a=='+'||a=='-')&&(b=='*'||b=='/'||b=='(')) ||((a=='*'||a=='/')&&b=='('))
return '<';
else if(((a=='+'||a=='-'||a=='*'||a=='/'||a==')')&&(b=='+'||b=='-'||b==')'||b=='='))||((a=='*'||a=='/')&&(b=='*'||b=='/')))
return '>' ;
else return '@';

}
}

int Operate(int a,char theta,int b){
int t;
switch(theta){
case '+': t=(a+b);break;
case '-': t=(b-a);break;
case '*': t=(a*b);break;
case '/': t=(b/a);break;
};
return t;
}

int In(char c){
if(c>='0'&&c<='9') return 1;
else return 0;
}
int Operate(int a,char theta,int b){
int t;
switch(theta){
case '+': t=(a+b);break;
case '-': t=(b-a);break;
case '*': t=(a*b);break;
case '/': t=(b/a);break;
};
return t;
}
int In(char c){
if(c>='0'&&c<='9') return 1;
else return 0;
}
引用头文件见本Blog
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: