关键 Δ < 0时函数无根但有两个共轭复根。
//task 1
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,d,n1,n2,i1,i2;
scanf("%f %f %f", &a,&b,&c);
d = b * b - 4 * a * c;
if (d < 0)
{
d = sqrt(4 * a * c - b * b);
n2 = (-b) / (2*a);
n1 = n2;
i1 = d / (2 * a);
i2 = i1;
printf("%.2f+%.2fi %.2f-%.2fi",n1,i1,n2,i2);
}
else if (d == 0)
{
n2 = (-b + sqrt(d)) / (2 * a);
n1 = n2;
printf("%.2f %.2f", n1, n2);
}
else
{
n1 = (-b + sqrt(d)) / (2 * a);
n2 = (-b - sqrt(d)) / (2 * a);
printf("%.2f %.2f", n1, n2);
}
return 0;
}
使用函数调用:
//task 2
#include<stdio.h>
#include<math.h>
void shigen(float a, float b, float q)
{
float x1, x2;
x1 = (-b + sqrt(q)) / (2 * a);
x2 = (-b - sqrt(q)) / (2 * a);
return printf("x1=%.3f x2=%.3f",x1,x2);
}
void denggen(float a, float b)
{
float x1, x2;
x1 = x2 = (-b) / (2 * a);
return printf("x1=%.3f x2=%.3f",x1,x2);
}
void xugen(float a, float b, float q)
{
q = fabs(q);
float x1, x2,i1,i2, d;
d = sqrt(q);
x2 = (-b) / (2 * a);
x1 = x2;
i2 = d / (2 * a);
i1 = i2;
return printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",x1,i1,x2,i2);
}
int main()
{
float a, b, c, q;
void shigen(float, float, float);
void denggen(float, float);
void xugen(float, float, float);
scanf("%f%f%f", &a, &b, &c);
q= b*b - 4*a*c;
if (q > 0) shigen(a, b, q);
else if (q == 0) denggen(a, b);
else xugen(a, b, q);
return 0;
}