求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。这是题目,以及要运行出的结果截图
#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;
}
运行出来的结果是这样
到主函数的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条件全部没有满足,所以没有执行有效代码块就结束啦