2011-12-18 27 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>头文件。

然后回忆公式,并正确计算它。