c语言运行不进入子函数

求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。这是题目,以及要运行出的结果截图

img

#include<stdio.h>
#include<math.h>
double x1,x2,disc,p,q;
void qest(int a,int b,int c)
{
    a=(double)a;
    b=(double)b;
    c=(double)c;
    disc=b*b-4*a*c;
    if(disc>0)
    {
        x1=(-b+sqrt(disc))/(2*a);
        x2=(-b-sqrt(disc))/(2*a);
        printf("x1=%lf \nx2=%lf",x1,x2);
    }
    else if(disc=0)
    {
        x1=(-b)/(2*a);
        x2=(-b)/(2*a);
        printf("x1=%lf \nx2=%lf",x1,x2);
    }
    else if(disc<0)
    {
        p=-b/(2*a);
         q=sqrt(-disc)/(2*a);
         x1=p+q;
        x2=p-q;
        printf("x1=%lf \nx2=%lf",x1,x2);
    }    
} 
int main()
{
    int a,b,c;
    printf("please input a,b,c:<a*x*x+b*x+c=0>\n");
    printf("a=");
    scanf("%d",&a);
    printf("b=");
    scanf("%d",&b);
    printf("c=");
    scanf("%d",&c);
    printf("fang cheng wei:\n");
    if(a!=0 || b!=0 )
    {
        printf("%d*x*x+%d*x+%d=0",a,b,c);
        qest(a,b,c);
    }
    return 0;
}

运行出来的结果是这样

img

到主函数的qest的时候,它就不进入子函数,直接结束了,想问问大家是为什么不进入子函数

(1)a=(double)a;这种写法没有任何用处啊,a是int类型,最后赋值的时候保留的还是整数,
把disc=b*b-4*a*c;这里改成 disc=b*b-4.0*a*c; 就可以了
(2)else if(disc=0) 这里你漏写了一个=,应该是 else if(disc==0)

代码修改如下;

#include<stdio.h>
#include<math.h>
double x1,x2,disc,p,q;
void qest(int a,int b,int c)
{
    /*a=(double)a;
    b=(double)b;
    c=(double)c;*/
    disc=b*b-4.0*a*c;
    if(disc>0)
    {
        x1=(-b+sqrt(disc))/(2*a);
        x2=(-b-sqrt(disc))/(2*a);
        printf("x1=%lf \nx2=%lf",x1,x2);
    }
    else if(disc==0) //这里是==
    {
        x1=(-b)/(2*a);
        x2=(-b)/(2*a);
        printf("x1=%lf \nx2=%lf",x1,x2);
    }
    else if(disc<0)
    {
        p=-b/(2*a);
        q=sqrt(-disc)/(2*a);
        x1=p+q;
        x2=p-q;
        printf("x1=%lf \nx2=%lf",x1,x2);
    }    
} 
int main()
{
    int a,b,c;
    printf("please input a,b,c:<a*x*x+b*x+c=0>\n");
    printf("a=");
    scanf("%d",&a);
    printf("b=");
    scanf("%d",&b);
    printf("c=");
    scanf("%d",&c);
    printf("fang cheng wei:\n");
    if(a!=0 || b!=0 )
    {
        printf("%d*x*x+%d*x+%d=0",a,b,c);
        qest(a,b,c);
    }
    return 0;
}


你怎么判断qest函数没执行的呢?
a=(double)a;
b=(double)b;
c=(double)c;
这三行毫无意义啊,你应该再定义三个double变量,否则a,b,c还是整型啊
主要问题是16行
else if(disc=0)
改为
else if(disc==0)
disc=0是赋值啊,应该用==进行判断
由于这行的错误,导致你qest函数的if和 else条件全部没有满足,所以没有执行有效代码块就结束啦

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632