求一元二次方程的根【double型的0输出%.2lf为-0.00】

本文提供了一个使用 C++ 编写的程序来求解二次方程的实数解和复数解。程序首先读取方程的系数,然后根据判别式的值判断方程的根的类型,并输出相应的解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define eps 1e-6

int main() {
    double a,b,c;
    cin>>a>>b>>c;

    if(a==0 && b==0) {
        if(c==0) {
            cout<<"Zero Equation"<<endl;
            return 0;
        }
        cout<<"Not An Equation"<<endl;
        return 0;
    }
    if( fabs(b*b-4*a*c)<=eps) {
        double ans=-1*b+sqrt(b*b-4*a*c);
        ans/=2.0*a;
        printf("%.2lf\n",ans);
        return 0;
    }
    if(b*b-4*a*c>eps) {
        if(a<=eps) {
            printf("%.2lf\n",-c/b);
            return 0;
        }
        double ans=-1*b+sqrt(b*b-4*a*c);
        ans/=2.0*a;
        double ans2=-1*b-sqrt(b*b-4*a*c);
        ans2/=2.0*a;
        if(ans-ans2>eps) {
            printf("%.2lf\n",ans);
            printf("%.2lf\n",ans2);
            return 0;
        }
        printf("%.2lf\n",ans2);
        printf("%.2lf\n",ans);
        return 0;
    }
    double a1;
    double a2;
    c=(-1)*c/a+(b/a*0.5)*(b/a*0.5);
    a1=(-1)*0.5*b/a;
    c=fabs(c);
    a2=sqrt(c);
    if(a1==0)
    {
        printf("0.00+%.2lfi\n",a1,a2);
        printf("0.00-%.2lfi\n",a1,a2);
        return 0;
    }
    printf("%.2lf+%.2lfi\n",a1,a2);
    printf("%.2lf-%.2lfi\n",a1,a2);
    return 0;
}
### C语言使用SQRT函数一元二次方程的实现方法 以下是一个完整的C语言程序,用于一元二次方程 \( ax^2 + bx + c = 0 \) 的。程序中使用了 `sqrt` 函数来计算平方,并且考虑了所有可能的情况,包括实数和复数。 ```c #include <stdio.h> #include <math.h> int main() { double a, b, c; double discriminant, root1, root2, realPart, imaginaryPart; printf("请输入一元二次方程的系数 a, b, c:\n"); scanf("%lf %lf %lf", &a, &b, &c); if (a == 0) { if (b == 0) { if (c == 0) { printf("方程有无穷多解。\n"); // 当 a=0, b=0, c=0 时[^1] } else { printf("方程无解。\n"); // 当 a=0, b=0, c!=0 时[^1] } } else { root1 = -c / b; printf("方程退化为一元一次方程,解为:x = %.2lf\n", root1); // 当 a=0, b!=0 时[^1] } } else { discriminant = b * b - 4 * a * c; // 计算判别式 Δ if (discriminant > 0) { // 判别式大于零时 root1 = (-b + sqrt(discriminant)) / (2 * a); root2 = (-b - sqrt(discriminant)) / (2 * a); printf("方程有两个不相等的实数:x1 = %.2lf, x2 = %.2lf\n", root1, root2); // 实数情况[^1] } else if (discriminant == 0) { // 判别式等于零时 root1 = -b / (2 * a); printf("方程有两个相等的实数:x1 = x2 = %.2lf\n", root1); // 相等实数情况 } else { // 判别式小于零时 realPart = -b / (2 * a); imaginaryPart = sqrt(-discriminant) / (2 * a); printf("方程有两个复数:x1 = %.2lf+%.2lfi, x2 = %.2lf-%.2lfi\n", realPart, imaginaryPart, realPart, imaginaryPart); // 复数情况 } } return 0; } ``` #### 程序逻辑说明 - **输入验证**:程序首先检查 \( a \) 是否为零。如果 \( a = 0 \),则需要进一步判断是否是一元一次方程或无意义的方程。 - **判别式计算**:对于 \( a \neq 0 \) 的情况,计算判别式 \( \Delta = b^2 - 4ac \)[^1]。 - **的分类**: - 如果 \( \Delta > 0 \),方程有两个不相等的实数- 如果 \( \Delta = 0 \),方程有两个相等的实数- 如果 \( \Delta < 0 \),方程有两个复数- **输出结果**:据不同的情况,程序会输出对应的值或提示信息[^1]。 #### 示例运行 **输入**: ``` 请输入一元二次方程的系数 a, b, c: 1 -3 2 ``` **输出**: ``` 方程有两个不相等的实数:x1 = 2.00, x2 = 1.00 ``` **输入**: ``` 请输入一元二次方程的系数 a, b, c: 1 2 1 ``` **输出**: ``` 方程有两个相等的实数:x1 = x2 = -1.00 ``` **输入**: ``` 请输入一元二次方程的系数 a, b, c: 1 0 1 ``` **输出**: ``` 方程有两个复数:x1 = 0.00+1.00i, x2 = 0.00-1.00i ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值