以下是引用蓝色神话在2006-6-14 18:46:05的发言:
不要想当然,有些事想起来很容易,做起来就不容易了!
我认为在算法上的确没有难度
#include <stdio.h>
#define NMAX 32
/*宏,把缓冲区里面的数字加入x变量*/
#define Add_num(x) x+=getnum(num,numlen)*plus; numlen=0;
double getnum(char *num,int nlen)
{/*把字符串变为相应的数字*/
double ans;
if(!nlen) return 0;
num[nlen]='\0';
sscanf(num,"%lf",&ans);
return ans;
}
void find(char *s)
{/*plus记录当前缓冲区数字符号,a记录变量系数和,b记录常数项系数和*/
/*把式子当作全部移项到左边处理*/
double plus,a,b,ans,fuhao;
char num[NMAX],c;
int numlen;
fuhao=1;plus=1;numlen=0;a=0;b=0;
while(*s){
switch(*s){
case '+':Add_num(b) plus=fuhao ; break;
case '-':Add_num(b) plus=-fuhao; break;
case '=':Add_num(b) fuhao=-fuhao;plus=fuhao;break;
case '.':num[numlen++]=*s; break;
default :
if(*s>='a'&&*s<='z'){
Add_num(a) c=*s;
}
else num[numlen++]=*s;
}
s++;
}
Add_num(b)
ans=-(b/a);
printf("%c=%.3lf\n",c,ans);
}
#define EXPMAX 256
int main()
{
char expr[256];
while(scanf("%s",expr)==1){
find(expr);
}
return 0;
}