📄 exp9.c
字号:
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#define Max 20
typedef struct chnu
{ char v[Max] ;
int t ; } cn;
typedef struct nn
{ float v[Max] ;
int t ; } n;
void init(cn *p, cn *q) /*chushihua*/
{ p->t=-1 ;
q->t=-1 ;
q->t++ ;
q->v[q->t]='#' ;
}
void initn(n *p)
{ p->t=-1 ;
}
void push(char c,cn *p) /*push*/
{ p->t++ ;
p->v[p->t]=c ; }
char pull(cn *p) /*pull*/
{ char c=p->v[p->t] ;
p->t-- ;
return c ; }
void pushn(float f,n *p) /*pushn */
{ p->t++ ;
p->v[p->t]=f; }
float pulln(n *p)
{ float b=p->v[p->t];
p->t-- ;
return b ; }
void creat(char e[]) /*creat */
{
printf("please enter the expression:");
scanf("%s",e);
}
void convert(cn *pn,n *p)
{ float f=0 ;
int i,j ;
j=pn->t ;
if(j==-1)
{return ;}
while(pn->v[pn->t]!='.'&&pn->t>0)
pn->t-- ;
if(pn->t>0)
{ i=pn->t;
pn->t=j;
while(pn->t>=0)
{ if(pn->t>i)
f=f+(pn->v[pn->t]-48)*pow(10,i-pn->t);
else
if(pn->t<i)
f=f+(pn->v[pn->t]-48)*pow(10,i-pn->t-1);
pn->t-- ;
} }
else
{ pn->t=j;
while(pn->t>=0)
{ f=f+(pn->v[pn->t]-48)*pow(10,j-pn->t);
pn->t--;
}
}
pushn(f,p);
}
void cal(char c,n *p) /*cal*/
{ float a;
switch(c)
{ case '+':
{ a=pulln(p);
p->v[p->t]=a+p->v[p->t]; }
break;
case '-':
{ a=pulln(p);
p->v[p->t]=p->v[p->t]-a; }
break;
case 'x':
{ a=pulln(p);
p->v[p->t]=p->v[p->t]*a; }
break;
case '/':
{ a=pulln(p);
p->v[p->t]=p->v[p->t]/a;}
break;
}
}
void qiu(char e[],cn *pc,cn *pn) /*qiu*/
{ n *p;
int i=0;
p=(n *)malloc(sizeof(struct nn));
initn(p);
while(e[i]!='\0')
{ switch(e[i])
{ case '(': convert(pn,p);
push(e[i],pc);
break;
case '+':
case '-':
convert(pn, p);
while(pc->v[pc->t]!='('&&pc->v[pc->t]!='#')
{ cal(pc->v[pc->t],p);
pc->t--; }
push(e[i],pc);
break;
case 'x':
case '/':
convert(pn, p);
while(pc->v[pc->t]=='x'&&pc->v[pc->t]=='/')
{ cal(pc->v[pc->t],p);
p->t--; }
push(e[i],pc);
break;
case ')': convert(pn,p);
while(pc->v[pc->t]!='(')
{ cal(pc->v[pc->t],p);
pc->t--; }
pc->t--;
break;
case '#':
convert(pn,p);
while(pc->v[pc->t]!='#')
{ cal(pc->v[pc->t],p); pc->t--;}
break;
default : push(e[i],pn); }
i++; }
printf("%6.3f\n",p->v[p->t]);}
main() /*main*/
{ char e[Max];
cn *pc,*pn;
pc=(cn *)malloc(sizeof(struct chnu));
pn=(cn *)malloc(sizeof(struct chnu));
init(pn,pc);
creat(e);
qiu(e,pc,pn);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -