1. 程式人生 > >c語言求一元二次方程的根

c語言求一元二次方程的根

對於一個一元二次方程進行如下分析:

                       ax^2+bx+c=0

分析:


1.  當a = 0:

            結論:不是一個一元二次方程;

2.  當a!=0:

            結論:(1)當b^2-4ac=0,方程有兩個相等的實根,x1=x2=-b/2a;

                       (2)當b^2-4ac>0,方程有兩個不相等的實根,x1=(-b+√(b^2-4ac))/(2a), x2=(-b-√(b^2-4ac))/(2a);

                       (3)當b^2- 4ac<0,方程有一組共軛復根;

3.注意事項:

                       (1)對於方程的根在很多情況下是小數,因此在定義變數時不能用整型,可以用浮點型或者double型;

                       (2).對於變數與零值進行比較時,不能講浮點變數用“==”或“!=”與任何數字進行比較,可以使用#define 定義一個  精度,在使用時只要在給定的範圍內,將其近似為0;

                       (3).使用函式sqrt必須引用標頭檔案#include<math.h>。

寫下c語言程式程式碼如下:

#include <stdio.h>
#include <math.h>
#define EXP 0.00000001
int main()
{
	double a = 0.0;
	double b = 0.0;
	double c = 0.0;
	scanf_s("%lf%lf%lf",&a,&b,&c);
	if ((a>=-EXP)&&(a<=EXP))
	{
		printf("不是一元二次方程\n");
	}
	else
	{
	    double disc = b*b-4*a*c;

	    if(( disc >= -EXP)&&( disc <= EXP))
	    {
		printf("x = %lf\n",-b/(2*a));
	    }
	    else if ( disc > 0.0)
	    {
		printf("x1 = x2 %lf, x2 = %lf\n",
				(-b+sqrt(disc))/(2*a),
				(-b-sqrt(disc))/(2*a));
	    }
	    else
	    {
		printf("有兩個共軛的復根\n");
	    }
	}

	return 0;
}