一元二次方程的求解
题目描述
本题目要求一元二次方程ax2+bx+c=0的根,结果保留2位小数。
功能需求
输入格式:
输入在一行中给出3个实数系数a、b、c,中间用空格隔开。
输出格式:
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则按照格式"x1=大根,x2=小根"输出;
2)如果方程有两个不相等复数根,则按照格式"x1=实部+虚部i,x2=实部-虚部i"输出;
3)如果方程有相等根,则输出x1=x2=此根;
4)如果方程退化为一元一次方程,则输出"x=值”。
5)如果系数都为0,则为任意解,输出"Any Answer";
6)如果a和b为0,c不为0,则无解,输出"No Answer"。
7)结果保留两位小数。
输入样例1:
1 2 1
输出样例1:
x1=x2=-1.00
输入样例2:
3 4 5
输出样例2:
x1=-0.67+1.11i,x2=-0.67-1.11i
代码内容
#include <stdio.h>
#include <math.h>
int main()
{
float a,b,c,max,min;
float d,x1,x2,y1,y2;
scanf("%f%f%f",&a,&b,&c);
if(a!=0)
{
d=b*b-4*a*c;
if(d==0)
printf("x1=x2=%.2f",-b/(2*a));
else if(d>0)
{
x1=(-1*b+sqrt(d))/2/a;
x2=(-1*b-sqrt(d))/2/a;
if(x1>x2)
max=x1,min=x2;
else if(x1<x2)
max=x2,min=x1;
printf("x1=%.2f,x2=%.2f",max,min);
}
else
{
y1=sqrt(-d)/2/a;
y2=sqrt(-d)/2/a;
printf("x1=%.2f+%.2fi,",-b/(2*a),y1);
printf("x2=%.2f-%.2fi",-b/(2*a),y2);
}
}
else if(b!=0)
printf("x=%.2f",-c/b);
else if(c==0)
printf("Any Answer");
else
printf("No Answer");
return 0;
}