您的位置:首页 > 其它

CODE-1015 计算器的改良

2017-03-03 20:10 441 查看
编写程序,解输入的一元一次方程, 将解方程的结果(精确至小数点后三位)输出至屏幕。

样例输入 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 =
4000
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: