一元二次方程c++题目

描述
利用公式x1=(-b+sqrt(b*b-4*a*c))/(2*a),x2=(-b-sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx +c =0的根,其中a不等于0。
输入
输入一行,包含三个浮点数a,b,c(它们之间以一个空格分开),分别表示方程ax?+ bx +c=0的系数。

输出
输出一行,表示方程的解。
若b2 =4*a*c,则两个实根相等,,则输出形式为:x1=x2=.…。若b2 >4*a*c,则两个实根不等,则输出形式为:x1=...;x2 = .,其中x1>x2.若b2 <4*a*c,则有两个虚根,则输出:x1=实部+虛部i;x2=实部-虚部i,即x1的虚部系数大于等于x2的虚部系数,实部为0时不可省略。实部=-b/(2*a),虛部= sqrt(4*a*c-b*b)/(2*a)
所有实数部分要求精确到小数点后5位,数字、符导之间没有空格,
样例输入


样例输入1
1.0 2.0 8.0
样例输入2
1 0 1


样例输出


样例输出1
x1=-1.00000+2.64575i;x2=-1.00000-2.64575i
样例输出2
x1=0.00000+1.00000i;x2=0.00000-1.00000i

答案: 

#include<iostream>
 #include<cmath>
 #include<iomanip>
 #include <cstdio>
 using namespace std;
 int main()
 {
     double a,b,c;
     cin>>a>>b>>c;
     double d=b*b-4*a*c;
     double e=sqrt(d);
     double x1=(-b+e)/(2*a);
     double x2=(-b-e)/(2*a);
    if(d==0)
     {
         cout<<setprecision(5)<<fixed<<"x1=x2="<<x1;
     }
     else if (d>0)
     {
         if (a>0)
         {
             cout << setprecision(5) << fixed << "x1=" << x1 << ";" << "x2=" << x2;
         }
         else
         {
             cout << setprecision(5) << fixed << "x2=" << x2 << ";" << "x1=" << x1;
         }
     }
     else
     {
         double m, n;
         double esp = pow(10, -7);
        m = -b / (2 * a) + esp;
         n = sqrt(-d) / (2 * a);         
         printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n", m, n, m, n);
         /*e = sqrt(-d);
         double x3 = -b / 2.0 / a;
         double x4 = e / 2.0 / a;
         if (b==0)
         {
             x3 = 0;
         }
         if (a>0)
         {
             cout << setprecision(5) << fixed << "x1=" << x3 << "+" << x4 << "i" << ";" << "x2=" << x3 << "-" << x4 << "i" << endl;
       } 
         else        
         {
            cout<<setprecision(5)<< fixed<<"x1="<<x3<<"+"<<-x4<<"i"<<";"<<"x2="<<x3<<x4<<"i"<<endl;
         }*/
 
         
     }
 
     return 0;
 }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值