qq_41933131 2021-04-10 12:46 采纳率: 85.7%
浏览 47
已采纳

计算一元二次方程为啥不行

C语言

用dev编译

用于计算一元二次方程ax^2+bx+c=0

#include<stdio.h>
#include<math.h>
int main() {
    float a, b, c, y, Y, x, dt, dtj;
    scanf("%f %f %f", &a, &b, &c);
    dt = (b * b) - (4 * a*c);
    dtj = fabs(dt);
    if (a == b && b == c && c == 0)
        printf("Zero Equation");
    else if (a == b && b == 0&&c!=0)
        printf("Not An Equation");
    else if (dt == 0) {
        y = (-b) / (2 * a);
        printf("%d", y);
    }
    else if (dt < 0) {
        y = (-b) / (2 * a);
        x = (sqrt(dtj)) / (2 * a);
        printf("%d+%di\n%d-%di", y, x, y, x);
    }
    else {
        y = (-b) / (2*a);
        x = sqrt(dt) / (2*a);
        printf("%d\n%d", y + x,y-x);
    }
    printf("%d %d %d %d %d %d %d",a,b,c,x,y,dt,dtj);
}

测试输入:1 1 1

输出:
0+-536870912i
0--536870912i0 0 0 -536870912 0 0 0

a b c y dt dtj 值都为0,x的值很奇怪,为啥会这样?

 

  • 写回答

3条回答 默认 最新

  • 故知新 2021-04-10 18:16
    关注
    #include <stdio.h>
    #include <math.h>
    
    int main()
    
    {
    
    	long float a=0,b=0,c=0;                            
    	long float x1=0,x2=0,p=0,x=0,i=0;                       
    	scanf("%lf %lf %lf",&a,&b,&c);             
    	p=b*b-4*a*c;                         
    	if(a==0&&b==0&&c==0)
    	{
    		printf("Zero Equation");
    	}
    	else if(a==0&&b==0&&c!=0)
    	{
    		printf("Not An Equation");
    	}
    	else if(a==0&&b!=0)
    	{
    		x=(-c)/b;   
    		printf("%.2f",x);  
    	}
    	else 
    	{
    		if(p>0)
    		{
    			x1=(-b+sqrt(p))/(2*a);                          
    
    			x2=(-b-sqrt(p))/(2*a);                       
    
    			printf("%.2f\n%.2f",x1,x2);    
    		}
    		else if(p<0)
    		{
    			i=(sqrt(-p))/(2*a);
    
    			x1=(-b)/(2*a);                         
    			x2=(-b)/(2*a);                        
    
    			printf("%.2f+%.2fi\n%.2f-%.2fi",x1,i,x2,i);    
    		}
    		else if(p==0)
    
    			x=(-b+sqrt(p))/(2*a);                         
    
    		printf("%.2f",x);    
    
    	}
    }

    1.你的定义float和scanf里的lf不匹配,输入为lf,定义为f,会数据丢失,

    一种方法是类似于我这种处理,另一种是改成scanf(%f  %f %f,&a,&b,&c);

    2.声明变量时初始化以下,虽然不是必须的,但可以避免些错误,好习惯

    望采纳,谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误