第16行的条件改为 fabs(d)<1e-8, 因为它是对应判别式等于0的情况;
然后第20行 的条件改为 d>1e-8,因为它是对应判别式大于0的情况,此处不需要fabs求判别式的绝对值,否则会将判别式小于0的情况也在此处求解,而导致计算出现错误。
修改如下:
参考链接:
#include <iostream>
#include <cmath>
using namespace std;
int main(void){
double a,b,c,x1,x2,d,rp,ip;
cout<<"输入系数:"<<endl;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
// https://blog.csdn.net/weixin_43469047/article/details/83377701
if(fabs(a)<=1e-8){
cout<<"它不是一元二次方程"<<endl;
}else{
d = b*b-4*a*c;
//cout<<"a="<<a<<",b="<<b<<",c="<<c<<",d="<<d<<endl;
// https://blog.csdn.net/way_back/article/details/122899127
if(fabs(d)<1e-8){ //delta 等于 0
cout<<"它有相同两个实数根:"<<-b/(2*a)<<endl;
}else if(d>1e-8){ // delta 大于 0
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout<<"它有两个实数根"<<x1<<"和"<<x2<<endl;
}else{ // delta 小于 0
rp=-b/(2*a);
ip=sqrt(-d)/(2*a);
cout<<"它有两个共轭复根"<<endl;
cout<<rp<<"+"<<ip<<"i"<<endl;
cout<<rp<<"-"<<ip<<"i"<<endl;
}
}
return 0;
}
下个断点调试一下,变量输入正确没有,计算正确没有,你输出的变量要么是0要么是无穷大
判别式那里应该是== 1e-8: 相同
> 1e-8: 相异实数根
else: 共轭虚根
【以下回答由 GPT 生成】
解决方案:
首先,问题出现在代码中求解实数根的部分。由于你省略了具体的求根过程的代码,所以我无法判断错误出现在哪里。然而,根据你提供的代码和输出结果,可以看出结果是一串符号的原因是在求根时产生了非数(NaN)的结果。
为了解决这个问题,你需要修改求根的代码,确保计算出正确的实数根。以下是一个可能的修复方案:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << "请输入方程的系数:\n";
double a = 10;
double b = 10;
double c = 16;
// 计算判别式
double discriminant = (b * b) - (4 * a * c);
// 判断判别式的值来确定方程的实数根个数
if (discriminant > 0) {
// 有两个实数根
double root1 = (-b + sqrt(discriminant)) / (2 * a);
double root2 = (-b - sqrt(discriminant)) / (2 * a);
cout << "方程的实数根为:" << root1 << " 和 " << root2 << endl;
} else if (discriminant == 0) {
// 只有一个实数根
double root = -b / (2 * a);
cout << "方程的实数根为:" << root << endl;
} else {
// 没有实数根
cout << "方程没有实数根" << endl;
}
return 0;
}
这段代码通过计算判别式(discriminant
)来判断方程的实数根个数。当判别式大于0时,方程有两个实数根,当判别式等于0时,方程只有一个实数根,当判别式小于0时,方程没有实数根。在计算实数根时,我们使用了sqrt
函数来计算平方根。
请尝试运行此修复后的代码,并检查输出结果是否正确。如果仍然遇到问题,请提供更多的细节或相关的代码,以便我能够帮助你更好地解决这个问题。
【相关推荐】