少吃鱿鱼 2022-02-22 15:25 采纳率: 100%
浏览 89
已结题

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的时候,它就不进入子函数,直接结束了,想问问大家是为什么不进入子函数

  • 写回答

3条回答 默认 最新

  • 关注

    (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;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月2日
  • 已采纳回答 2月22日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题