【C语言】求一个一元二次方程的根

    技术2022-07-14  71

    一元二次方程: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; }

    运行

    Processed: 0.009, SQL: 9