C++一道题请教高手帮忙
- 提问者网友:骨子里的高雅
- 2021-07-29 17:46
- 五星知识达人网友:从此江山别
- 2021-07-29 19:16
#include<cmath>
using namespace std;
void fun(double a, double b, double c)
{
double d = b*b - 4*a*c;
double x1,x2;
if (d < 0)
{
cout <<"方程无实根\n";
}
else if (d == 0.0)
{
cout <<"方程有两个相同的实根:\n";
x1 = -b/(2*a);
cout << "x1=x2=" << x1 << endl;
}
else if (d > 0)
{
cout <<"方程有两个不同的实根:\n";
x1 = (-b+sqrt(d))/(2*a);
x2 = (-b-sqrt(d))/(2*a);
cout << "x1=" << x1 << ",x2=" << x2 << endl;
}
}
void main()
{
double a, b, c;
cout << "请输入一元二次方程的三个系数:\n";
cout <<"a=";
cin >> a;
cout <<"b=";
cin >> b;
cout <<"c=";
cin >> c;
cout << endl;
fun(a,b,c);
}
VS2005上测试并通过哈。。
- 1楼网友:玩世
- 2021-07-29 20:46
上面的兄弟你编写的程序里我认为存在不规范的语法,d是实数型的不能够拿来直接的和0进行比较,我们应该找个较小的数来和d比较;还有就是在程序的严密上也还不够严密应有4中情况:
1).a=0,不是二次方程
2).b*b-4*a*c=0,有两个相等的实根
3).b*b-4*a*c>0, 有两个不等的实根
4).b*b-4*a*c<0,有两个共轭复根
#include<iostream.h> #include<math.h> void fun(double a, double b, double c) { double disc,x1,x2,p,q; if(fabs(a)<1e-6) cout<<"不是一元二次方程!"<<endl; else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) //判断是否有两个相等的实根 cout<<"x1-x2="<<-b/(2*a)<<endl; else { if(disc>1e-6) //判断有两个不相等的实根 { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); cout<<"x1="<<x1<<endl; cout<<"x2="<<x2<<endl; } else { p=-b/(2*a); q=sqrt(fabs(disc))/(2*a); cout<<"x1="<<p<<"+"<<q<<"i"<<endl; cout<<"x2="<<p<<"-"<<q<<"i"<<endl; } } }
} void main() { double a,b,c; cout<<"请输入3个系数:"<<endl; cin>>a>>b>>c; fun(a,b,c); } //注意我们的disc定义成的是个实数所以不能直接的和0进行比较。1e-6表示的是一个很小的数。用这种方法来判断disc和0的关系
- 2楼网友:逃夭
- 2021-07-29 20:11
- 3楼网友:归鹤鸣
- 2021-07-29 19:46
#include <iostream.h> #include<math.h>
void fun(double a, double b, double c) { double x1, x2; if(a == 0) { if(b == 0) cout << "没有实根 "; else{ x1 = c*(-1)/b; cout << "有一个实根: " << x1 << "\n"; } } else{ double dDelta = b*b-a*c*4; if(dDelta > 0) { x1 = ( b*(-1)+sqrt(dDelta))/a/2; x2 = ( b*(-1)-sqrt(dDelta))/a/2; cout << "有两个实根: \n" << x1 << "\n" << x2 << "\n"; } else if(dDelta == 0) { x1 = b*(-1)/a/2; cout << "有一个实根: " << x1 << "\n"; } else cout << "没有实根 "; } }
void main() { int a, b, c; cout << "输入 a,b,c 的值:"; cin >> a >> b >> c; fun(a, b, c); }