20:求一元二次方程的根

感想:這道題是基礎題,但是提交後發現在openjudge中只能得到一部分分數,原因就在於少了一句代碼。完整源代碼貼在下面。這句代碼在題目中有對應的一句話,所以審題很重要。

 

描述

利用公式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(它們之間以一個空格分開),分別表示方程ax2 + 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位,數字、符號之間沒有空格。

#include<cstdio> 
#include<iostream>
#include<cmath>

using namespace std;

int main()
{
	float a,b,c;
	cin>>a>>b>>c;
	float x1,x2;
	
	if(b*b==4*a*c) 
        printf("x1=x2=%.5f",(-b+sqrt(b*b-4*a*c))/(2*a));
    
	else if(b*b>4*a*c) 
        printf("x1=%.5f;x2=%.5f",(-b+sqrt(b*b-4*a*c))/(2*a),(-b-sqrt(b*b-4*a*c))/(2*a));
    
        else if(b*b<4*a*c)
	{ 
	   float x=-b/(2*a);
	   if(x==-0.00000)x=0;//openjudge中測評是wronganswer只有8分的原因就在於少了這一句
	   printf("x1=%.5f+%.5fi;x2=%.5f-%.5fi",x,sqrt(4*a*c-b*b)/(2*a),x,sqrt(4*a*c-b*b)/(2*a));
        }

        return 0;
}

 

發佈了25 篇原創文章 · 獲贊 17 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章