# include <stdio.h>
int main()
{
//思路 将等号两边分开 未知数系数与常数分别求和 再相除
int a1 = 0,a2 = 0,b1 = 0,b2 = 0;
char s[100],a;//s存放方程 x存放未知数
scanf("%s %c",s,&a);
int i = 0,t = 0;
while(s[i] !='\0')
{
if(t == 0 && s[i] != '=')
{
//第一个是负号
if(s[i] == '-')
{
//判断是常量还是变量表达式
if(s[i+1]>='0' && s[i+1]<='9' && s[i+2] == a) //变量
{
a1 += -(s[i+1] - '0');
i+=3;
}
else
{
//此时突然想起来如果是两位数怎么办?不管他,摆!
b1 += -(s[i+1] - '0');//常数
i += 2;
}
}
else if(s[i] == a)
{
a1 += 1;
i++;
}
else if(s[i] >= '0' && s[i] <= '9' && s[i+1] != a)
{
b1 += s[i] - '0';
i++;
}
else if(s[i] >= '0' && s[i] <= '9' && s[i+1] == a)
{
a1 += s[i] - '0';
i+=2;
}
else if(s[i] == '+')
{
if(s[i+1]>='0' && s[i+1]<='9' && s[i+2] == a) //变量
{
a1 += (s[i+1] - '0');
i+=3;
}
else
{
b1 += (s[i+1] - '0');//常数
i += 2;
}
}
}
else if(s[i] == '=')
{
t = 1;
i++;
}
else if(t == 1)
{
//第一个是负号
if(s[i] == '-')
{
//判断是常量还是变量表达式
if(s[i+1]>='0' && s[i+1]<='9' && s[i+2] == a) //变量
{
a2 += -(s[i+1] - '0');
i+=3;
}
else
{
//此时突然想起来如果是两位数怎么办?不管他
b2 += -(s[i+1] - '0');//常数
i += 2;
}
}
else if(s[i] == a)
{
a2 += 1;
i++;
}
else if(s[i] >= '0' && s[i] <= '9' && s[i+1] != a)
{
b2 += s[i] - '0';
i++;
}
else if(s[i] >= '0' && s[i] <= '9' && s[i+1] == a)
{
a2 += s[i] - '0';
i+=2;
}
else if(s[i] == '+')
{
if(s[i+1]>='0' && s[i+1]<='9' && s[i+2] == a) //变量
{
a2 += (s[i+1] - '0');
i+=3;
}
else
{
b2 += (s[i+1] - '0');//常数
i += 2;
}
}
}
}//这是while的大括号
printf("a1 = %d\nb1 = %d\na2 = %d\nb2 = %d\n",a1,b1,a2,b2);
/*
第一次测试:
3a+2=5 a
a1 = 1
b1 = 5
a2 = 0
b2 = 5 问题出在没有考虑到 3a 这种情况
*/
double daan;
daan = (double)(b2 - b1) / (a1 - a2);
printf("%c = %.2lf",a,daan);
return 0;
}
一元二次方程(摆烂版)
最新推荐文章于 2024-10-08 18:38:07 发布