2011-12-18 53 views
-1

給定a = 1,b = 5和c = 6的值,x的值應該是-2和-3,但下面的程序給出了x的值爲6和-11,這是不正確的。如果有人能夠弄清楚這個程序有什麼問題,我會很感激。查找二次方程的x值的程序

#include<iostream.h> 
#include<conio.h> 

int main() 
{ 
    char reply; 
    int a,b,c,q,z; 

    do 
    { 
     cout<<"Enter the value of a: "; 
     cin>>a; 
     cout<<"\nEnter the value of b: "; 
     cin>>b; 
     cout<<"\nEnter the value of c: "; 
     cin>>c; 

     q=(-b-(b*b-4*a*c)sqrt(b))/2/a; 

     z=(-b+(b*b-4*a*c)sqrt(b))/2/a; 

     cout<<"\nThe values of x are "<<q<<" and "<<z; 
     cout<<"\nDo you want to find another values of x(y/n)?"; 
     cin>>reply; 
    } 
    while(reply=='y'); 

    getch(); 
    return 0; 
} 
+2

當你在調試器中運行你的代碼時,你學到了什麼,或者增加了額外的輸出以顯示中間計算的值? – 2011-12-18 15:33:24

+0

如果'a'爲零或非常小,會發生什麼?如果用戶輸入字符串會發生什麼? – 2011-12-18 15:35:45

+0

*你認爲'^'做了什麼? – 2011-12-18 15:36:16

回答

4

變化

q=(-b-(b^2-4*a*c)^1/2)/2*a; 
    z=(-b+(b^2-4*a*c)^1/2)/2*a; 

q=(-b-(b^2-4*a*c)^1/2)/2/a; 
    z=(-b+(b^2-4*a*c)^1/2)/2/a; 

之後你這樣做,改變b^2b*b^xor,不是權力) 和b^1/2sqrt(b)。然後用double代替int

+0

請不要用b^1/2來替換sqrt(b),並根據您的建議我現在有以下但我仍然得到相同的舊錯誤答案。 Q =( - B-(B * B-4 * A * C)SQRT(B))/ 2/A; ( - b +(b * b-4 * a * c)sqrt(b))/ 2/a; – Akaglo 2011-12-18 16:16:31

+0

...代替'(b^2-4 * a * c)^ 1/2',寫入'sqrt(b * b-4 * a * c)'。 – user1071136 2011-12-18 16:18:50

+1

萬歲!該計劃現在工作完美。我非常感謝你。 – Akaglo 2011-12-18 16:58:38

8

^符號實際上是bitwise XOR運營商,而不是權力或指數運算符,所以實際上b^2b xor 2。改爲嘗試b*b

如果您需要將基數增加到2以外的冪指數,則需要使用pow函數。

並使用sqrt函數(在<math.h>)來計算平方根,而不是將數字提高到1/2的冪。

此外,a/b*c被解析爲(a/b)*c,所以您將需要括號:

(...)/(2*a); 

還是做了第二次分裂:

(...)/2/a; 
+0

當我正在學習編程時,「^」操作符肯定會以這種非常不舒服的方式偷偷靠近我。 :) – Matej 2011-12-18 15:37:00

3

首先,將所有數據類型更改爲double,否則1/2將給0而不是0.5

二,使用std::sqrt<cmath>頭文件。

然後回憶公式,並正確計算它。