题目源代码
题目
【题目描述】
求一元二次方程ax2+bx+c=0的根,其中a不等于0。结果要求精确到小数点后5位。
【输入】
输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程的系数。
【输出】
输出一行,表示方程的解。
若两个实根相等,则输出形式为:“x1=x2=…“;
若两个实根不等,在满足根小者在前的原则,则输出形式为:“x1=…;x2=…“;
若无实根输出“No answer!”。
所有输出部分要求精确到小数点后5位,数字、符号之间没有空格。
【样例输入】
-15.97 19.69 12.02
【样例输出】
x1=-0.44781;x2=1.68075
【提示】
比较浮点数相等,由于精度问题,直接比较有时可能会出错,在比较的时候需要用一个很小的数值来进行比较,当二者之差小于这个很小的数时,就认为二者是相等的了,这个很小的数,称为精度。本题中(要求精确到小数点后5位)用到的精度为1e-6.也就是0.000001.所以对于两根浮点数x1,x2,如果要比较大小,如果fabs(x1-x2)<=1e-6,那么就是相等了。 fabs是求浮点数绝对值的函数。
注意:(1):if(条件1) 语句1; if(条件2) 语句2; (2):if(条件1) 语句1; else if(条件2) 语句2; 双if语句,条件1和条件2都要判断后,按条件执行。而if,else if 当条件1满足后,else if后的语句就不会执行。
源代码
#include#define eps1 1e-10 //自己定一精度,用于判断浮点数大小 #define eps2 1e-6 //自己定一精度,用于判断浮点数大小 using namespace std; int main() { double a,b,c,x1,x2,g; scanf("%lf%lf%lf",&a,&b,&c); g=b*b-4*a*c;//判别式 if(g<0&&fabs(g)>eps1)//当判别式小于给定的精度范围内,即delta<0时,无实根 printf("No answer!"); else if(fabs(g) 0,此时delta≈0 { x1=-b/(2*a); if(fabs(x1)



