一元二次方程:ax²+bx+c=0
△=b²-4ac
△<0 无实根,得出来的解叫共轭复根
△=0 两个相等的实根
△>0 两个不等的实根
#include <stdio.h> //包含标准库的信息
#include <math.h> //<math.h> 头文件中声明了一些数学函数和宏
int main(void) //每个程序都从main函数的起点开始执行
{
double a,b,c,disc,x1,x2,realpart,imagpart; //a,b,c为一元二次方程的系数,disc为△
printf("请输入一元二次方程的三个系数:");
scanf("%lf%lf%lf",&a,&b,&c);
if (fabs(a) <= 1e-6) //误差小于10^(-6)
{
printf("不是一元二次方程\n");
}else
{
disc = b * b - 4 * a * c; //代表△=b²-4ac
/*
* 由于△是实数,而实数在计算和存储时存在误差,因此不能直接用disc==0做判断。
* 因为这样可能会出现本来是0的量,由于误差被判别为不等于0二导致结果错误
* */
if (fabs(disc) <= 1e-6) //fabs是取绝对值。判断disc是否小于一个很小的数,1e-6=10^(-6)。若小于此数,就认为disc为0
printf("有两个相等的实根:%8.4f\n",-b/(2 * a));
else if(disc > 1e-6)
{
x1 = (-b + sqrt(disc))/(2 * a);
x2 = (-b - sqrt(disc))/(2 * a);
printf("有两个不等的实根:%8.4f and %8.4f\n",x1,x2);
} else{
realpart = -b/(2 * a); //realart是复根的实部
imagpart = sqrt(-disc)/(2 * a); //imagpart是复根的虚部,sqrt:开平方根
printf("有共轭复根:\n");
printf("%8.4f + %8.4fi\n",realpart,imagpart);//输出一个复根
printf("%8.4f - %8.4fi\n",realpart,imagpart);//输出另一个复根
}
}
return 0;
}
运行