解题思路:

由题目可以知道,当方程没有解的时候,需要输出虚数解,我们可以把虚部和实部分别求出来,

把 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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论