求方程ax^2+bx+c=0的根,用3个函数分别求当b^2减4ac小于零大,小于零,等于零时的根。
请看下面这个代码:
#include<stdio.h>
#include<math.h>
void function_1(double a,double b,double c)
{
double i,j,x1,x2;
i=(-b)/2*a;
j=sqrt(b*b-4*a*c);
x1=i+j;
x2=i-j;
printf("x1=%lf x2=%lf\n",x1,x2);
}
void function_2()
{
printf("无实数根\n");
}
void function_3(double m,double n,double t)
{
double i,j,x1,x2;
i=(-n)/2*m;
j=sqrt(n*n-4*m*t);
x1=i+j;
x2=i-j;
printf("x1=%lf x2=%lf\n",x1,x2);
}
int main()
{
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if(b*b-4*a*c>0)
{
function_1(a,b,c);
}
else if(b*b-4*a*c<0)
{
function_2();
}
else if(b*b-4*a*c==0);
{
function_3(a,b,c);
}
return 0;
}
它的输出结果有两个x1,x2其主要原因是else if后面有个;使if无限制作用了。而正确的是:
#include<stdio.h>
#include<math.h>
void function_1(double a,double b,double c)
{
double i,j,x1,x2;
i=(-b)/2*a;
j=sqrt(b*b-4*a*c);
x1=i+j;
x2=i-j;
printf("x1=%lf x2=%lf\n",x1,x2);
}
void function_2()
{
printf("无实数根\n");
}
void function_3(double m,double n,double t)
{
double i,j,x1,x2;
i=(-n)/2*m;
j=sqrt(n*n-4*m*t);
x1=i+j;
x2=i-j;
printf("x1=%lf x2=%lf\n",x1,x2);
}
int main()
{
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if(b*b-4*a*c>0)
{
function_1(a,b,c);
}
else if(b*b-4*a*c<0)
{
function_2();
}
else if(b*b-4*a*c==0)
{
function_3(a,b,c);
}
return 0;
}
if语句的使用一定要注意,如果没有掌握好,便会用错并且找不到错误,而以上得到的才是想要的结果。