一个程序,用于查找二次方程的x值

时间:2011-12-18 15:31:10

标签: c++

给定a = 1,b = 5和c = 6的值,x的值应该是-2和-3,但是下面的程序给出x的值为6和-11,它们是不正确。如果有人能弄清楚该计划有什么问题,我将不胜感激。

#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;
}

3 个答案:

答案 0 :(得分:8)

^符号实际上是bitwise XOR运算符,而不是幂或指数运算符,因此b^2实际上是b xor 2。请改为b*b

如果您需要将基数提高到2以外的幂指数,则需要使用pow函数。

使用sqrt函数(在<math.h>中)计算平方根,而不是将数字提升到1/2的幂。

此外,a/b*c被解析为(a/b)*c,因此您需要使用两个括号:

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

或做第二个部门:

   (...)/2/a;

答案 1 :(得分: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^2更改为b*b^xor,而非权限) 和b^1/2sqrt(b)

然后,使用double代替int

答案 2 :(得分:3)

首先,将所有数据类型更改为double,否则1/2将提供0而不是0.5

其次,使用std::sqrt头文件中的<cmath>

然后回想一下公式,并正确计算它。