解一元二次方程的根:
一元二次方程:ax*x+bx+c=0
基本思路:
1、a=0时,此方程不是一元二次方程,而是bx+c=0,此时方程的解为x=-c/b;
2、当a≠0时,此方程才是一元二次方程,同时会出现以下情况:
(1)b*b-4*a*c=0,此时方程有两个相等的实根,即x1=x2=-b/2a;
(2)b*b-4*a*c>0,此时方程有两个不相等的实根,x1= ,x2=
(3)b*b-4*a*c<0,此方程无实根。
编程思路:
头文件选择:
#include <stdio.h>:标准输入输出代码
#include <math.h>:数学函数库,一些数学计算的公式具体实现,比如平方,开方等。Sqrt()--平方根计算
定义变量:void Fun(double a,double b,double c)
{ double x1;
double x2;
double d = b*b - 4*a*c;
因为方程的根在大多情况下是小数,所以此时定义变量用浮点型或者double型。
使用宏定义:#define EPS 0.000001
因为定义的变量为浮点型,而浮点型不能用来作比较,故而通过定义一个精度,使用时在给定范围内,可将其结果近似为0,从而完成变量与零值的比较;
算法思路:
代码:
#include <stdio.h>
#include <math.h>
#define EPS 0.000001
void Fun(double a,double b,double c)
{
double x1;
double x2;
double d = b*b - 4*a*c;
if(-EPS<=a && a<EPS)//a==0
{
x1 = x2 = -c/b;
printf("x1=%f,x2=%f\n",x1,x2);
}
else //a != 0
{
if(-EPS<=d && d<=EPS)//d==0
{
x1=x2=-b/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else
{
if(d > EPS)
{
x1 = (-b+sqrt(d))/(2*a);
x2 = (-b-sqrt(d))/(2*a);
printf("x1=%f,x2=%f\n",x1,x2);
}
else //d<0
{
printf("无实根\n");
}
}
}
}
int main()
{
Fun(0,1,2);
Fun(1,2,1);
Fun(1,4,2);
Fun(1,1,1);
return 0;
}