m0_74560080 2023-03-28 17:28 采纳率: 0%
浏览 20

就剩一个1 -0.4 0.04怎么都过不了

#include<stdio.h>
#include<math.h>
int main()
{
double a,b,c,d,x,x1,x2;

scanf("%lf %lf %lf",&a,&b,&c);
d=b*b-4*a*c;

if(a==0) 
{
    if(b!=0) 
        {
            if((-c)/b!=-0)  printf("x = %g",(-c)/b);
            else if((-c)/b==-0) printf("x = 0");
            else printf("x = %g",(-c)/b);
        }
        
    else if(b==0&&c!=0) printf("无解");
    else if(b==0&&c==0) printf("无穷多解");
}
else if(a!=0)
{
   if(d>=0)
    {
        x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);
        if(x1==x2) 
        {
            x1=(-b)/(2*a);
            if(x1==0) printf("x1 = x2 = 0");
            else printf("x1 = x2 = %g",x1);
        }
         else if(x1!=x2) 
        {
             if(x1==0) printf("x1 = 0, x2 = %g",x2);
                else if(x2==0) printf("x1 = %g, x2 = 0",x1);
             else  printf("x1 = %g, x2 = %g",x1,x2);
        }
    }
   
    else if(d<0) 
    {
        x1=(-b)/(2*a);    x2=fabs(sqrt(-d)/(2*a));
        if(x1==0)
        {
            
            printf("x1 = %g+%gi, x2 = %g-%gi",0,x2,0,x2);
            
        }
        else printf("x1 = %g+%gi, x2 = %g-%gi",x1,x2,x1,x2);
        
    }
}
return 0;

}

最后那个怎么做出来都是x1=0.2, x2=0.2

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2023-03-28 17:33
    关注

    if(x1==x2)不合适,改为 if(fabs(x1-x2) < 1e-6) 浮点数最好不要直接判断相等,由于误差可能会不相等,应该计算两者差值的绝对值小于一个很小数来判定相等

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月28日

悬赏问题

  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋
  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办
  • ¥15 python用ARIMA时间预测模型预测数据出错,急!
  • ¥30 为什么后端传给前端vue的河流json数据不在地图中显示出来
  • ¥50 关于弹性波动方程求解的问题: