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...二次函式與一元二次方程的關係,一元二次方程和二次函式關係怎麼講
一元二次方程
一元二次方程