问题 F: C语言程序设计教程(第三版)课后习题8.2
时间限制: 1 Sec 内存限制: 128 MB
提交: 5457 解决: 1930
[提交][状态][讨论版]
题目描述
求方程ax^2+bx+c=0的根,用三个函数gz,ez和sz分别求当b^2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。(输出保留3位小数)
输入
a b c(a不等于0,b,c不同时为0)
输出
x1=? x2=?
样例输入
4 1 1
样例输出
x1=-0.125+0.484i x2=-0.125-0.484i
#include<stdio.h>
#include<math.h>
void gz(double p,double q){
printf("x1=%.3f x2=%.3f",p+q,p-q);
}
void ez(double p,double q){
printf("x1=%.3f x2=%.3f",p,p);
}
void sz(double p,double q){
double i;
i=1e-6;
printf("x1=%.3f+%.3fi x2=%.3f-%.3fi",p,q,p,q);
}
int main(void){
double a,b,c,m,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
if(a!=0){
m=pow(b,2)-4*a*c;
p=-b*1.0/(2*a);
q=sqrt(fabs(m))*1.0/(2*a);
if(m>0) gz(p,q);
else if(m==0) ez(p,q);
else sz(p,q);
}
return 0;
}
- 提几点重要的点
- 首先所有情况都需要考虑到,包括没有实数根的时候,那么就是有复数根,它就是在最后加上i
- double用%lf控制输入,可用%f控制输出
- 在除以那里必须整体加括号,否则就会变成先除前面的再乘后面的,而不是我们想要的除后面的