如
result = (x=4*5,x*5),x+25;
这样的话首核坦先先计竖昌算小括号里的x = 4*5 = 20,
然后计算x*5 = 100, 这里小括号的结果为100.
然后计算x+25 = 45
所以x = 20, result = 45
#include<stdio.h>#include<stdlib.h>
#include<string.h>
double f(double a[100],char b[100],int la,int lb)
{
int i,j,k
for(i=0i<lbi++)
{
if(b[i]==’*’)
{
a[i]=a[i]*a[i+1]
for(j=ij<lb-1j++)
b[j]=b[j+1]
for(j=i+1j<la-1j++)
a[j]=a[j+1]
la--
lb--
i--
}
else if(b[i]==’/’)
{
a[i]=a[i]/a[i+1]
for(j=ij<lb-1j++)
b[j]=b[j+1]
for(j=i+1j<la-1j++)
a[j]=a[j+1]
la--
lb--
i--
}
}
for(i=0i<lbi++)
{
if(b[i]==’+’)
{
a[i]=a[i]+a[i+1]
for(j=ij<lb-1j++)
b[j]=b[j+1]
for(j=i+1j<la-1j++)
a[j]=a[j+1]
la--
lb--
i--
}
else if(b[i]==’-’)
{
a[i]=a[i]-a[i+1]
for(j=ij<lb-1j++)
b[j]=b[j+1]
for(j=i+1j<la-1j++)
a[j]=a[j+1]
la--
lb--
i--
}
}
return a[0]
}
main()
{
char b[100],c[100],y[100]
double a[100],s,t,x[100]
int i,j,k,la,lb,l,ld,le,d[100],e[100],g[100],lx,ly
while(gets(c))
{
i=0j=0t=1l=0
for(k=0k<100k++)
a[k]=0
s=0
for(k=0c[k]k++)
{
if(c[k]>=’0’&&c[k]<=’9’)
if(t==1)
{
s=s*10+c[k]-’0’
}
else
{
s=s+(c[k]-’0’)*t
t=t/10
}
else if(c[k]==’.’)
t=0.1
else if(c[k]==’+’||c[k]==’-’||c[k]==’*’||c[k]==’/’)
{
b[i]=c[k]
a[i++]=s
s=0
t=1
}
else if(c[k]==’(’)
{
g[j++]=i
}
else if(c[k]==’)’)
{
e[l++]=i
}
}
a[i++]=s
ld=j
le=l
la=i
lb=la-1
for(i=0i<ldi++)
d[i]=g[ld-i-1]
for(i=0i<ldi++)
{
for(j=0,k=d[i]k<e[i]k++,j++)
{
x[j]=a[k]
y[j]=b[k]
}
x[j++]=a[k]
lx=j
ly=j-1
a[(d[i])]=f(x,y,lx,ly)
k=e[i]-d[i]
for(j=d[i]+1j<la-1j++)
{
a[j]=a[j+k]
b[j]=b[j+k]
}
a[j]=a[j+k]
la=la-k
lb=lb-k
for(j=i+1j<ldj++)
e[j]=e[j]-k
}
s=f(a,b,la,lb)
printf("s=%lf\n",s)
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)