输入
输入一行,包含三个整数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。
输出
输出一行,表示方程的解。
若b2 = 4 * a * c,则两个实根相等,则输出形式为:x1=x2=...。
若b2 > 4 * a * c,则两个实根不等,则输出形式为:x1=...;x2 = ...,其中x1>x2。
若b2 < 4 * a * c,则有两个虚根,则输出:x1=实部+虚部i; x2=实部-虚部i,实部为0时不可省略。实部 = -b / (2*a), 虚部 = sqrt(4*a*c-b*b) / (2*a)
所有实数部分要求精确到小数点后5位,数字、符号之间没有空格。
#include <stdio.h>
#include <math.h>
int main()
{
int a, b, c;
float A, B;
float x1, x2;
scanf("%d %d %d", &a, &b, &c); //输入三个整数
int n;
n = pow(b, 2) - 4 * a * c; //方程有无解的判别式 直接b*b-4*a*c也可
x1 = (-b + sqrt(n)) / (2 * a);
x2 = (-b - sqrt(n)) / (2 * a);
A = -b / (2 * a); //复数的实部
B = sqrt(4 * a * c - b * b) / (2 * a); //复数的虚部
if (n > 0) //方程有两个不相等的实根
{
if (x1 > x2) //判断x1,x2大小
{
printf("x1=%.5f;x2=%.5f", x1, x2);
}
else
{
printf("x1=%.5f;x2=%.5f", x2, x1);
}
}
else if (n == 0) //方程有两个相同的实根
{
printf("x1=x2=%.5f\n", x1);
}
else //方程有两个虚数根
{
if (a > 0)
{
printf("x1=%.5f+%.5fi;x2=%.5f-%.5fi\n", A, B, A, B);
}
else
{
printf("x1=%.5f%.5fi;x2=%.5f+%.5fi\n", A, B, A, -B);
}
return 0;
}
}