C++程序设计:求解一元二次方程

C++程序设计:求解一元二次方程,第1张

程序运行过了,没有问题,记得给分

#include<iostreamh>

#include<mathh>

class Equation{

float a,b,c;

public:

float x[2];

Equation(float a1=00,float b1=00,float c1=00)

{

a=a1;

b=b1;

c=c1;

}

~Equation(){}

long CalResult();

};

long Equation::CalResult()

{

long temp;

if ((bb-4ac)==0)

{

temp=1;

x[0]=(float)(-(b/2a));

return temp;

}

if ((bb-4ac)>0)

{

temp=2;

x[0]=(-b+sqrt(bb-4ac))/(2a);

x[1]=(-b-sqrt(bb-4ac))/(2a);

return temp;

}

else

{

temp=0;

}

return temp;

}

int main()

{

float a,b,c;

char ch;

do{

cout<<"请输入一元二次方程系数"<<endl;

cin>>a>>b>>c;

Equation obj=new Equation(a,b,c);

cout<<"方程有"<<obj->CalResult()<<"个根"<<endl;

if (obj->CalResult()==1)

{

cout<<"X="<<obj->x[0]<<endl;

}

if (obj->CalResult()==2)

{

cout<<"X1="<<obj->x[0]<<endl;

cout<<"X2="<<obj->x[1]<<endl;

}

delete obj;

cout<<"是否继续计算?(1)"<<endl;

cin>>ch;

}while(ch=='1');

return 0;

}

以下是一个求解一元二次方程的示例程序,可以手动输入方程的系数a、b、c,然后计算判别式d并判断方程有几个根:

#include <stdioh>

#include <mathh>

int main() {

double a, b, c, d, x1, x2; printf("请输入一元二次方程的系数a、b、c:

"); scanf("%lf %lf %lf", &a, &b, &c);

d = b b - 4 a c; if (d > 0) {

x1 = (-b + sqrt(d)) / (2 a);

x2 = (-b - sqrt(d)) / (2 a); printf("方程有两个不相等的实根:x1=%2f,x2=%2f

", x1, x2);

} else if (d == 0) {

x1 = -b / (2 a); printf("方程有一个重根:x=%2f

", x1);

} else { printf("方程没有实根!

");

} return 0;

}

在程序中,首先使用scanf函数从标准输入中读取系数a、b、c的值,然后计算判别式d的值,根据d的值判断方程有几个根,最后使用printf函数输出结果。

如果要手动输入d等于三角形的面积,可以稍微修改一下程序,如下所示:

#include <stdioh>

#include <mathh>

int main() {

double a, b, c, d, x1, x2, p, s; printf("请输入三角形的三条边长a、b、c:

"); scanf("%lf %lf %lf", &a, &b, &c);

p = (a + b + c) / 2; // 计算半周长

s = sqrt(p (p - a) (p - b) (p - c)); // 计算面积

d = b b - 4 a c - 4 s s; // 计算判别式

if (d > 0) {

x1 = (-b + sqrt(d)) / (2 a);

x2 = (-b - sqrt(d)) / (2 a); printf("方程有两个不相等的实根:x1=%2f,x2=%2f

", x1, x2);

} else if (d == 0) {

x1 = -b / (2 a); printf("方程有一个重根:x=%2f

", x1);

} else { printf("方程没有实根!

");

} return 0;

}

在程序中,除了输入三角形的三条边长a、b、c外,还需要计算三角形的面积s和判别式d。根据一元二次方程的求解公式,判别式d的值应该是b^2 - 4ac - 4s^2,其中s是三角形的面积。如果d大于0,则方程有两个不相等的实根;如果d等于0,则方程有一个重根;如果d小于0,则方程没有实根。

一、工具:Matlab2012b

二、 *** 作步骤:

A解一元方程

1先举一例,解方程"x^2+100x+99=0"在matlab ”Command Window"中输入如下命令:x=solve('x^2+100x+99=0','x')见下图

2回车后,matlab就求出了这个一元二次方程的解。见下图

3再举一例,解一元三次方程"x^3+1=0"在matlab ”Command Window"中输入如下命令:x=solve('x^3+1=0','x')见下图

4  回车后,matlab就求出了这个一元三次方程"x^3+1=0"的解。见下图matlab解出来的解有三个,其中有一个实数解,两个虚数解。都知道一元三次方程在复数范围内的解有3个,matlab的解是对的。其实只要"x^3+1=0”的实数解,只要取下面图中的第一个解“-1”。

B解二元方程:

1 首先来求一个二元一次方程组

9x+8y=10          式1

13x+14y=12      式2

一般的解法是代入法,或者加减消去法。比较繁琐。这里只需输入如下命令即可求出解:[x,y]=solve('9x+8y=10','13x+14y=12','x','y')

2回车后,matlab就求出了这个二元一次方程组的解。见下图

3再来求一个二元非线性方程组

x^2+y^2=10          式1

2x+3y=0               式2

这里只需输入如下命令即可求出解:[x,y]=solve('x^2+y^2=10','2x+3y=0','x','y')

4x^2+y^2=10          式1

2x+3y=0               式2

其实不少人能看出来,上面的二元非线性方程组的解是一个圆与一条直线的交点坐标,一般解法是先消去y,整理成关于x的一元二次方程,然后求出x值,再求出对应y值。但这里,只用到了上面里的的一句命令,就求了这两个交点坐标。见下图。

注意事项:Matlab可以进行复数运算,所以不需要计算方程的判别式,直接根据公式可求根。和c语言相比,简化了编程工作量。

一元二次方程四中解法。

一、公式法。

二、配方法。

三、直接开平方法。

四、因式分解法。

公式法1先判断△=b_-4ac,若△<0原方程无实根;

2若△=0,原方程有两个相同的解为:X=-b/(2a);

3若△>0,原方程的解为:X=((-b)±√(△))/(2a)。

配方法。先把常数c移到方程右边得:aX_+bX=-c。将二次项系数化为1得:X_+(b/a)X=-c/a,方程两边分别加上(b/a)的一半的平方得X_+(b/a)X+(b/(2a))_=-c/a+(b/(2a))_方程化为:(b+(2a))_=-c/a+(b/(2a))_。

5①、若-c/a+(b/(2a))_<0,原方程无实根;

②、若-c/a+(b/(2a))_=0,原方程有两个相同的解为X=-b/(2a);

③、若-c/a+(b/(2a))_>0,原方程的解为X=(-b)±√((b_-4ac))/(2a)。

以上就是关于C++程序设计:求解一元二次方程全部的内容,包括:C++程序设计:求解一元二次方程、c语言求一元二次方程有几个根手动输入d等于三角形大于等于0、怎么用matlab解一元二次方程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9354788.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存