作者cxzdsa5566 (cxzdsa5566)
看板Programming
标题Re: [问题] 小新手程式写不出来,麻烦高手帮忙。
时间Wed Oct 6 22:13:11 2010
※ 引述《cxzdsa5566 (cxzdsa5566)》之铭言:
: http://www.mediafire.com/?8v9hk6lq19hlwsf
: 档案
: 这是我写到一半的
: 不管我怎麽写,
: C++都会跳到math.h (C++自己新开的分页)
: 我自己也找不出啥错误,
: C++跟我讲的错误我又看不出来哪边错了,
: 可以麻烦高手吗?
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double a,b,c,z1,z2,z3,z2i,z3i,sita;
cout<<" This program finds the roots of x^3+a x^2 + b x + c =0 "<<endl;
cout<<" Enter the coefficient a: "; cin>>a;
cout<<" Enter the coefficient b: "; cin>>b;
cout<<" Enter the constant c: "; cin>>c;
double Q=(3*b*b-a*a)/9;
double R=(9*a*b-27*c-2*a*a*a)/54;
double D=Q*Q*Q+R*R*R;
if(D=0) {
z1 = -a/3+2*pow(R,1.0/3.0);
z2 = z3=-a/3+2*sqrt(-Q);
z2i=z3i=0;
}
if (D>0) {
z1 = -a/3+pow((R+sqrt(D)),1.0/3.0)+pow((R-sqrt(D)),1.0/3.0);
z2 = -a/3-(pow(R+sqrt(D),1.0/3.0)+pow(R-sqrt(D),1.0/3.0))/2;
z2i =(pow(R+sqrt(D),1.0/3)-pow(R-sqrt(D),1.0/3.0))*(sqrt(3)*0.5);
z3 = -a/3-(pow(R+sqrt(D),1.0/3.0)+pow(R-sqrt(D),1.0/3.0))/2;
z3i = -(pow(R+sqrt(D),1.0/3.0)-pow(R-sqrt(D),1.0/3.0))*(sqrt(3)*0.5);
}
if (D<0) {
double sita=acos(R/sqrt(-Q*Q*Q));
z1=-a/3+2*sqrt(-Q)*cos(sita/3);
z2=-a/3+2*sqrt(-Q)*cos(sita/3+2*M_PI/3);
z3=-a/3+2*sqrt(-Q)*cos(sita/3+4*M_PI/3);
z2i=z3i=0;
}
cout<<endl;
cout<<" "<<"x^3"<<a<<" x^2+ "<<b<<" x+ "<<c<<" = 0"<<endl;
cout<<" Root 1: "<<z1<<endl;
cout<<" Root 2: "<<z2<<" + "<<z2i<<"i"<<endl;
cout<<" Root 3: "<<z3<<" + "<<z3i<<"i"<<endl;
system("pause");
return 0;
}
一些很明显的错误我都改了
不过现在问题是,
我可以run,可是算出来的东西明显不是正确答案,
请问有高手可以帮忙吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.218.123
1F:推 ericinttu:输入一组简单可验算的输入值 59.117.120.133 10/06 22:15
2F:→ ericinttu:在每次得到新的运算值时,印出运算结果 59.117.120.133 10/06 22:16
3F:→ ericinttu:检查纸笔算的跟电脑算的哪边不一致 59.117.120.133 10/06 22:17
4F:→ WPC001:D=0 <---- 这行不是比较,而是指定 114.25.134.221 10/06 22:36