注意:题解最后答案是正确答案,最新更新是7.15日
题目更新,感谢有小伙伴提醒,以下为原答案:
注意一个点,4 0 0 测试用例,最后得到-0的原因是t==0的时候直接使用了-b,所以得到-0,正确写法应该还是规规矩矩的让他加0。-0+0 = 0
#include<math.h>
int main(){
float a = 0;
float b = 0;
float c = 0;
while(scanf("%f %f %f",&a, &b, &c)!=EOF){
if(a == 0){
printf("Not quadratic equation\n");
}else{
float t = b*b - 4*a*c;
if(t==0){
printf("x1=x2=%.2f\n",(-b+sqrt(t))/2.0/a);
}else if(t > 0){
printf("x1=%.2f;x2=%.2f\n",(-b-sqrt(t))/2.0/a,(-b+sqrt(t))/2.0/a);
}else{
printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",-b/2/a,sqrt(-t)/2/a,-b/2/a,sqrt(-t)/2/a);
}
}
}
return 0;
}
2.12更新,题目增加了测试用例,以前的有一个过不了
暴力添加判断,讨论+0和-0情况
#include<stdio.h>
#include<math.h>
int main(){
float a = 0;
float b = 0;
float c = 0;
while(scanf("%f %f %f",&a, &b, &c)!= EOF ){
if(a == 0){
printf("Not quadratic equation\n");
}else{
float t = b*b - 4*a*c;
if(t==0){
float mp = -b + sqrt(t);
if(mp == 0){
printf("x1=x2=%.2f\n",mp);
}else{
printf("x1=x2=%.2f\n",(-b+sqrt(t))/2.0/a);
}
}else if(t > 0){
printf("x1=%.2f;x2=%.2f\n",(-b-sqrt(t))/2.0/a,(-b+sqrt(t))/2.0/a);
}else{
printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",-b/2/a,sqrt(-t)/2/a,-b/2/a,sqrt(-t)/2/a);
}
}
}
return 0;
}
7.15更新 题目添加测试用例-1 5 -10,感谢小伙伴提醒
增加部分代码
#include<stdio.h>
#include<math.h>
int main(){
float a = 0;
float b = 0;
float c = 0;
while(scanf("%f %f %f",&a, &b, &c)!= EOF ){
if(a == 0){
printf("Not quadratic equation\n");
}else{
float t = b*b - 4*a*c;
if(t==0){
//两个实根相等
float mp = -b + sqrt(t);
if(mp == 0){
printf("x1=x2=%.2f\n",mp);
}else{
printf("x1=x2=%.2f\n",(-b+sqrt(t))/2.0/a);
}
}else if(t > 0){
//两个实根不等
printf("x1=%.2f;x2=%.2f\n",(-b-sqrt(t))/2.0/a,(-b+sqrt(t))/2.0/a);
}else{
//虚根
float xu = sqrt(-t)/2.0/a;
if(xu < 0) {
//如果是负数,取反作为绝对值,abs取绝对值会丢失精度
xu = -xu;
}
printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n",-b/2/a,xu,-b/2/a,xu);
}
}
}
return 0;
}