⑴ 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;
}