float 溢出 请问哪错了

来源:百度知道 编辑:UC知道 时间:2024/06/14 15:01:18
#include <stdio.h>
#include <math.h>
int main(void)
{
double a, b, c, d;
int ri, repeat;

scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%lf%lf%lf", &a, &b, &c);
d=b*b-4*a*c;
if(a==0.0&&b==0.0&&c==0.0)
printf("1参数都为零,方程无意义!\n");
if(a==0.0&&b==0.0&&c!=0.0)
printf("2a和b为0,c不为0,方程不成立\n");
if(d==0.0)
printf("x=%0.2f\n", -c/b);
if(d>0.0){
printf("x1=%0.2f\n", -b+sqrt(d)/(2*a));
printf("x2=%0.2f\n", -b-sqrt(d)/(2*a));}
if(d<0.0){
printf("x1=%0.2f+%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));
printf("x2=%0.2f-%0.2fi\n", -b/(2*a), sqrt(-d)/(2*a));}

}
}
1楼的美男,printf没错~~
double型的设值应该没错啊!
我用的是tc,我设循环量为5,当输入0 0 0 后,程序自动弹出,报错鸟~~

楼主你的算法不全面,没有考虑到a单独为0的情况。
为防止错误运算,把第一个以后的if全改成else if
printf("x=%0.2f\n", -c/b)改成printf("x=%0.2f\n", -c/a);
-b+sqrt(d)/(2*a)改成(-b+sqrt(d))/(2*a)
至于a==0这种写法,建议全改成fabs(a)<1e-6的形式。

#include <stdio.h>
#include <math.h>
int main(void)
{
double a, b, c, d;
int ri, repeat;

scanf("%d",&repeat);
for(ri=1;ri<=repeat;ri++){
scanf("%lf%lf%lf", &a, &b, &c);
d=b*b-4*a*c;
if(fabs(a)<1e-6&&fabs(b)<1e-6&&fabs(c)<1e-6)
printf("1参数都为零,方程无意义!\n");
else if(fabs(a)<1e-6&&fabs(b)<1e-6&&fabs(c)>1e-6)
printf("2a和b为0,c不为0,方程不成立\n");
else if(fabs(a)<1e-6)
printf("x=%0.2f\n", -c/b);
else if(fabs(d)<1e-6)
printf("x=%0.2f\n", -c/a);
else if(d>0.0){
printf("x1=%0.2f\n", (-b+sqrt(d))/(2*a));
printf("x2=%0.2f\n