![]() |
#2
wmf20142016-01-12 11:45
主要是你函数功能混乱造成的,修改如如下:
![]() #include<iostream> //包含iostream的头文件 #include<math.h> #include<string>//字符串处理函数 using namespace std; class FindRoot//定义类FindRoot { private: float a,b,c; double r,q,x1,x2,R;//定义数据成员类型 int jud; public: void Input();//输入函数 void Display();//显示函数 void Find();//求根函数 }; //以上是类的声明部分,以下是类的实现部分 void FindRoot::Input() { cout<<"这是一个求解ax^2+bx+c=0的根的程序:"<<endl;//总述程序 cout<<"请输入a,b,c的值:"<<endl; cin>>a; cin>>b; cin>>c; jud=-1; if(a==0.0&&b!=0.0) { jud=3; x1=x2=-c/b; } else if(a==0.0&&b==0.0&&c==0.0) { jud=4; } else if(a==0.0&&b==0.0&&c!=0.0) { jud=5; } } void FindRoot::Find()//定义求根的函数 { float delta=b*b-4*a*c;//定义求根公式的数据类型 if (jud>0) return; if(delta<0) {jud=0; r=-b/(2*a); q=sqrt(-delta)/(2*a);//有两个共轭复数根的情况 } else if(delta==0) { x1=-b/(2*a); jud=1;//有两个相同的根的情况 } else { x1=(-b+sqrt (delta))/(2*a); x2=(-b-sqrt (delta))/(2*a); jud=2;//有两个不同的根的情况 } } void FindRoot::Display()//定义显示函数 { switch(jud) { case 0: {cout<<"x1="<<r<<"+"<<q<<"i"<<endl; cout<<"x2="<<r<<"-"<<q<<"i"<<endl;}break;//显示有共轭复数根时的解 case 1: cout<<"x1=x2="<<x1<<endl;break;//显示有一实根时的解 case 2: cout<<"x1="<<x1<<'\n'<<"x2="<<x2<<endl;break;//显示有两不同根情况的解 case 3: cout<<"x1=x2="<<-c/b<<endl;break; case 4:cout<<"x1=x2=R"<<endl;break; case 5:cout<<"输入错误"<<endl; break; } } void main()//主函数 { while(1) { FindRoot f;//定义类型 f.Input(); f.Find(); f.Display();//以上各函数按顺序执行 cout<<"是否退出?(Y退出,其它任意键继续)"<<endl;//程序是否退出 char m[2];char Y[]="Y";char y[]="y";//定义字符串 cin>>m; if(strcmp(m,Y)==0||strcmp(m,y)==0) break;//如果退出则终止运行 else cout<<"请继续……"<<endl;//如果不退出则继续执行 } } |
只有本站会员才能查看附件,请 登录
但是结果是对的,就是后面老是出现-1.#IND和-1.#INF,这怎么解决?
#include<iostream> //包含iostream的头文件
#include<math.h>
#include<string>//字符串处理函数
using namespace std;
class FindRoot//定义类FindRoot
{
private:
float a,b,c;
double r,q,x1,x2,R;//定义数据成员类型
int jud;
public:
void Input();//输入函数
void Display();//显示函数
void Find();//求根函数
};
//以上是类的声明部分,以下是类的实现部分
void FindRoot::Input()
{
cout<<"这是一个求解ax^2+bx+c=0的根的程序:"<<endl;//总述程序
cout<<"请输入a,b,c的值:"<<endl;
cin>>a;
cin>>b;
cin>>c;
if(a==0.0&&b!=0.0)
{
cout<<"x1=x2="<<-c/b<<endl;
}
else
if(a==0.0&&b==0.0&&c==0.0)
{
cout<<"x1=x2=R"<<endl;
}
else
if(a==0.0&&b==0.0&&c!=0.0)
{
cout<<"输入错误"<<endl;
}
else;
}
void FindRoot::Find()//定义求根的函数
{
float delta=b*b-4*a*c;//定义求根公式的数据类型
if(delta<0)
{jud=0;
r=-b/(2*a);
q=sqrt(-delta)/(2*a);//有两个共轭复数根的情况
}
else if(delta==0)
{
x1=-b/(2*a);
jud=1;//有两个相同的根的情况
}
else
{
x1=(-b+sqrt
(delta))/(2*a);
x2=(-b-sqrt
(delta))/(2*a);
jud=2;//有两个不同的根的情况
}
}
void FindRoot::Display()//定义显示函数
{
switch(jud)
{
case 0:
{cout<<"x1="<<r<<"+"<<q<<"i"<<endl;
cout<<"x2="<<r<<"-"<<q<<"i"<<endl;}break;//显示有共轭复数根时的解
case 1:
cout<<"x1=x2="<<x1<<endl;break;//显示有一实根时的解
case 2:
cout<<"x1="<<x1<<'\n'<<"x2="<<x2<<endl;break;//显示有两不同根情况的解
}
}
void main()//主函数
{
while(1)
{
FindRoot f;//定义类型
f.Input();
f.Find();
f.Display();//以上各函数按顺序执行
cout<<"是否退出?(Y退出,其它任意键继续)"<<endl;//程序是否退出
char m[2];char Y[]="Y";char y[]="y";//定义字符串
cin>>m;
if(strcmp(m,Y)==0||strcmp(m,y)==0)
break;//如果退出则终止运行
else
cout<<"请继续……"<<endl;//如果不退出则继续执行
}
}