c语言数学计算公式

#include
typedef struct
{float a[30];
int top;
}shuju;
typedef struct
{char b[30];
int futop;
}fuhao;
void initstack(shuju *s)
{s->top=-1;
}
void initstackk(fuhao *s)
{
s->futop=-1;
}
int youxianji(char n) /*符号优先级比较*/
{
switch(n)
{case '#': return 0;
case '+': return 1;
case '-': return 1;
case '*': return 2;
case '/': return 2;

}

}
int shujujinzhan(shuju *s,float x) /*数据进栈*/
{
if(s->top==29)
return (false);
s->top++;
s->a[s->top]=x;
return(true);
}
char fuhaojinzhan(fuhao *l,char y) /*运算符进栈*/
{
if (l->futop==29)
return (false);

l->futop++;
y=l->b[l->futop];
return y;

}
float shujuchuzhan(shuju *s,float *x) /*数据出栈*/
{
if(s->top==-1)
return (false);
else
{
*x=s->a[s->top];
s->top--;
return *x;
}
}
int fuhaochuzhan(fuhao *s,char *x) /*运算符出栈*/
{
if(s->futop==-1)
return (false);
else
{
*x=s->b[s->futop];
s->futop--;
return(true);
}
}
float suzi(char i) /*数据组成*/
{ float z, j=0;
z=(float)(i-'0');
j=j*10+z;
return j;
}
float jisuan(float a,char b,float c) /*计算*/
{ float s;
switch(b)
{ case'+': s=float(a+b); break;
case'-': s=float(a-b); break;
case'*': s=float(a*b); break;
case'/': s=float(a/b); break;
}
return s;
}
int pangduanyunsuanfu(char i) /*判断运算符还是数据*/
{
if (i=='+'||i=='-'||i=='*'||i=='/')
return 1;
else
return 0;
}

void main()
{ char strink[60],k;
int i,n,m;
int a=0,j;
float z,s,h1,h2;
shuju q;
fuhao p;
initstack(&q);
initstackk(&p);
fuhaojinzhan(&p,'#'); /*#进栈做栈底元素*/
printf("请输入计算公式\n");
gets(strink);
for (i=0;i<60;i++)
{ if (strink[i]=='\0') /*判断字符串是否为空*/
break;
else

{j=pangduanyunsuanfu(strink[i]); /*判断是运算符还是数据*/
if (j==1)
{ a=i++;

n=youxianji(strink[i]);
m=youxianji(p.b[p.futop]);
if (n-m>0) /*比较运算符的优先级*/
fuhaojinzhan(&p,strink[i]); /*运算符进符号栈*/
else
{ k=fuhaochuzhan(&p,&k);
h1=shujuchuzhan(&q,&h1);
h2=shujuchuzhan(&q,&h2);
s=jisuan(h1,k,h2); /*出栈的两个元素与对应的运算符的计算*/
shujujinzhan(&q,s); /*将计算的值回进数据栈中*/
}
}
else
{

z=suzi(strink[i]); /*对数据进行计算,*/

if (a!=i)
{ z=0;
shujujinzhan(&q,z); } /*把得到相应的数据进栈*/
a=i++;
}
}
}
printf("%d",q.a[0]); /*输出数据栈的最后一个元素,就是公式对应的值*/
}

相关文档
最新文档