一元二次方程(摆烂版)

# 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;
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值