SP1—利用C++写一个可以计算一元二次方程的小程序

Prunella ·
更新时间:2024-09-20
· 808 次阅读

首先我们需要了解一元二次方程的基本格式ax2+bx+c=0(a≠0)ax^2+bx+c=0(a{\neq}0)ax2+bx+c=0(a​=0) 这个是这个是一元二次方程的基本形式,为此需要进行一个判断,如果a=0需要进行一个报错,我们可以这样做 if(!a) { throw"boy~这个是一元一次方程,自己去解!"; } 接下来便是Δ\DeltaΔ的判断,根据高中的数学知识我们可以知道Δ=b2−4ac{\Delta}=b^2-4acΔ=b2−4ac 如果Δ{\Delta}Δ>0,那么该方程有两个实数根,我们假定这两个实数根为x1x_1x1​、x2x_2x2​(x1<x2{x_1}{<}{x_2}x1​<x2​) 则易知:x1=−b−b2−4ac2a{x_1}{=}{\frac{-b-{\sqrt{b^2-4ac}}}{2a}}x1​=2a−b−b2−4ac​​x2=−b+b2−4ac2a{x_2}{=}{\frac{-b+{\sqrt{b^2-4ac}}}{2a}}x2​=2a−b+b2−4ac​​ 如果Δ\DeltaΔ=0,那么该方程有两个相等的实数根,我们假定这两个实数根为x1x_1x1​、x2x_2x2​(x1=x2{x_1}{=}{x_2}x1​=x2​) 则易知:x1=x2=−b2a{x_1}{=}{x_2}{=}{\frac{{-}{b}}{2a}}x1​=x2​=2a−b​ 如果Δ\DeltaΔ<0,则说明该一元二次方程存在两个虚数根,我们假定它们分别是x1x_1x1​和x2x_2x2​ 由公式可知x1=−b−(b2−4ac)i2a{x_1}{=}{\frac{{-b}{-}{(\sqrt{b^2-4ac}){\mathcal{i}}}}{2a}}x1​=2a−b−(b2−4ac​)i​x2=−b+(b2−4ac)i2a{x_2}{=}{\frac{{-b}{+}{(\sqrt{b^2-4ac}){\mathcal{i}}}}{2a}}x2​=2a−b+(b2−4ac​)i​ 以上我们就列举处理,编写这个小程序所需要的全部的数学知识。那么接下来就是分别设计出对应的算法来解决它们。 首先来计算判别式Δ\DeltaΔ #include #include double Get_Delta(double,double,double); double Get_Delta(double a,double b,double c) { double Delta; Delta=b*b-4*a*c; return Delta; } case 1:(Δ>0\Delta>0Δ>0) #include #include using namespace std; double Get_Delta(double, double, double); double Get_Delta(double a, double b, double c) { double Delta; Delta = b * b - 4 * a * c; return Delta; } void case_1(double,double,double,double); void case_1(double a,double b,double c,double Delta) { double x_1,x_2; x_1=((-b-sqrt(Delta))/(2*a)); x_2=((-b+sqrt(Delta))/(2*a)); cout<<"判别式大于零,包含有两个不同的实数根,这里将它们分别命名为x1、x2,(x1<x2)"; cout<<endl; cout<<"它们的值分别是"<<x_1<<" "<<x_2<<endl; cout<<"计算完成"<<endl; } case 2:(Δ=0\Delta=0Δ=0) #include #include using namespace std; void case_2(double,double,double,double); double Get_Delta(double,double,double); double Get_Delta(double a,double b,double c) { double Delta; Delta=b*b-4*a*c; return Delta; } void case_2(double a,double b,double c,double Delta) { double x_1,x_2; x_1=((-b-sqrt(Delta))/(2*a)); x_2=x_1; cout<<"判别式等于零,包含有两个相同的实数根,这里将它们分别命名为x1、x2,(x1=x2)"<<endl; cout<<"它们分别是"<<x_1<<" "<<x_2<<endl; cout<<"计算完成"<<endl; } case 3:(Δ<0\Delta<0Δ<0) 由于这里用到了虚数我们需要定义一下虚数类随后直接在主函数内调用。 // 建立在Δ<0的前提下 #include #include using namespace std; class Imaginary_number { private: double real,imaginary; public: Imaginary_number(double,double); void Display(); }; Imaginary_number::Imaginary_number(double real,double imaginary) { this->real=real; this->imaginary=imaginary; } void Imaginary_number::Display() { if(imaginary==0) cout<<real<0) cout<<real<<"+"<<imaginary<<" "; else cout<<real<<imaginary<>a>>b>>c) { //这里假定已经知道了是第三种情况 double Delta=Get_Delta(a, b, c); double real=Get_real(a,b); double imag_1=Get_imaginary_1(a,b,c,Delta); double imag_2=Get_imaginary_2(a,b,c,Delta); Imaginary_number x1(real,imag_1); Imaginary_number x2(real,imag_2); x1.Display(); x2.Display(); } return 0; } 综上,我们已经完成了建立该程序,现在将他们综合到一起 #include #include using namespace std; //以下列举出了所有的自定义函数 double Get_Delta(double, double, double); void case_1(double, double, double, double); void case_2(double, double, double, double); double Get_real(double, double); double Get_imaginary_1(double, double, double, double); double Get_imaginary_2(double, double, double, double); //一下是它们的定义和虚数类的定义 double Get_Delta(double a, double b, double c) { double Delta; Delta = b * b - 4 * a * c; return Delta; } void case_1(double a, double b, double c, double Delta) { double x_1, x_2; x_1 = ((-b - sqrt(Delta)) / (2 * a)); x_2 = ((-b + sqrt(Delta)) / (2 * a)); cout << "判别式大于零,包含有两个不同的实数根,这里将它们分别命名为x1、x2,(x1<x2)"; cout << endl; cout << "它们的值分别是" << x_1 << " " << x_2 << endl; cout << "计算完成" << endl; } void case_2(double a, double b, double c, double Delta) { double x_1, x_2; x_1 = ((-b - sqrt(Delta)) / (2 * a)); x_2 = x_1; cout << "判别式等于零,包含有两个相同的实数根,这里将它们分别命名为x1、x2,(x1=x2)" << endl; cout << "它们分别是" << x_1 << " " << x_2 << endl; cout << "计算完成" <real = real; this->imaginary = imaginary; } void Imaginary_number::Display() { if (imaginary == 0) cout << real < 0) cout << real << "+" << imaginary <<"i"<< " "; else cout << real << imaginary <<"i"<> a >> b >> c) { Delta = Get_Delta(a, b, c); try { if (a == 0) throw "请输入一元二次方程"; else if (Delta > 0) { case_1(a, b, c, Delta); } else if (Delta == 0) { case_2(a, b, c, Delta); } else if (Delta < 0) { double real; double imag_1, imag_2; real = Get_real(a, b); imag_1 = Get_imaginary_1(a, b, c, Delta); imag_2 = Get_imaginary_2(a, b, c, Delta); Imaginary_number x_1(real, imag_1); Imaginary_number x_2(real, imag_2); x_1.Display(); x_2.Display(); } } catch (char* Debug) { cout << Debug << endl; } } return 0; } 虚数较大时有几率出现bug,本人有时间会修改的,请等待~
作者:纯洁小天使



小程序 一元二次方程 sp1 c+ 程序 C++

需要 登录 后方可回复, 如果你还没有账号请 注册新账号