c語言改錯題有關求一元二次方程ax2 bx c 0的兩個實

時間 2021-09-02 16:19:24

1樓:匿名使用者

(1)的方法是錯的,因為float精度有限,最多隻能儲存7位有效數字,所以b的值在計算機中儲存的實際上是-1.0e+12,那個額外的1是沒法儲存下來的,不信的話,你可以用下面的**測試下.

#include

#include

void main( )

同理,求出的p值理論上應該是sqrt((1e12-4)*1e12),但因為4與1e12相比實在太小,在float的精度下是沒法記錄的,所以計算機中儲存的p值和-b的值是一樣的,都是-1e12,所以-b-p只能得到0.求出的x2是0,而正解應該是1.

(3)用了double,精度足夠大,可以儲存15-16位有效數字,因此b,p的值都是相對精確的,求出的解是正確的.

(2)用了個小技巧,確保了不做-b和p值的減法,而只做加法,這樣不會因為float精度不夠導致兩個理論上有較小差距的數,相減時產生差為0的情況.

2樓:匿名使用者

b=-(1012+1)表示為指數是b=-(1e3+13) c=1012表示為指數是c=1e3+12

(注:指數形式表示方式:字母e或e之前必須有數字,且e後面的指數必須為整數,如5689.65按指數輸出是5.68965e++3)

你的指數都表示錯誤,下面的就別提了,還要,你寫的**太侷限性,a,b,c應該由需要輸入,不要固定他們的值

解一元二次方程ax2+bx+c=0的解。 c語言程式設計求**

3樓:

#include "stdio.h"

#include "math.h"

main()}

4樓:匿名使用者

#include

main()

else if(temp==0)//一個相同實根//保留兩位輸出

else if(temp<0)//共軛複數,無實根else

;printf("輸入非0繼續,0退出\n");

scanf("%d",&s);

}return 0;}

5樓:匿名使用者

double deta=b*b-4*a*c;

if(deta<0)

cout<<"no real root"<

else if(data==0)

cout<<(-b)/2a<

else

cout<<(-b+sqrt(deta))/(2*a)<<";"<<(-b-sqrt(deta))/(2*a)<

跪求大神指導c語言程式題 一元二次方程的標準形式為ax2+bx+c=0(a≠0),其中a、b、c為常數。 20

6樓:付強

你覺得有人會看這種**嗎?抓狂中。。。

7樓:程式設計小菜鳥

這種**看著就。。。

8樓:匿名使用者

你確定你沒開玩笑?

for (i=0; ; i++)有錯,for(初始值;迴圈條件;表示式)你自己看一看呢!

還有就是邏輯上有問題,c語言編寫的程式沒有規定嚴謹的排列方式,但是不同的語序,程式執行的結果截然不同,o(∩_∩)o哈哈~

9樓:

if語句後面的語句要加{},自己看一下

二次函式與一元二次方程的關係,一元二次方程和二次函式關係怎麼講

假設二次函式為 f x ax 2 bx c 一元二次方程為 ax 2 bx c 0 那麼方程的解就是函式曲線與x軸的交點橫座標。如果函式曲線與x軸沒有交點,則方程沒有實根 如果只有一個交點,則方程有一個重根 如果有兩個交點,則方程有兩個實根。 張家主任 一個二次函式影象如果與x 軸有兩個交點,那麼這...

一元二次方程

1 3 x 2 2 2 x 3 x 2 2 x 2 0 3 x 2 2 x 2 0 3x 4 x 2 0 x 4 3或x 2 2 x 2x 1 0 x 2x 1 2 x 1 2 x 1 根號2 x 1 根號2 x 1 根號2 3 x 1 2x 1 x 1 2 3x x 1 2x 1 x 1 2 3x...

一元二次方程

5 x x 3 x x 解 5x 5x 3x 3x 0 2x 8x 0 x 4x 0 x x 4 0 x 0 x 4 自己是這麼做的.a b a b 2ab a b a b a b b加減根號下 b 2 4ac 2a5x 5x 3x 3x 2x 8x 0 x 4x 0 x x 4 0 x1 0,x2...