随笔 - 18  文章 - 5  trackbacks - 0
<2012年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

程序设计基础

牛们

搜索

  •  

最新评论

阅读排行榜

评论排行榜

一元二次方程求解

[问题描述]

       解一元二次方程a x2+ b x + c = 0

[输入格式]

       输入的第一行为三个实数a, b, c  (|a|,|b|,|c|<103),相邻两个数之间用一个空格分隔。

[输出格式]

       若方程有两个相同的解,则只输出个数,为所求得的解。

       若方程有两个实数解,则在同一行输出两个实数,先输出较小的,后输出较大的,中间用Tab(“\t”)分隔。

       若方程有两个虚数解,则在同一行输出两个解,前坐标轴上方的解先输出,然后再输出坐标轴下方的解,中间用Tab分隔。

[样例输入1]

1 2 3

[样例输出1]

-1+i1.41421     -1-i1.41421

[样例输入2]

1 2 1

[样例输出2]

-1

#include<iostream>
#include
<cmath>
using namespace std;
int main()
{
    
float a,b,c;
    
double    d;
    
char i;
    cin
>>a>>b>>c;
    d
=b*b-4*a*c;
    
if (d>0)
    
{
        
if (a>0)
        
{
            cout
<<(-b-sqrt(d))/(2*a)<<'\t'<<(-b+sqrt(d))/(2*a)<<endl;}

        
if (a<0)
        
{    cout<<(-b+sqrt(d))/(2*a)<<'\t'<<(-b-sqrt(d))/(2*a)<<endl;}
    }

    
if (d==0)
    
{
        cout
<<-b/(2*a)<<endl;
    }

    
if (d<0)
    
{
    
if (a>0)
    
{
        d
=-d;
        
double e=sqrt(d)/(2*a);
        cout
<<-b/(2*a)<<"+i"<<e<<'\t'<<-b/(2*a)<<"-i"<<e<<endl;
    }

    
if (a<0)
    
{ d=-d;
      
double e=-sqrt(d)/(2*a);
      cout
<<-b/(2*a)<<"+i"<<e<<'\t'<<-b/(2*a)<<"-i"<<e<<endl;
    }

    }

    
return 0;
}
posted on 2009-12-27 08:45 jyy 阅读(149) 评论(0)  编辑 收藏 引用 所属分类: OJ平台

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理