double data[Maxsize]; int top;
}seqstack,*pseqstack;/*Êý¾ÝÕ»*/ typedef struct {
char data1[Maxsize]; int top1;
}seqstack1,*pseqstack1;/*×Ö·ûÕ»*/
void push(pseqstack s,double x) { /*ÈëÊý¾ÝÕ»*/ s->top++;
s->data[s->top]=x; }
double pop(pseqstack s) { /*³öÊý¾ÝÕ»*/ double x;
x=s->data[s->top]; s->top--; return x; }
void Destory_stack(pseqstack *s) { /*´Ý»ÙÕ»*/ if(*s)
free(*s); *s=NULL; return; }
void push1(pseqstack1 s,char x) {/*Èë×Ö·ûÕ»*/ s->top1++;
s->data1[s->top1]=x; }
char pop1(pseqstack1 s) { /*³ö×Ö·ûÕ»*/ char x;
x=s->data1[s->top1];
s->top1--; return x; }
char get_top(pseqstack1 s) { /*È¡×Ö·ûÕ»¶¥*/ char x;
x=s->data1[s->top1]; return x; }
int Isnum(char ch) { /*ÅжÏÊÇ·ñΪÊý×Ö*/ if(ch>='0'&&ch<='9') return 1; else
return 0; }
int priority(char op) {/*ÇóÓÅÏȼ¶*/ switch(op) {
case '=': case ')':
case '#':return 1; case '+':
case '-':return 2; case '*':
case '/':return 3; case '(':return 4; } }
double calculator(char a[]) { /*¼ÆËã±í´ïʽ*/ int i=0,j;
double Int_part=0,float_part=0,x=0; double c,result,d,b; char ch;
pseqstack s=(pseqstack)malloc(sizeof(seqstack));/*Êý¾ÝÕ»*/
pseqstack1 k=(pseqstack1)malloc(sizeof(seqstack1));/*ÔËËã·ûÕ»*/ s->top=-1; k->top1=-1; push1(k,'#');
while(a[i]!='='||(ch=get_top(k))!='#') {
if(Isnum(a[i])) /*µ±Ç°×Ö·ûΪÊý×Ö*/
{
x=0;Int_part=0;float_part=0; while(a[i]!='.'&&Isnum(a[i])) {
Int_part=Int_part*10+a[i]-'0'; i++; } j=-1;
if(a[i]=='.') {
i++;
while(Isnum(a[i])) {
float_part=float_part+(a[i]-'0')*pow(10,j); i++; j--; } }
x=Int_part+float_part; push(s,x); }
else /*µ±Ç°×Ö·ûΪÔËËã·û*/ if(a[i]!=' ') {
if((get_top(k)=='('&&a[i]!=')')||priority(get_top(k)) if(a[i]==')'&&get_top(k)=='(') {pop1(k);i++;} else { ch=pop1(k); /*´ÓÊý¾Ýջѹ³öÁ½¸öÊý,²¢´Ó×Ö·ûջѹ³öÒ»¸öÔËËã·û½øÐмÆËã*/ b=pop(s); d=pop(s); switch(ch) { case '+':c=d+b;break; case '-':c=d-b;break; case '*':c=d*b;break; case '/':c=d/b;break; } push(s,c); } } } } result=pop(s); Destory_stack(&s); return result; } void main() { char str[20]; double result; int operate; printf(\"ÇëÊäÈëÄãÏë½øÐеIJÙ×÷£¨0¡ª¡ªÔò½áÊø£¬ÆäËûÈÎÒâµÄ×Ö·ûÔò¼ÌÐø:\"); scanf(\"%d\ getchar(); while(operate!=0) { printf(\"ÇëÊäÈëÖÐ׺±í´ïʽ(ÿ¸ö²Ù×÷ÊýºóÓÐÒ»¸ö¿Õ¸ñ²¢ÒÔ=ºÅ½áÊø£¡)£º\"); gets(str); result=calculator(str); printf(\"±í´ïʽ½á¹ûÊÇ:\"); printf(\"%3.3f\\n\ printf(\"ÇëÊäÈëÄãÏë½øÐеIJÙ×÷£¨0¡ª¡ªÔò½áÊø£¬ÆäËûÈÎÒâµÄ×Ö·ûÔò¼ÌÐø:\"); scanf(\"%d\ getchar(); } } 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务