C语言:编写一个程序,使其能读入并计算以个只包含加减运算的表达式

每一个输入都是浮点数。除了第一个数,其余每个数前面都有一个运算符,例如:
23+43-233+234;表达式以分号结束。
第一位老兄的这个逻辑有问题诶。。第二位老兄,你那个太复杂了吧,,有没有简单易懂的啊?

#include <stdio.h>
int main(){
double a;
char fh='+';
double sum=0.0;
while(scanf("%lf",&a)!=EOF){
if(fh=='+')sum+=a;
else sum-=a;
scanf("%c",&fh);
if(fh==';')break;
}
printf("value=%lf\n",sum);
return 0;
}
我假设的是表达式最前面有个'+',这不影响表达式的值。调试是正确的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-02
#include<iostream>
#include<string.h>
using namespace std;
main ()
{
char a[1000];
cin>>a;
int s=0,c=1,b=0;//c是符号,b是当前数字,s是和
for (int i=0;i<=strlen (a);i++)
{if (a[i]>='0' && a[i]<='9'){b*=10;b+=(a[i]-'0')*c;}
if (a[i]=='+'){c=1;s+=b;b=0;}
if (a[i]=='-'){c=-1;s+=b;b=0;}
if (a[i]==';'){s+=b;cout<<s;break;}
}
// cin>>s;
}
//百度上的';'太难看了
第2个回答  2009-08-01
#include <stdio.h>
#include <conio.h>
#include <math.h>

int main(void)
{
int i = 0, j = 0;
int plus = 0;
double value = 0.0;
char s[200];
char s1[200];
gets(s);

while(1)
{
if (s[i] == '+' || s[i] == ';')
{
s1[j] = '\0';
if (plus == 0)
value += atof(s1);
else
value -= atof(s1);
plus = 0;
j = 0;
}
else if (s[i] == '-' || s[i] == ';')
{
s1[j] = '\0';
if (plus == 0)
value += atof(s1);
else
value -= atof(s1);
plus = 1;
j = 0;
}
else
s1[j++] = s[i];
if (s[i] == ';')
break;
i++;
}

printf("%lf", value);
}

这是解析字符串表达式的方法
相似回答