c++求解一元二次方程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++求解一元二次方程相关的知识,希望对你有一定的参考价值。

#include<iostream.h>
#include<math.h>
void main()

double a,b,c,d,e,x1,x2;
cout<<"请输入要求解的一元二次方程:"<<endl;
cout<<"a: ";
cin>>a;
cout<<"b: ";
cin>>b;
cout<<"c: ";
cin>>c;
cout<<a<<"*x*x"<<"+"<<b<<"*x"<<"+"<<c<<"=0"<<endl;
d=b*b-4*a*c;
if(d<0)

cout<<"There is no x."<<endl;

if(d==0)

cout<<"There is only x."<<endl;
x1=x2=(-b)/(2*a);
cout<<"x1=x2="<<x1<<endl;

if(d>0)

e=sqrt(d);
x1=(-b+e)/(2*a);
x2=(-b-e)/(2*a);
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;

扩展资料:

一元二次方程成立必须同时满足三个条件:

1、是整式方程,即等号两边都是整式,方程中如果有分母;且未知数在分母上,那么这个方程就是分式方程,不是一元二次方程,方程中如果有根号,且未知数在根号内,那么这个方程也不是一元二次方程(是无理方程)。

2、只含有一个未知数;

3、未知数项的最高次数是2 。

参考技术A 已调试,无错误。希望对你有所帮助!
#include<iostream.h>
#include<math.h>

void main()

double a,b,c,d,e,x1,x2;
cout<<"请输入要求解的一元二次方程:"<<endl;
cout<<"a: ";
cin>>a;
cout<<"b: ";
cin>>b;
cout<<"c: ";
cin>>c;
cout<<a<<"*x*x"<<"+"<<b<<"*x"<<"+"<<c<<"=0"<<endl;
d=b*b-4*a*c;

if(d<0)

cout<<"There is no x."<<endl;

if(d==0)

cout<<"There is only x."<<endl;
x1=x2=(-b)/(2*a);
cout<<"x1=x2="<<x1<<endl;

if(d>0)

e=sqrt(d);
x1=(-b+e)/(2*a);
x2=(-b-e)/(2*a);
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2<<endl;



复杂点的

#include<iostream>
#include<math.h>
using namespace std;
class funtion

public:
~funtion()cout<<"求解完毕"<<endl;
void set_value(); //输入函数
void display(); //求解函数
void show_value();//输出函数
private:
float a;
float b;
float c;
float x1;
float x2;
float r;
float i;
float pd;
;
void funtion::set_value ()

cout<<"输入 a b c 的值且 a b c 不可全为零"<<endl;
cin>>a;
cin>>b;
cin>>c;

void funtion::display ()

pd=b*b-4*a*c;
if(pd>0)

x1=-b/(2*a)+sqrt(pd)/(2*a);
x2=-b/(2*a)-sqrt(pd)/(2*a);

else if(pd==0)

x1=-b/(2*a);
x2=-b/(2*a);

else

r=-b/(2*a);
i=sqrt(-pd)/(2*a);


void funtion::show_value ()


if(pd>0)
cout<<"x1="<<x1<<" "<<"x2="<<x2<<endl;
else if(pd==0)
cout<<"x1="<<x1<<" "<<"x2="<<x2<<endl;
else
cout<<"x1="<<r<<'+'<<i<<"i"<<" "<<"x2="<<r<<'+'<<i<<"i"<<endl;

int main()

funtion f;
f.set_value ();
f.display ();
f.show_value ();
return 0;


#include<iostream.h>
#include<math.h>
#include<iomanip.h>
void main()

float a,b,c;
double x1,x2;
cout<<"请输入a,b,c:"<<endl;
cin>>a>>b>>c;
if(a!=0)

if((b*b-4*a*c)>=0)

x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<<x1<<setw(5)<<"x2="<<x2<<endl;

else
cout<<"无解"<<endl;


else

if(b==0)//2个=是判断相等,一个是赋值。

if(c==0)//这里也是一样的。
cout<<"x为任意解"<<endl;
else
cout<<"无解"<<endl;

else
x1=-c/b;
x2=-c/b;
cout<<"x1="<<x1<<setw(5)<<"x2="<<x2<<endl;



本回答被提问者和网友采纳
参考技术B //解一元二次方程的C++程序
#include<iostream.h>
#include<math.h>
#include<iomanip.h>
void sqrt1(double,double);
void sqrt2(double,double);
void printer(double,double);

