Openjudge-計算概論(A)-求一元二次方程的根


描述:

利用公式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。輸入第一行是待解方程的數目n。 
其余n行每行含三個浮點數a, b, c(它們之間用空格隔開),分別表示方程ax2 + 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

提示1、需要嚴格按照題目描述的順序求解x1、x2。
2、方程的根以及其它中間變量用double類型變量表示。
3、函數sqrt()在頭文件math.h中。
4、要輸出浮點數、雙精度數小數點后5位數字,可以用下面這種形式: 

printf("%.5f", num);

注意,在使用Java做此題時,可能會出現x1或x2等於-0的情形,此時,需要把負號去掉來源2005~2006醫學部計算概論期末考試

本題是“基礎編程練習1”這篇題里面最難的一個,解釋起來很麻煩,這里就不解釋了(PS:其實就是想偷懶......)

代碼如下:

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include <math.h>
 4 int main()
 5 {
 6     double a,b,c;
 7     double delta;
 8     int n;
 9     scanf("%d",&n);
10     scanf("%lf",&a);
11     while(n!=0)
12     {
13         scanf("%lf%lf",&b,&c);
14         if(a<0)
15         {
16             a=-a;b=-b;c=-c;
17         }        
18         delta=b*b-4*a*c;
19         if(delta==0)
20         {
21             printf("x1=x2=%.5lf\n",-b/2/a);
22         }
23         else if(delta>0)
24         {
25             printf("x1=%.5lf;x2=%.5lf\n",(-b+sqrt(delta))/2/a,(-b-sqrt(delta))/2/a);
26         }
27         else
28         {
29             if(b!=0)
30             {
31                 if(fabs(sqrt(-delta)/2/a-1)<=1e-6)
32                     printf("x1=%.5lf+i;x2=%l.5f-i\n",-b/2/a,-b/2/a);
33                 else
34                     printf("x1=%.5lf+%.5lfi;x2=%.5lf-%.5lfi\n",-b/2/a,sqrt(-delta)/2/a,-b/2/a,sqrt(-delta)/2/a);
35             }
36             else
37                 printf("x1=%.5lfi;x2=-%.5lfi\n",sqrt(-delta)/2/a,sqrt(-delta)/2/a);
38         }
39         printf("\n");
40         scanf("%lf",&a);
41     }
42 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM