学了很多了没有一个可以连起来的例子下面设计一个简单的一元二次方程的函数,以ax²+bx+c=0 的
1、设计方程类
2、设计成员函数
(1)设计构造函数
(2)设计成员函数FindRoot::FindRoot(float x,float y,float z) { a=x; b=y; c=z; d=b*b-4*a*c; }
函数Find可以根据d大于、等于或小于零来决定求解方法
if(d>0){
} else if(d == 0){
}else{
}
二、编程实现
(1)设计一个工程名为equation的工程
(2)为工程设计一个头文件equation.h声明class FindRoot类并切包含需要的头文件
(3)为工程设计equation.cpp的文件,在这个文件中实现FindRoot的类。
(4)在equation.cpp的文件中包含头文件equation.h
(5)在Find.cpp文件中设计主函数对方程求解
三、主函数求解的思想如下
(1)首先使用接受的系数创建该类的一个对象为obj即 FindRoot obj(a,b,c);
(2)构造函数自动计算d的值
(3)对象obj调用成员函数Find求方程的根,然后将根存入相应的属性中,即obj.find();
(4)对象obj调用成员函数Display输出自己的跟即obj.Display();
下面是整个完整的程序代码
#ifndef EQUATION_
#define EQUATION_H
#include <iostream>
#include <cmath>
using namespace std;
class FindRoot{
private :
float a,b,c,d;
double x1,x2;
public :
FindRoot(float a1,float b1,float c1);
void Find();
void Display();
};
#endif
#include "equation.h"
//***********************
//* 实现FindRoot类
//***********************
FindRoot::FindRoot(float a1,float b1,float c1){
a=a1;
b=b1;
c=c1;
d=b*b-4*a*c;
}
void FindRoot::Find()
{
if(d>0){
x1=(-b+sqrt(d)/2*a);
x2=(-b-sqrt(d)/2*a);
return;
}else if(d == 0){
x1=x2=(-b)/(2*a);
return;
}else{
x1=(-b)/(2*a);
x2=sqrt(-d)/2*a;
return;
}
}
void FindRoot::Display(){
if(d>0){
cout<<"X1="<<x1<<","<<"X2="<<x2<<endl;
return;
}else if(d == 0){
cout<<"X1="<<x1<<","<<"X2="<<x2<<endl;
return;
}else{
cout<<"X1="<<x1<<"+"<<x2<<endl;
cout<<"X1="<<x1<<"-"<<x2<<endl;
return;
}
}
#include <iostream>
#include "equation.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void Read(float &a,float &b,float &c);
int main(int argc, char** argv) {
float a,b,c;
cout<<"这是一个求方程ax2+bx+c=0的根的程序"<<endl;
for(;;){
Read(a,b,c);
if(a == 0){
return 0;
}
FindRoot obj(a,b,c);
obj.Find();
obj.Display();
}
return 0;
}
void Read(float &a,float &b,float &c){
cout<<"请输入方程式系数a:";
cin>>a;
if(a == 0){
return;
}
cout<<"输入方程系数b:";
cin>>b;
cout<<"输入方程系数c:";
cin>>c;
}