⑴ c语言一元二次方程求根程序
c语言一元二次方程求根程序:
手动输入三个系数,分别代表二次项系数、一次项系数、常数项。
判断输入的二次项系数是否为0,如果为0,提示“输入的第一个值不合法,请重新输入!”。
如果二次项系数不为0,利用根的判别式,计算一元二次方程是否有根。
如果判别式 Δ >= 0 ,代表方程有两个根,输出根。
如果 Δ < 0 ,提示“方程无根”。
c语言一元二次方程求根程序算法的构思过程:
一元二次方程的一般式:ax^2+bx+c=0。
我们知道,一元二次方程有解(根)的充要条件是:b^2-4ac>=0。如果不满足此关系式,那么方程无解。接着当方程有解的时候又出现了两种情况。
有两个重根(大小相等的根)或者两个大小不等的根,为了是程序更加完善还要考虑到a =0的情况,即此时不能看做一元二次方程而只能将其看作一元一次方程,本程序运用求根公式来实现功能。
⑵ 如何用java编写一元二次方程的求根问题
public class SquareEquation {
double a, b, c;
public void setA(double a) {
this.a = a;
}
public void setB(double b) {
this.b = b;
}
public void setC(double c) {
this.c = c;
}
public double getRootOne() {
double disk = calculateValidDisk();
return (-b + Math.sqrt(disk)) / (2 * a);
}
public double getRootTwo() {
double disk = calculateValidDisk();
return (-b - Math.sqrt(disk)) / (2 * a);
}
private double calculateValidDisk() {
if (a == 0) {
throw new EquationException("不是二次方程", EquationException.NONE_EQUATION);
}
double disk = b * b - 4 * a * c;
if (disk < 0) {
throw new EquationException("没有实根", EquationException.NO_REALROOT);
}
return disk;
}
}
(2)一元函数求根对分法怎么编程扩展阅读
比如 方程是 x平方+3x+2=0;
public class Test
{
public static void main(String []args)
{
double a=1;//二次项系数
double b=3;//一次项系数
double c=2;//常数项
double s=b*b-4*a*c;
if(s<0)
{
System.out.print("b*b-4ac<0,方程无解!");
return;
}
double ss=Math.sqrt(s);
double x1=(-1*b-ss)/(2*a);
double x2=(-1*b+ss)/(2*a);
System.out.println("x1="+x1);
System.out.println("x2="+x2);
}
}
⑶ 计算一元二次方程求根公式(要求有判别式 编程
1、一元二次方程的求根公式
将一元二次方程ax2+bx+c=0(a≠0)进行配方,当b2-4ac≥0时的根为
.
该式称为一元二次方程的求根公式,用求根公式解一元二次方程的方法称为求根公式法,简称公式法.
说明:(1)一元二次方程的公式的推导过程,就是用配方法解一般形式的一元二次方程ax2+bx+c=0(a≠0);
(2)由求根公式可知,一元二次方程的根是由系数a、b、c的值决定的;
(3)应用求根公式可解任何一个有解的一元二次方程,但应用时必须先将其化为一般形式.
2、一元二次方程的根的判别式
(1)当b2-4ac>0时,方程有两个不相等的实数根
;
(2)当b2-4ac=0时,方程有两个相等的实数根;
(3)当b2-4ac<0时,方程没有实数根.
⑷ C语言表编程:用二分法求一元三次方程的根 要求:又主函数调用求根子函数
二分法的基本思路是:任意两个点x1和x2,判断区间(x1,x2)内有无一个实根,如果f(x1)与f(x2)符号相反,则说明有一实根。接着取(x1,x2)的中点x,检查f(x)和f(x2)是否同号,如果不同号,说明实根在(x,x2)之间,如果同号,在比较(x1,x),这样就将范围缩小一半,然后按上述方法不断的递归调用,直到区间相当小(找出根为止)!
比如用二分法求f(x)=x^3-6x-1=0的实根。
代码如下(已调试):
#include "math.h"
main()
{
float x,x1,x2;
float F(float x,float x1,float x2);
printf("请输入区间[x1,x2]\n");
scanf("%f%f",&x1,&x2);
printf("x=%f\n",F(x,x1,x2));
}
float F(float x,float x1,float x2)
{
float f,f1,f2;
do
{
f1=pow(x1,3)-6*x1-1.0;
f2=pow(x2,3)-6*x2-1.0;
}while(f1*f2>0); //确保输入的x1,x2使得f1,f2符号相反
do
{
x=(x1+x2)/2; //求x1,x2的中点
f=pow(x,3)-6*x-1.0;
if(f1*f>0) //当f与f1符号相同时
{x1=x;f1=f;}
else if(f2*f>0) //当f与f2符号相同时
{x2=x;f2=f;}
}while(fabs(f)>1e-6); //判断条件fabs(f)>1e-6的意思是f的值非常0
return x;
}
输入:1 5
则输出:x=2.528918
输入:-10 10
则输出:x=2.528918
⑸ 如何用VB对”一元三次方程求根”问题进行编程
针对方程"ax^3+bx^2+cx+d=0"的求根程序。
控件只需一个Command1,结果显示在“立即”中。
代码如下。(参考)
========================
Private Sub Command1_Click()
Dim x1r As Double, x1i As Double, x2r As Double, x2i As Double, x3r As Double, x3i As Double
Dim ret As String
Const eq = "ax^3+bx^2+cx+d=0"
a = InputBox("请输入a", eq)
b = InputBox("请输入b", eq)
c = InputBox("请输入c", eq)
d = InputBox("请输入d", eq)
ret = CubicEquation(a, b, c, d, x1r, x1i, x2r, x2i, x3r, x3i) '5x^3+4x^2+3x-12=0
Debug.Print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & ret
Debug.Print x1r; " + "; x1i; " i"
Debug.Print x2r; " + "; x2i; " i"
Debug.Print x3r; " + "; x3i; " i"
End Sub
Private Function CubicEquation _
(ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal d As Double, _
x1r As Double, x1i As Double, x2r As Double, x2i As Double, x3r As Double, x3i As Double) As String
'Cubic equation(v2.2), coded by www.dayi.net btef (please let this line remain)
Dim e As Double, f As Double, g As Double, h As Double, delta As Double
Dim r As Double, sita As Double, pi As Double, rr As Double, ri As Double
If a = 0 Then
CubicEquation = "Not a cubic equation: a = 0"
Exit Function
End If
'pi = 3.14159265358979
pi = 4 * Atn(1)
b = b / a 'simplify to a=1: x^3+bx^2+cx+d=0
c = c / a
d = d / a
e = -b ^ 2 / 3 + c 'substitute x=y-b/3: y^3+ey+f=0
f = (2 * b ^ 2 - 9 * c) * b / 27 + d
If e = 0 And f = 0 Then
x1r = -b / 3
x2r = x1r
x3r = x1r
CubicEquation = "3 same real roots:"
ElseIf e = 0 Then 'need to deal with e = 0, or it will cause z = 0 later.
r = -f 'y^3+f=0, y^3=-f
r = Cur(r)
x1r = r - b / 3 'a real root
If r > 0 Then 'r never = 0 since g=f/2, f never = 0 there
sita = 2 * pi / 3
x2r = r * Cos(sita) - b / 3
x2i = r * Sin(sita)
Else
sita = pi / 3
x2r = -r * Cos(sita) - b / 3
x2i = -r * Sin(sita)
End If
x3r = x2r
x3i = -x2i
CubicEquation = "1 real root and 2 image roots:"
Else 'substitute y=z-e/3/z: (z^3)^2+fz^3-(e/3)^3=0, z^3=-g+sqr(delta)
g = f / 2 '-q-sqr(delta) is ignored
h = e / 3
delta = g ^ 2 + h ^ 3
If delta < 0 Then
r = Sqr(g ^ 2 - delta)
sita = Argument(-g, Sqr(-delta)) 'z^3=r(con(sita)+isin(sita))
r = Cur(r)
rr = r - h / r
sita = sita / 3 'z1=r(cos(sita)+isin(sita))
x1r = rr * Cos(sita) - b / 3 'y1=(r-h/r)cos(sita)+i(r+h/r)sin(sita), x1=y1-b/3
sita = sita + 2 * pi / 3 'no image part since r+h/r = 0
x2r = rr * Cos(sita) - b / 3
sita = sita + 2 * pi / 3
x3r = rr * Cos(sita) - b / 3
CubicEquation = "3 real roots:"
Else 'delta >= 0
r = -g + Sqr(delta)
r = Cur(r)
rr = r - h / r
ri = r + h / r
If ri = 0 Then
CubicEquation = "3 real roots:"
Else
CubicEquation = "1 real root and 2 image roots:"
End If
x1r = rr - b / 3 'a real root
If r > 0 Then 'r never = 0 since g=f/2, f never = 0 there
sita = 2 * pi / 3
x2r = rr * Cos(sita) - b / 3
x2i = ri * Sin(sita)
Else 'r < 0
sita = pi / 3
x2r = -rr * Cos(sita) - b / 3
x2i = -ri * Sin(sita)
End If
x3r = x2r
x3i = -x2i
End If
End If
End Function
Private Function Cur(v As Double) As Double
If v < 0 Then
Cur = -(-v) ^ (1 / 3)
Else
Cur = v ^ (1 / 3)
End If
End Function
Private Function Argument(a As Double, b As Double) As Double
Dim sita As Double, pi As Double
'pi = 3.14159265358979
pi = 4 * Atn(1)
If a = 0 Then
If b >= 0 Then
Argument = pi / 2
Else
Argument = -pi / 2
End If
Else
sita = Atn(Abs(b / a))
If a > 0 Then
If b >= 0 Then
Argument = sita
Else
Argument = -sita
End If
ElseIf a < 0 Then
If b >= 0 Then
Argument = pi - sita
Else
Argument = pi + sita
End If
End If
End If
End Function
⑹ 用C语言编程求一元二次函数的根,用3个函数分别求当判别式大于,小于,等于0的值,从主函数输入a,b,c的值
#include<stdio.h>
#include<math.h>
float e,f,g,h,i;
int main()
{
float yishigen(float x,float y);
float denggen(float x);
float xugen();
float a,b,c,p,q,k;
scanf("%f,%f,%f",&a,&b,&c);
p=-b/(2*a);
q=b*b-4*a*c;
k=sqrt(q)/(2*a);
if(q>0)
{
yishigen(p+k,p-k);
printf("x1=%f,x2=%f",p+k,p-k);
}
else if(q==0)
{
denggen(p);
printf("x1=x2=%f",p);
}
else
{
xugen();
printf("No!");
}
}
float yishigen(float x,float y)
{
h=-f/(2*e);
i=sqrt(e*e-4*e*f);
x=h+i;
y=h-i;
}
float denggen(float x)
{
h=-f/(2*e);
x=h;
}
float xugen()
{
printf("No!");
}经过运行是可以的,这道题有点难度,我也写了几次,希望对你有帮助
⑺ 一元二次方程求根C语言代码
#include "math.h"
如:9的平方根的代码:sqrt (9)值是:3
你的代码中,m定义的是整型变量。而它的赋值符右边是单精度运算。
⑻ 一元二次方程的解法求根公式
公式的一般形式:ax_+bx+c=0(a≠0),其中ax_是二次项,a是二次项系数;bx是一次项;b是一次项系数;c是常数项。
使方程左右两边相等的未知数的值就是这个一元二次方程的解,一元二次方程的解也叫做一元二次方程的根。
因式分解法:
因式分解法又分“提公因式法”;而“公式法”(又分“平方差公式”和“完全平方公式”两种),另外还有“十字相乘法”,因式分解法是通过将方程左边因式分解所得,因式分解的内容在八年级上学期学完。用因式分解法解一元二次方程的步骤:一元二次方程:
(1)将方程右边化为0;
(2)将方程左边分解为两个一次式的积;
(3)令这两个一次式分别为0,得到两个一元一次方程;
(4)解这两个一元一次方程,它们的解就是原方程的解.
⑼ 编程求解一元二次方程的根 分别判断3种情况,分别调用3个函数计算并输出方程的根
下面是用C++编写的代码,不知到你需要什么语言编写的。输入a,b,c时,每输入一个数,回车确认。
#include"iostream.h"
#include"math.h"
double drt(double a,double b,double c)//声明并定义求德尔塔值的函数
{
return (b*b-4*a*c);
}
int main()
{
double a,b,c,d;
cout<<"请依次输入a,b,c三个实数"<<endl;
cin>>a>>b>>c;
d=drt(a,b,c);//调用求德尔塔值的函数
if(d<0||a==0)
{
cout<<"此方程无解"<<endl;
}
else
{
cout<<((-1)*b+sqrt(d))/(2*a)<<endl<<((-1)*b-sqrt(d))/(2*a)<<endl; //sqrt 为系统给出的求平方根函数
}
return 0;
}