今天在刷题时发现了一个题(见一本通题库1058),有同学在群中问,题目不难,只要有初中知识就可解决。下面是题目:

看到这道题,芳源心想“好一道水题”就简单的做了一遍(下见代码):
1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 using namespace std;
5 int main()
6 {
7 double a,b,c;
8 double t;
9 cin>>a>>b>>c;
10 t=sqrt(b*b-4*a*c);
11 double x1=((t-b)/(2*a)),x2=((-t-b)/(2*a));
12 if(t>=0)
13 {
14 if(t=0)
15 printf("x1=x2=%.5lf",x1);
16 else
17 {if(x1>x2)
18 printf("x1=%.5lf;x2=%.5lf",x2,x1);
19 if(x1<x2)
20 printf("x1=%.5lf;x2=%.5lf",x1,x2);
21 }
22 }
23 else cout<<"No answer!";
24 return 0;
25 }
结果。。。。。

woc!无情!!!
我转念一想,这题可能没那么简单,于是。。。
我对它大~幅~修~改~
1 #include <cstdio>
2 #include <cmath>
3 #define eps1 1e-10
4 #define eps2 1e-6
5 using namespace std;
6 int main(){
7 double a,b,c,x1,x2,g;
8 scanf("%lf%lf%lf",&a,&b,&c);
9 g=b*b-4*a*c;
10 if(g<0&&fabs(g)>eps1)printf("No answer!");
11 else if(fabs(g)<eps1){
12 x1=-b/(2*a);
13 if(fabs(x1)<eps2)
14 printf("x1=x2=%.5lf",0);
15 else
16 printf("x1=x2=%.5lf",x1);
17 }
18 else{
19 x1=(-b+sqrt(g))/(2*a);
20 x2=(-b-sqrt(g))/(2*a);
21 if(fabs(x1)<eps2)x1=fabs(x1);
22 if(fabs(x2)<eps2)x2=fabs(x2);
23 if(x1<x2)printf("x1=%.5lf;x2=%.5lf",x1,x2);
24 else printf("x1=%.5lf;x2=%.5lf",x2,x1);
25 }
26 return 0;
27 }
成功的过了这个题
过了之后,我便写一写解析,结果发现。。。。。
我的做法这么强(qian)大(da)得嘛?!
#include <iostream>
#include <cstdio>
#include <cmath>
#define precision_1 1e-12//定精度,用于判断浮点数大小
#define precision_2 1e-6//定精度,用于判断浮点数大小
using namespace std;
int main()
{
double a,b,c,x1,x2,delta;
cin>>a>>b>>c;
delta=b*b-4*a*c;//判别式
if(delta<0&&fabs(delta)>precision_1)//当判别式小于给定的精度范围内,即delta<0时,无实根
printf("No answer!\n");
else if(fabs(delta)<precision_1)//当判别式小于给定的精度但>0,此时delta≈0
{
x1=-b/(2*a);
if(fabs(x1)<precision_2) //超出所给的最小范围,此时,视为delta=0,直接输出0
printf("x1=x2=%.5lf\n",0);
else//未超出所给范围时,结果仍在小数点后5位有效数字以内,输出结果
printf("x1=x2=%.5lf\n",x1);
}
else//delta>0时
{
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
if(fabs(x1)<precision_2) x1=fabs(x1);//小于所给的最高精度,编译系统视为-0,求绝对值
if(fabs(x2)<precision_2) x2=fabs(x2);//小于所给的最高精度,编译系统视为-0,求绝对值
if(x1<x2)//x1、x2中小的数在前输出
printf("x1=%.5lf;x2=%.5lf",x1,x2);
else
printf("x1=%.5lf;x2=%.5lf",x2,x1);
}
return 0;}
不说了,看着都自闭......
一定要多预习,尤其是像我一样的蒟蒻。
到这就完了
别往下看了
真没了。。。
来源:https://www.cnblogs.com/Kyriech-Francis/p/12209165.html