C++高手请进
本人是一名初学者,帮忙看看以下有什么问题:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{float a,b,c,x1,x2,x;
cout<<"Please enter a,b,c:";
cin>>a>>b>>c;
if(a=0) x=-c/b;
cout<<"x="<<x<<endl;
else{if(b*b-4*a*c>0)
x1=(-b-sqrt(b*b-4*a*c))/(2*a);
x2=(-b+sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
else if(b*b-4*a*c==0)
x=-b/(2*a);
cout<<"x="<<x<<endl;
else cout<<"error"<<endl;}
return 0;
}
参考答案:1、因为b*b-4*a*c是一个float类型,你要判断它是否等于0的话其实不能直接使用if(b*b-4*a*c==0)而应该看它是否在一个很小的范围内,可以写出if (b*b-4*a*c < 1e-10 && b*b-4*a*c > -1e-10),否则在b*b-4*a*c很小的情况下可能x1和x2打印出来的数值相等而你却打印了两个。
2、在某些特殊情况下可能会越界,比如a=0,b=0.***********,c=***********,那么x=-b/c就会超出float类型的范围。
3、代码的规范性是很重要的,规范的代码便于今后的维护,读起来也不会累,建议从初学的时候就养成良好的编程风格。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
float a;
float b;
float c;
float x1;
float x2;
float x;
cout<<"Please enter a,b,c:";
cin>>a>>b>>c;
if (0 == a)
{
x = -c/b;
cout<<"x="<<x<<endl;
return 0;
}
if ((b*b - 4*a*c < 1e-10) && (b*b - 4*a*c > -1e-10))
{
x = -b/(2*a);
cout<<"x="<<x<<endl;
return 0;
}
x1 = (-b - sqrt(b*b - 4*a*c))/(2*a);
x2 = (-b + sqrt(b*b - 4*a*c))/(2*a);
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;
return 0;
}