學了很多了沒有一個可以連起來的例子下面設計一個簡單的一元二次方程的函數,以ax²+bx+c=0 的
1、設計方程類
2、設計成員函數
(1)設計構造函數
FindRoot::FindRoot(float x,float y,float z) { a=x; b=y; c=z; d=b*b-4*a*c; }(2)設計成員函數
函數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;
}