编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出至屏幕。
样例输入 Sample Input
6a-5+1=2-2a
样例输出 Sample Output
a=0.750
输入字符串,从左到右依次判断,将系数放在等号左边,常数项放在等号右边,然后相除得到答案。
#include <stdio.h>
#include <string.h>
int main()
{
char s[100];
char c;
double x = 0,y = 0,ans = 0,flag = 1; //ans存储当前数值 ,flag表示在等式左边还是右边,x表示变量的大小,y表示整数的结果
int cnt = 1; //cnt表示当前的数正还是负
scanf("%s", s);
unsigned long len = strlen(s);
if (s[0] == '-')
cnt = -1; //判断第一个字符
else if (s[0] >= 'a' && s[0] <= 'z'){ //是字母的话
x += 1;
c = s[0];
}
else
ans = ans * 10 + s[0] - '0'; //是数字
for (int i = 1; i < len; i++)
{
// printf("%.2lf %d %.2lf %.2lf\n",ans,cnt,x,y);
if (s[i] >= 'a' && s[i] <= 'z') //是字母就把 ans的值加到x里面去 同时c表示变量是哪个字母
{
c = s[i];
x += cnt * flag * ans;
ans = 0;
cnt = 1;
}
else if(s[i] >= '0' && s[i] <= '9')
{
ans = ans * 10 + s[i] - '0';
}
else
{
if(ans) //数字加到y上面去
{
y += cnt * flag * ans;
ans = 0;
cnt = 1;
}
if (s[i] == '-')
cnt = -1;
else if (s[i] == '+')
cnt = 1;
else if (s[i] == '=')
flag = -1;
}
}
if (s[len-1] >= '0' && s[len - 1] <= '9')
y += cnt * flag * ans; //还要注意最后是整数的情况没有处理
// printf("%.2lf\n",ans);
//printf("%.2lf %.2lf\n",x,y);
ans = y / x; //还有等于0的情况
if (ans == 0)
printf("%c=0.000\n",c);
else
printf("%c=%.3lf\n",c,-1*y/x);
return 0;
}