1. 程式人生 > >1079: C語言程式設計教程(第三版)課後習題8.2---求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。【兩種方法】

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<stdio.h>
#include<math.h>

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<stdio.h>
#include<math.h>

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);
}