1079: C語言程式設計教程(第三版)課後習題8.2---求方程 的根,用三個函式分別求當b^2-4ac大於0、等於0、和小於0時的根,並輸出結果。從主函式輸入a、b、c的值。【兩種方法】
阿新 • • 發佈:2019-02-02
題目描述
求方程 的根,用三個函式分別求當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); }