C语言计算一元二次方程的根(完全版)

题目(Description):
求一元二次方程ax2+bx+c=0的根。a、b、c为任意实数。
输入(Input):
任意三个系数a、b、c。
输出(Output):
x1 x2实根(保留2位小数),且要求x1>=x2。
说明:
(1)如果a为0且b为0,则输出 “Not an equation”(N大写,单词间一个空格)。
(2)如果a为0,退化一次方程,则只输出一个根的值既可以。
(3)如果a不为0,则按以下格式输出方程的根x1和x2(x1和x2之间有一个空格):
* 若x1和x2为实根,则以x1>=x2输出。
* 若方程是共轭复根,则x1=m+ni,x2=m-ni,其中n>0。
其中x1、x2、m、n均保留2位小数。
提示(Hint):
(1)求平方根使用库函数sqrt(x),并需要 #include
(2)保留2位小数使用printf("%.2f", … )
(3)输出i的方法如下:
printf("%0.2lf+%0.2lfi %0.2lf-%0.2lfi", 实部, 虚部, 实部, 虚部);
示例(Sample):
输入(Input):
1 2 3
输出(Output):
-1.00+1.41i -1.00-1.41i
说明:-1.00+1.41i -1.00-1.41i 两个根中间有一个空格

#include <stdio.h>
#include <math.h>
int main()
{
	double a,b,c,delta,x1,x2,m,n,i,j;
	scanf("%lf%lf%lf",&a,&b,&c);

	if (fabs(a) <= 1e-6){
		if (fabs(b) <= 1e-6)
			puts("Not an equation");
		else
			printf("%.2lf",-c/b);
	}
	else{
		delta=b*b - 4*a*c;
		m = -b / (2*a);
		n = sqrt(fabs(delta)) / (2*fabs(a));
		i = m + n;
		j = m - n;

		if (delta < 0)
			printf("%.2lf+%.2lfi %.2lf-%.2lfi",m,n,m,n);
		else {
 		       if (i == j)
 			    printf("%.2lf %.2lf",i,i);
  		       else {
 		               x1 = (i > j) ? i : j;
 			       x2 = (i > j) ? j : i;
 			       printf("%.2lf %.2lf", x1, x2);
  			    }
 	    }
			return 0;
}

你可能感兴趣的:(C,语言)