麻烦帮忙看看下面三个程序的区别~~谢谢啦
下列是用于求一元二次方程ax2+bx+c=0的两个实根的三个c程序,分别采用不同的方法或使用不同的精度。其中a=1.0,b=-(1012+1),c=1012。
分别输入并运行这三个程序,并检验结构是否正确,分析原因。
(1)利用求根公式
程序如下:
#include <math.h>
#include <stdio.h>
void main( )
{float a,b,c,p,d,x1,x2;
a=1.0;
b=-(1.0e+12+1.0);
c=1.0e+12;
p=sqrt(b*b-4.0*a*c);
d=2.0*a;
x1=(-b+p)/d;
x2=(-b-p)/d;
printf(“x1=%e\nx2=%e\n”,x1,x2);
}
(2)利用求根公式计算一个实根,然后根据韦达定理计算另一个实根
程序如下:
#include <math.h>
#include <stdio.h>
void main( )
{float a,b,c,p,d,x1,x2;
a=1.0;
b=-(1.0e+12+1.0);
c=1.0e+12;
p=sqrt(b*b-4.0*a*c);
d=fabs(b)/b;
x1=(-b-d*p)/(2.0*a);
x2=c/(a*x1);
printf(“x1=%e\nx2=%e\n”,x1,x2);
}
(3)与(1)一样,利用求根公式,但程序中的变量均使用双精度类型。
#include <math.h>
#include <stdio.h>
void main( )
{double a,b,c,p,d,x1,x2;
a=1.0;b=-(1.0e+12+1.0);c=1.0e+12;
p=sqrt(b*b-4.0*a*c);
d=2.0*a;
x1=(-b+p)/d;
x2=(-b-p)/d;
printf(“x1=%e\nx2=%e\n”,x1,x2);
}