1. 程式人生 > >C語言計算一元二次方程的根(完全版)

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 <math.h>
(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; }