void main()

float a,b,c;
double x1,x2;
cout<<"请输入a,b,c:"<<endl;
cin>>a>>b>>c;
if(b*b-4*a*c !=0)

if(b*b-4*a*c)

sqrt1(x1,x2);

else

printer(x1,x2);



else

sqrt2(x1,x2);




void sqrt1(double x1,double x2) //b*b-4ac>0

float a,b,c;
if(a!=0)

x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"x1="<<x1<<setw(5)<<"x2="<<x2<<endl;


else

if(b==0)

if(c==0)
cout<<"x为任意解"<<endl;
else
cout<<"无解"<<endl;

else

x1=x2=-c/b;
cout<<"x1="<<"x2="<<x1<<endl;





void sqrt2(double x1,double x2) //b*b-4ac=0


float a,b,c;
x1=x2=-b/(2*a);
cout<<"x1="<<"x2="<<x1<<endl;


void printer (double x1,double x2) //b*b-4ac<0

float a,b,c;
char i='i';//i后面为虚部
x1=(-b/(2*a))+(i*(sqrt(b*b-4*a*c)/(2*a)));
x2=(-b/(2*a))-(i*(sqrt(b*b-4*a*c)/(2*a)));
cout<<"x1="<<x1<<"\t"<<"x2="<<x2<<endl;

使用成员函数求解方程 C++

【中文标题】使用成员函数求解方程 C++【英文标题】:Using member function to solve equation C++ 【发布时间】:2020-05-19 10:23:15 【问题描述】:

我目前正在尝试创建一个程序,通过将数组传递给类的成员函数来计算具有给定时间值的火箭的质量。我得到这两个错误,似乎无法弄清楚如何摆脱它们。任何建议都非常感谢,谢谢。

23 8 [错误] 'double equip::calcmass(double)' 的原型与 'equip' 类中的任何原型都不匹配

13 10 [错误] 候选是:双装备::calcmass()

#include <iostream>
#include <fstream>
#include <cmath>
#include <cstring>
using namespace std;

class equip

    public:
        double mass[999999999], velocity, height, time[999999999];
        double calcmass();
    private:
        double T = 7000;
        double g = 32.2;
        double K = 0.008;
;

double equip::calcmass(double time)

    int i = 0;
    for(i=0; i=999999999; i++)
    
        return mass[i] = (3000 - 40 * time[i]) / g;
    


int main()

    int i = 0;
    equip rocket;
    ifstream infile;
    string filename;
    cout<<"Enter input file name for time (time): ";
    cin>>filename;
    infile.open(filename.c_str());

    while(infile.fail())
    
        cerr<<"Error opening file. \n";
        cout<<"Enter file name: ";
        cin>>filename;
        infile.open(filename.c_str());
    

    for(i=0; i<999999999; i++)
    
        infile>>rocket.time[i];
    

    for(i=0; i<999999999; i++)
    
        cout<<rocket.mass[i];
    

    return 0;

【问题讨论】:

建议:不要使用幻数。正确命名它们以使其更易于阅读。此外,那些大数组(999999999)可能会破坏堆栈。 【参考方案1】:

在您声明的类定义中

double calcmass()

在成员函数的定义中是

double calcmass(double time)

它们不匹配。一个接受double 作为参数,另一个不接受。

【讨论】:

【参考方案2】:

您缺少一堆标题,并且在函数声明中缺少函数定义中的参数:

#include <cmath>
#include <cstring>
#include <fstream>
#include<iostream>

using namespace std;

class equip

public:
    ...
    double calcmass(double time); // here was missing the parameter
    ...
;

double equip::calcmass(double time)

   ...

另外你在time上做time[i],这是一个double,所以你不能使用operator[]...如果你想传递一个数组,你可以使用pointer to double

class equip 
    ...
    double calcmass(double* time)

double equip::calcmass(double* time)

   ...

【讨论】:

以上是关于c++求解一元二次方程的主要内容,如果未能解决你的问题,请参考以下文章

c++求解一元二次方程

C++ 数学与算法系列之高斯消元法求解线性方程组

使用 Eigen 求解线性方程组

求解线性方程

我可以使用 Eigen 求解形式为 xA=b 的线性方程组,其中 A 是稀疏的吗?

matlab——符号方程求解