2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根

1.求ax^2+bx+c=0方程的根。a,b,c由键盘输入,设b^2-4ac>0.

设计思想:

此想法是考虑a!=0且有两个不等的方程跟(因为题目中告诉了 设b^2-4ac>0 )。

具体思想如下图片:


代码:

#include

#include 

int main()

{

  double a,b,c,disc,x1,x2,p,q;

  scanf("%lf%lf%lf",&a,&b,&c);

  disc=b*b-4*a*c;

  p=-b/(2.0*a);

  q=sqrt(disc)/(2.0*a);

  x1=p+q;x2=p-q;

printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);

return 0;

}

结果展示:


2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根_第1张图片

拓展:

1.全方位考虑-在a!=0的情况下考虑,有两个不相等的根,有两个相等的根,有共轭根。

则此时出现了判断。

代码:

#include

  #include

  int main ()

{

      double a,b,c,d,p;

    printf("请输入a,b,c 的值:");

      scanf("%lf%lf%lf",&a,&b,&c);

      if(a==0)

      printf("不是二次方程");

    else

    {

        d=b*b-4*a*c;


      if(d==0)

        {

            printf("有两个相等的根\nx=%7.2lf\n",-b/(2*a));

        }

        if (d>0)

            {

                printf("有两个不相等的根\nX1=%7.2lf\nX2=%7.2lf\n",(-b+sqrt(d))/(2*a),(-b-sqrt(d))/(2*a));

            }

            if(d<0)

                {

                    p=sqrt(-d/(2*a));

                    printf("有两个共轭复根\nX1=%7.2lfi-%7.2lf\nX2=%7.2lfi-%7.2lf\n",p,b/2,-p,b/2);

                }

    }        return 0;

}

结果展示:

  1.两个不相等的根


2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根_第2张图片

2.有两个相等的根


2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根_第3张图片

3.有共轭复根


2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根_第4张图片

3.不是二次方程


2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根_第5张图片

2.全方位考虑2-在a=0和a!=0的情况下(有点复杂)


思路:

化方程为一般式:

分类讨论根的情况(a、b、c)

2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根_第6张图片

代码:

#include

#include

int main(){

float a,b,c;

printf("Pleaser enter a、b、c:");

scanf("%f %f %f",&a,&b,&c);

float x1,x2,x,real,image;

if(a==0){

if(b==0){

if(c==0){//a=0,b=0,c=0;

printf("方程的解为任意常数;\n");

}

else{//a=0,b=0,c!=0;

printf("方程无解;\n");

}

}

else{//a=0,b!=0;

x=-(c/b);

printf("原方程的的解为:x=%8.4f\n",x);

}

}

else{//a!=0

float disc=b*b-4*a*c;

if(fabs(disc)<1e-6){//a!=0;b^2-4ac=0;

x=-(b/(2*a));

printf("原方程的的解为:x=%8.4f\n",x);

}else if(disc>1e-6){//a!=0;b^2-4ac>0;

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf("原方程的的解为:x1=%8.4f ; x2=%8.4f \n",x1,x2);

}else{//a!=0;b^2-4ac>0;

real=-b/(2*a); //实部

image=sqrt(-disc)/(2*a); //虚部

printf("原方程的的解为:x1=%8.4f+%8.4fi ; x2=%8.4f+%8.4fi \n",real,image,real,image);

}

}

}

结果展示:


2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根_第7张图片

程序说明:

由于disc(即b2−4ac b^2-4acb

2

−4ac)是实数,而实数在计算和存储是很会有一些微小的误差,因此不能直接进行如下判断:“if(disc==0)”

解决办法:判别disc的绝对值(即:fabs(disc))是否小于一个很小的值(例如:10−6 10^-610

6,计算机语言为 1e-6 或 1E-6),如果小于此数,就认为disc等于0;

参考文章:

https://blog.csdn.net/neusoft06/article/details/78771492

https://blog.csdn.net/Yangjiankang_0929/article/details/44627349

你可能感兴趣的:(2019-03-09 C语言学习12-求ax^2+bx+c=0方程的根)