信息学奥赛一本通C++语言——1058:求一元二次方程

该博客介绍了如何使用C++编程解决信息学竞赛中的一元二次方程求解问题。通过输入三个浮点数a、b、c表示方程的系数,程序将根据公式计算并输出精确到小数点后5位的根。当有两个相等实根时,以特定格式输出;当无实根时,输出"No answer!"。博客提供了两种不同的求解方法,包括double精度修正和C++原生方式。
摘要由CSDN通过智能技术生成

【题目描述】
利用公式
在这里插入图片描述
,求一元二次方程
在这里插入图片描述
的根,其中a不等于0。结果要求精确到小数点后5位。

【输入】
输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程
在这里插入图片描述
的系数。

【输出】
输出一行,表示方程的解。

若两个实根相等,则输出形式为:
在这里插入图片描述

若两个实根不等,在满足根小者在前的原则,则输出形式为:
在这里插入图片描述

若无实根输出“No answer!”。

所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。

【输入样例】
-15.97 19.69 12.02
【输出样例】
x1=-0.44781;x2=1.68075

方式一:double精度修正

#include <cstdio>
#include <cmath>

//在C/C++中,因浮点数的运算(和函数)有可能存在误差,例如假设在经过大量计算后,由于误差的影响,整数1变成了0.9999999999。因此,浮点数只有完全一样才能使用==判断相等,比如double类型的a和b,要判断a==b,在一定的精度范围内比较大小,可以借助修正写法,fabs(a – b) < eps,可以自定义精度esp,esp一般取1e-8左右大小。 
#define eps1 1e-10 //定义精度esp 10的-10次方
#define eps2 1e-6 //定义精度esp  10的-6次方

int main()
{
   
	//一元二次方程的解x1=[-b+(b^2-4ac)^(1/2)]/2a ; x2=[-b-(b^2-4ac)^(1/2)]/2a
	//当判别式(b^2-4ac)的值等于零时,有两个相等的实数根; 当判别式大于零时,有两个不相等的实数根; 当它小于零时,没有实根。 
    double a,b,c;
    scanf("%lf%lf%lf",&a,&b,&c);
    double p;//判别式 
	double x1,x2;//方程解 
    p=b*b-4*a*c;
    if(p<0 && fabs(<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值