实验3-11 求一元二次方程的根
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。
#include<stdio.h>
#include<math.h>
int main(){
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);
//特定条件的判断
if(a == 0 && b == 0 && c == 0 ){
printf("Zero Equation\n");
return 0;
}
if(a == 0 && b == 0 && c != 0){
printf("Not An Equation\n");
return 0;
}
if(a == 0){
printf("%.2lf\n",-c/b);
return 0;
}
//求△
int t=pow(b,2)-(4*a*c);
if(t > 0){//两个实数根
printf("%.2lf\n",-b/(2*a)+sqrt(t)/(2*a));
printf("%.2lf\n",-b/(2*a)-sqrt(t)/(2*a));
}else if(t == 0){//单根
printf("%.2lf\n",-b/(2*a));
}else{//两个虚数根
t=-t;
//注意:0.00会在gcc下被输出为-0.00,需要做特殊处理,输出正确的0.00。故先编号
if(b == 0){
b=-b;
}
printf("%.2lf+%.2lfi\n",-b/(2*a),sqrt(t)/(2*a));
printf("%.2lf-%.2lfi\n",-b/(2*a),sqrt(t)/(2*a));
}
return 0;
}