经典题目:求一个一元二次方程的解

求关于一元二次方程的解时,输入数的类型应该为浮点型。根据一元二次方程三个系数即可判断出所有情况。

这里牵扯到对于零的比较。 

定义的浮点数判断是否为零时,将十进制小数转化为二进制存储,由于浮点型float只有把个字节内存二进制原理无法精确存储,所以需要定义一个临界值来衡量精度。 从而拓展到其他浮点数的是否等于准确值。

#define  EXP  0.00000000001 //定义测量精度
int main()
{
	double a = 0.0;
	double b = 0.0;
	double c = 0.0;
		scanf("%lf%lf%lf", &a, &b, &c);
		getchar();
	if(a>-EXP && a<EXP)//浮点数需要用临界值来定义精度;
	{
		printf("不是一元二次方程");

	}
	else 
	{
		double res = b*b - 4 * a*c;//判断方程有几个跟
		if (res > -EXP&&res < EXP)//判断是否为零
		{
			printf("方程有一个解\n");
			printf("%lf", -b / 2*a);
		}
		else if(res<= -EXP) //保证了判断精度得严谨性,避免深度计算时得矛盾,将整个判断域连接起来

		{
			printf("该方程无解");
		}
		else if (res >= EXP)// 同上
		{
			printf("方程有两个解");
			printf("%lf,%lf", (-b + sqrt(res)) / 2*a, (-b - sqrt(res)) / 2*a);
		}
		getchar();
		return 0;
	}


	getchar();
	return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值