解题思路:
由题目可以知道,当方程没有解的时候,需要输出虚数解,我们可以把虚部和实部分别求出来,
把 x1 = (-b + sqrt(b * b - 4ac)) / (2a)
x2= (-b - sqrt(b * b - 4ac)) / (2a)
换成
x1 = (-b) / (2a) + sqrt(b * b - 4ac) / (2a)
x2 = (-b) / (2a) - sqrt(b * b - 4ac) / (2a)
这样的话 (-b) / (2a) 就可以表示实部,用 s 表示,而sqrt( -(b* b - 4ac)) / (2a)i来表示虚部,用 m 表示。
当函数没有实数解的时候,就可以用上面的方法求出虚数解
用printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi\n", s, m, s, m)就可以输出虚数解了。
注意事项:
1、虚部要注意在 sqrt 里面是要加 '-' 的
2、在 % 后面加“.3”表示输出值保留三位小数
3、输出虚数解的时候不能把 ‘i’忘记了
参考代码:
void i(int a, double s, double n) //当方程有两个解
{
double x1, x2;
x1 = s + ((sqrt(n)) / (2*a));
x2 = s - ((sqrt(n)) / (2*a));
printf("x1=%.3lf x2=%.3lf\n", x1, x2 );
}
void j(double s, double n) //当方程有一个解
{
double x1, x2;
x1 = x2 = s;
printf("x1=%.3lf x2=%.3lf", x1, x2);
}
void k(int a, double s, double n) //当方程没有实数解,怎么输出虚数解
{
double m;
m = (sqrt(-n)) / (2*a); //表示函数的虚部
printf("x1=%.3lf+%.3lfi x2=%.3lf-%.3lfi\n", s, m, s, m);
} //如何输出函数的虚数解
int main()
{
double a, b, c, s, n;
scanf("%lf%lf%lf", &a, &b, &c); //输入
s = (-b) / (2*a); //可以表示方程解的实部
n = b*b - 4*a*c; //为了后面写代码的方便,把 b*b - 4*a*c 赋给 n
if(n > 0) //判断有没有解
i(a, s, n); //调用函数
else if(n == 0)
j(s, n);
else
k(a, s, n);
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复