牛客网BC-73 计算一元二次方程(难题易错点详解)

题目如下图(想要答案的直接看最后代码)

---------------------------------------------------------------------------------------------------------------------------------

                                   题目讲解(思路)

---------------------------------------------------------------------------------------------------------------------------------

首先,我们需要输入a,b,c三个值,再判断a是否等于0,如果等于0则输出 Not quadratic equation , 如果a不等于0 则开始解一元二次方程

第二步,当a ≠ 0 时,需要判断 △ 的三种情况(=0,>0 , <0)三种情况,三种情况分别对应三个数值,全部正确输出则本题完成

根据以上情况分析,我们可以写出题目要求的模板

代码如下

#include<stdio.h>
#include<math.h>
int main()
{
    float a = 0.0f,b = 0.0f,c = 0.0f;
    while(scanf("%f%*c%f%*c%f",&a,&b,&c)!=EOF){
    //计算 △ 
    float dert = 0.0f;
    dert = b*b-4*a*c;

     //计算 △ 的平方根
    float k = sqrt(dert);

    //两个一元二次方程的值x1,x2
    float x1 = 0.0f,x2 = 0.0f;
    
    if(a == 0){
        printf("Not quadratic equation\n");
    }
    if(a!=0){
        if(dert == 0){
            
        }
        if(dert > 0){
           
        }
        if(dert < 0){
           
        }
    }
    }
}

当 △ = 0 时,x1 = x2 = -b/2a ,用代码写就是 -b/(2.0*a)

注意:这里的2*a一定要用小括号括起来,否则代码实现的是 -b / 2.0,得出的结果乘了一个a

当 △ > 0 时,只需要按照解一元二次方程的求根公式正常求值就可以

注意:在用代码套公式时依然要注意小括号的使用,否则运算结果会随着代码的运算顺序出错(与△ = 0 时的原理一样)

△ > 0 代码如下

if (dert > 0) {
                x1 = (-b - k) / 2.0 / a;
                x2 = (-b + k) / 2.0 / a;
                printf("x1=%.2f;x2=%.2f\n", x1, x2);
            }

当 △ < 0 时,根据题目要求,需要求出实部和虚部(题目给公式了)

但是题目需要带上虚数i,这里只需要在输出时带上一个i就可以了

△ < 0 代码如下

if (dert < 0) {
                float shi = -b / 2.0 / a;
                float xu = sqrt(-dert) / 2.0 / a;
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n", shi, xu, shi, xu);
            }

---------------------------------------------------------------------------------------------------------------------------------

                                        总结代码

---------------------------------------------------------------------------------------------------------------------------------

#include<stdio.h>
#include<math.h>
int main() {
    float a = 0.0f, b = 0.0f, c = 0.0f;
    while (scanf("%f%*c%f%*c%f", &a, &b, &c) != EOF) {
        //计算 △
        float dert = 0.0f;
        dert = b * b - 4 * a * c;

        //计算 △ 的平方根
        float k = sqrt(dert);

        //两个一元二次方程的值x1,x2
        float x1 = 0.0f, x2 = 0.0f;

        if (a == 0) {
            printf("Not quadratic equation\n");
        }
        if (a != 0) {
            if (dert == 0) {
                //这里 b == 0是根据题目需求添加的
                if (b == 0) {
                    printf("x1=x2=0.00\n");
                } else {
                    printf("x1=x2=%.2f\n", -b / (2.0 * a));
                    //易错写法printf("x1=x2=%.2f\n",-b/2.0*a)
                }
            }
            if (dert > 0) {
                x1 = (-b - k) / 2.0 / a;    
                //  一定要注意小括号!!!
                x2 = (-b + k) / 2.0 / a;
                printf("x1=%.2f;x2=%.2f\n", x1, x2);
            }
            if (dert < 0) {
                float shi = -b / 2.0 / a;
                float xu = sqrt(-dert) / 2.0 / a;
                //注意i的位置
                printf("x1=%.2f-%.2fi;x2=%.2f+%.2fi\n", shi, xu, shi, xu);
            }
        }
    }
}

创作不易,点点关注,感谢支持!!!

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值