给定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;
}
答案 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/2
到sqrt(b)
。
然后,使用double
代替int
。
答案 2 :(得分:3)
首先,将所有数据类型更改为double
,否则1/2
将提供0
而不是0.5
。
其次,使用std::sqrt
头文件中的<cmath>
。
然后回想一下公式,并正确计算它。