羽墨志
记录一切开心与不开心目录
⊙一元二次方程
⊙判别式
⊙求根公式
⊙代码实现
⊙运行结果
前两天在《一元二次方程实数根的求解》一文中给出了一元二次方程在实数范围内的求解方法,换言之,方程在复数范围内的求解方法还未给出,今天就来填补一下前两天留下的坑吧。毕竟出来混迟早是要还的!
1
一元二次方程
百度百科
只含有一个未知数(一元)并且未知数项的最高次数都是2(两次)的整式方程叫作一元二次方程。一元二次方程经过整理都可化成一般形式ax²+bx+c=0(a≠0)。其中,ax²叫作二次项,a是二次项系数;bx叫作一次项,b是一次项系数;c叫作常数项。
——再复习一下概念
2
判别式
判别式还是那个熟悉的判别式:
①当△>0时,方程有两个不相等的实数根;
②当△=0时,方程有两个相等的实数根;
③当△<0时,方程无实数根,但有2个共轭复根。
(其中,△=b²-4ac,a、b、c分别是一元二次方程的二次项系数、一次项系数以及常数项。)
3
求根公式
△=b²-4ac<0时,一元二次方程稍微有了点变化:
在△=b²-4ac<0时,将a、b、c的值带入求根公式:
就能计算得到一元二次方程在复数范围内的解。
4
代码实现/*** @file : * @author : Kevin* @version : 1.1.0.* @since : 2019年7月23日18:20:17* @description : 求解一元二次方程*/#include #include #include /*** @function : main* @author : Kevin* @version : 1.1.0* @since : 2019年7月19日21:35:50* @description : main函数* @parameter : None* @return : None*/void main(int argc, char * argv[]){double a=0.0, b=0.0, c=0.0; //方程系数double delta = 0.0; //判别式double x1=0.0, x2=0.0; //方程的实根double real=0.0; //实部double imag=0.0; //虚部printf("Input the coefficient of equation:a,b,c\n");scanf("%lf,%lf,%lf",&a,&b,&c);fflush(stdin); //清空输入流缓冲区中的内容if(a != 0){delta = pow(b,2)-4*a*c;//△>0,方程有两个不等实根if(delta>0){x1 = (-b+sqrt(delta))/(2.0*a);x2 = (-b-sqrt(delta))/(2.0*a);printf("△=%.2f>0, the equation has two different real roots:\n",delta);printf("x1=%.2f, x2=%.2f.\n",x1,x2);}else if(delta==0)//△=0,方程有两个相等实根{x1=x2=-b/(2*a);printf("△=%.2f=0, the equation has two equal real roots:\n",delta);printf("x1=x2 = %.2f.\n",x1);}else//△>0,方程在实数范围内无解,但有两个共轭复数根{printf("△=%.2f<0, the equation has two complex conjugate roots:\n",delta);real = -b/(2.0*a);imag = sqrt(-delta)/(2.0*a);//输出两个共轭复数根if(imag>0){printf("x1=%.2f+%.2fi, x2=%.2f-%.2fi.\n",real,imag,real,imag);}else{printf("x1=%.2f%.2fi, x2=%.2f+%.2fi.\n",real,imag,real,-imag);}}}else //a=0,一元一次方程并给出解{printf("The equation is not a binary primary equation!\n");printf("Solution of the equation is %.2f.\n",-b/c);}}
5
运行结果
时间改变了我们的样子
却在心里留下了彼此的影子
26
星期五
2019年7月
想和你重新认识一次,从你叫什么名字说起。
——新海诚《你的名字》
一日一签