PTA 7 - 3 h0053.求一元二次方程的根
生活随笔
收集整理的這篇文章主要介紹了
PTA 7 - 3 h0053.求一元二次方程的根
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述
利用公式 x1 = (-b + sqrt(b* b-4* a* c))/(2* a), x2 = (-b - sqrt(b* b-4* a* c))/(2* a) 求一元二次方程 ax^2 + bx + c =0的根,其中a不等于0。
輸入格式
第一行是待解方程的數目 n。
其余 n 行每行含三個浮點數 a, b, c(它們之間用空格隔開),分別表示方程 ax^2 + bx + c =0 的系數。
輸出格式
輸出共有 n 行,每行是一個方程的根:
若是兩個實根,則輸出:x1=…;x2 = …
若兩個實根相等,則輸出:x1=x2=…
若是兩個虛根,則輸出:x1=實部+虛部i; x2=實部-虛部i
所有實數部分要求精確到小數點后5位,數字、符號之間沒有空格。
x1 和 x2 的順序:x1的實部 > Re的實部 || (x1的實部 == x2的實部 && x1的虛部 >= x2的虛部)
輸入樣例
3 1.0 3.0 1.0 2.0 -4.0 2.0 1.0 2.0 8.0輸出樣例
x1=-0.38197;x2=-2.61803 x1=x2=1.00000 x1=-1.00000+2.64575i;x2=-1.00000-2.64575i思路
按照題意所述一步步計算即可,先按照求根公式求出 Δ = b2 - 4 * a * c,再定義一個 x = (-b) / (2 * a).
唯一需要注意的是,這里需要特判一下,當 x = 0 時,仍然輸出 0 , 不然可能會輸出 -0.
代碼如下
#include <iostream> #include <cstdio> #include <cmath> using namespace std;int main() {int n;cin >> n;while (n--){double a, b, c;cin >> a >> b >> c;double f = b * b - 4 * a * c;double x = (-b) / (2 * a);//特判一手if (x == 0) x = 0;if (f > 0) //Δ > 0,有兩個根{double x1 = (-b + sqrt(f)) / (2*a), x2 = (-b - sqrt(f)) / (2*a);printf("x1=%.5f;x2=%.5f\n", x1, x2);}else if (f == 0) //Δ = 0,有單根{printf("x1=x2=%.5f\n", x);}else if (f < 0) //Δ < 0,有兩個復數根,其中兩個虛部一定相等{f = - f;double y = sqrt(f) / (2 * a);printf("x1=%.5f+%.5fi;x2=%.5f-%.5fi\n", x, y, x, y);}}return 0; }總結
以上是生活随笔為你收集整理的PTA 7 - 3 h0053.求一元二次方程的根的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cholesterol-PEG-Azid
- 下一篇: 期末大作业 | ToDoList网页设计