1079: C语言程序设计教程(第三版)课后习题8.2---求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。【两种方法】

题目描述

求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。

输入

a b c

输出

x1=? x2=?

样例输入

4 1 1

样例输出

x1=-0.125+0.484i x2=-0.125-0.484i

提示

 

来源

第一种方法:由于oj采用黑箱测试,所以我们可以不用定义函数。

#include
#include

int main()
{
    double a,b,c,d,x1,x2,dr,xr,xv;//dr代表d的根,xr代表根的实数部分,xv代表根的虚数部分。
    scanf("%lf%lf%lf",&a,&b,&c);
    d=b*b-4*a*c;
    if(d>=0)
        dr=sqrt(d);
    else
        dr=sqrt(-d);
    if(d==0)
    {
        x1=x2=-b/(2*a);
        printf("x1=%.3lf x2=%.3lf",x1,x2);
    }
    else if(d>0)
    {
        x1=(-b+dr)/(2*a);
        x2=(-b-dr)/(2*a);
        printf("x1=%.3lf x2=%.3lf",x1,x2);
    }
    else
    {
        xr=-b/(2*a);
        xv=dr/(2*a);
        printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi",xr,xv,xr,xv);
    }
}

 

第二种方法:按照题目要求,定义三个函数。

#include
#include

double a,b,c,d,x1,x2,dr,xr,xv;//宏定义变量,在所有的方法中均能使用。dr代表d的根,xr代表根的实数部分,xv代表根的虚数部分。

int main()
{
    scanf("%lf%lf%lf",&a,&b,&c);
    d=b*b-4*a*c;
    double delta_is_greater_than_zero(double d);
    double delta_is_less_than_zero(double d);
    double delta_is_equal_to_zero(double d);
    if(d>0)
    {
        delta_is_greater_than_zero(d);
    }
    else if(d<0)
    {
        delta_is_less_than_zero(d);
    }
    else
    {
        delta_is_equal_to_zero(d);
    }
}
double delta_is_greater_than_zero(double d)
{
    dr=sqrt(d);
    x1=(-b+dr)/(2*a);
    x2=(-b-dr)/(2*a);
    printf("x1=%.3lf x2=%.3lf",x1,x2);
}
double delta_is_less_than_zero(double d)
{
    d=-d;
    dr=sqrt(d);
    xr=-b/(2*a);
    xv=dr/(2*a);
    printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi",xr,xv,xr,xv);
}
double delta_is_equal_to_zero(double d)
{
    dr=sqrt(d);
    x2=x1=(-b+dr)/(2*a);
    printf("x1=%.3lf x2=%.3lf",x1,x2);
}

 

你可能感兴趣的:(算法练习)