日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编写c语言程序解一元一次方程,一元方程计算器1.0的代码(C语言实现)

發(fā)布時間:2023/12/10 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写c语言程序解一元一次方程,一元方程计算器1.0的代码(C语言实现) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

該計算器的代碼由本人獨立創(chuàng)作,如有錯誤及需要改進的地方,懇請指正,不勝感激。

一、基礎(chǔ)知識

1.一元一次方程

1.1?基本形式

ax + b = 0(其中a≠0)

1.2?求解方法

一元一次方程的求解比較簡單,只需移項、系數(shù)化為一即可,則一元一次方程的解為

x = -b / a

2.一元二次方程

2.1?基本形式

ax^2 + bx + c = 0(其中a≠0)

2.2?求解方法

一元二次方程的求解方法較多,這里為了編程的方便,運用求根公式法,方法如下:

(1)把Δ=

b^2 -4ac?叫做一元二次方程ax^2

+ bx + c = 0(其中a≠0)的根的判別式。

(2)用求根公式解一元二次方程的方法叫做求根公式法。

(3)用求根公式法解一元二次方程的一般步驟為:

①把方程化成一般形式,進而確定a,b,c的值(注意符號);

②求出Δ=

b^2 -4ac的值(若Δ<0,則方程無實數(shù)根;若Δ>0,則方程有兩個不相等的實數(shù)根;若Δ=0,則方程有兩個相等實數(shù)根);

③在Δ=

b^2 -4ac>=0的前提下,把a、b、c的值代入公式進行計算求出方程的根。

注意:用求根公式法解一元二次方程的前提條件有兩個:①a≠0;

②Δ大于等于0

一元二次方程的求根公式:

利用一元二次方程根的判別式(△=b-4ac)判斷方程的根的情況。

一元二次方程ax^2

+ bx + c = 0(其中a≠0)的根與△=b-4ac有如下關(guān)系:

①當Δ>0時,方程有兩個不相等的實數(shù)根;

②當Δ=0時,方程有兩個相等的實數(shù)根;

③當Δ<0時,方程無實數(shù)根。

上述結(jié)論反過來也成立。

3.一元三次方程

3.1?基本形式

ax^3 + bx^2 + cx +d =0(其中a≠0)

3.2?求解方法

為了編程的方便,這里只敘述盛金求根法:

(1)盛金定理:

當b=0,c=0時,盛金公式1無意義;當A=0時,盛金公式3無意義;當A≤0時,盛金公式4無意義;當T1

時,盛金公式4無意義。

當b=0,c=0時,盛金公式1是否成立?盛金公式3與盛金公式4是否存在A≤0的值?盛金公式4是否存在T1

的值?盛金定理給出如下回答:

盛金定理1:當A=B=0時,若b=0,則必定有c=d=0(此時,方程有一個三重實根0,盛金公式1仍成立)。

盛金定理2:當A=B=0時,若b≠0,則必定有c≠0(此時,適用盛金公式1解題)。

盛金定理3:當A=B=0時,則必定有C=0(此時,適用盛金公式1解題)。

盛金定理4:當A=0時,若B≠0,則必定有Δ>0(此時,適用盛金公式2解題)。

盛金定理5:當A<0時,則必定有Δ>0(此時,適用盛金公式2解題)。

盛金定理6:當Δ=0時,若A=0,則必定有B=0(此時,適用盛金公式1解題)。

盛金定理7:當Δ=0時,若B≠0,盛金公式3一定不存在A≤0的值(此時,適用盛金公式3解題)。

盛金定理8:當Δ<0時,盛金公式4一定不存在A≤0的值。(此時,適用盛金公式4解題)。

盛金定理9:當Δ<0時,盛金公式4一定不存在T≤-1或T≥1的值,即T出現(xiàn)的值必定是-1<T<1。

顯然,當A≤0時,都有相應(yīng)的盛金公式解題。

注意:盛金定理逆之不一定成立。如:當Δ>0時,不一定有A<0。

盛金定理表明:盛金公式始終保持有意義。任意實系數(shù)的一元三次方程都可以運用盛金公式直觀求解。

(2)利用盛金定理進行計算:(圖片來自百度百科)

?

?

?

4.一元四次方程

4.1?基本形式

ax^4 + bx^3 +cx^2 + dx + e = 0(其中a≠0)

4.2?求解方法

為了編程的方便,這里只敘述置換群解法與盛金公式綜合求根:(圖片來自百度百科)

二、源代碼

//整體架構(gòu)

#include

#include

void fun1(); ?//定義“一元一次方程”的函數(shù)

void fun2(); ?//定義“一元二次方程”的函數(shù)

void fun3();?//定義“一元三次方程”的函數(shù)

void fun4(); ?//定義“一元四次方程”的函數(shù)

int main(void)

{

char sel;

//初始化界面設(shè)計

printf(" ?一元方程計算器1.0\n");

printf("\n\n");

printf("選擇你要計算的方程:\n");

printf("a.一元一次方程(ax + b = 0, a !=0)\n");

printf("b.一元二次方程(ax^2 + bx + c = 0, a != 0)\n");

printf("c.一元三次方程(ax^3 + bx^2 + cx + d = 0, a != 0)\n");

printf("d.一元四次方程(ax^4 + bx^3 + cx^2 + dx + e = 0, a != 0)\n");

printf("你的選擇是(a,b,c,d中的一個):");

//對所選擇的方程輸入數(shù)值并計算

while( scanf("%c", &sel) != 0 )

{

if( sel == 'a' )

{

fun1();

printf("\n\n");

}

else if( sel == 'b')

{

fun2();

printf("\n\n");

}

else if( sel == 'c')

{

fun3();

printf("\n\n");

}

else if( sel == 'd')

{

fun4();

printf("\n\n");

}

else{

printf("看清楚選項!你個逗逼!\n");

printf("再選一次:");

continue;

}

printf("需要繼續(xù)計算方程嗎?\n");

printf("如果需要,通過輸入a,b,c,d選擇方程計算;\n");

printf("如果不需要,按“關(guān)閉”退出。\n");

printf("你的選擇是:");

scanf("%c", &sel);

}

return 0;

}

//“一元一次方程”的函數(shù)

void fun1()

{

float a, b;

printf("請輸入方程的系數(shù)\n");

printf("a = ");

scanf("%f", &a);

printf("b = ");

scanf("%f", &b);

printf("該一元一次方程的解為:x = %.3f\n", -b/a);

}

//“一元二次方程”的函數(shù)

void fun2()

{

float a, b, c;

double delta;

double x1, x2;

printf("請輸入方程的系數(shù):\n");

printf("a = ");

scanf("%f", &a);

printf("b = ");

scanf("%f", &b);

printf("c = ");

scanf("%f", &c);

delta = b * b - 4 * a * c;

if( delta > 0 )

{

x1 = ( -b - sqrt(delta) ) / ( 2 * a );

x2 = ( -b - sqrt(delta) ) / ( 2 * a );

printf("方程有兩個解:x1 = %.3lf, x2 = %.3lf\n", x1, x2);

}

else if( delta == 0 )

{

x1 = -b / ( 2 * a );

printf("方程有唯一解:x1 = x2 = %.3lf\n", x1);

}

else

printf("方程無實數(shù)根\n");

}

//“一元三次方程”的函數(shù)

void fun3()

{

float a, b, c, d; ?//存放三元一次方程的系數(shù)

double A, B, C, delta; ?//存放判別式

double x1, x2, x3; ?//存放方程的根

double Y1, Y2, X, T; ?//存放中間變量

printf("請輸入方程的系數(shù):\n");

printf("a = ");

scanf("%f", &a);

printf("b = ");

scanf("%f", &b);

printf("c = ");

scanf("%f", &c);

printf("d = ");

scanf("%f", &d);

//計算重根判別式

A = b * b - 3 * a * c;

B = b * c - 9 * a * d;

C = c * c - 3 * b * d;

//計算總判別式

delta = B * B - 4 * A * C;

// A = B = 0 的情況(盛金公式1)

if( A == 0 && B == 0 )

{

x1 = -b / (3 * a);

printf("方程有一個三重根:x1 = x2 =x3 = %.3lf\n", x1);

}

//delta > 0 的情況(盛金公式2)

else if( delta > 0 )

{

Y1 = A * b + 3 * a * (-B + sqrt(delta)) / 2;

Y2 = A * b + 3 * a * (-B + sqrt(delta)) / 2;

x1 = (-b - (pow(Y1,1/3) + pow(Y2,1/3))) / (3 * a);

X = (-b +(pow(Y1,1/3)) + pow(Y2,1/3)) / ?(6 *

a);

x2 = sqrt(3) * (pow(Y1,1/3) + pow(Y2,1/3)) / (6 * a);

x3 = -x2;

printf("方程有一個實根和一對共軛虛根,實根為:x1 = %lf\n", x1);

printf("虛根為:x2 = %.3lf + %.3lfi, x3 = %.3lf + %.3lfi\n", X, x2, X ,

x3);

}

//delta = 0

的情況(盛金公式3)

else if( delta == 0 )

{

x1 = -b / a + B / A;

x2 = -B / (2 * A);

printf("方程有3個實數(shù)根,其中有一個二重根:x1 = %.3lf, x2 = x3 = %.3lf\n", x1,

x2);

}

//delta < 0

的情況(盛金公式4)

else if( delta < 0 )

{

T = (2 * A * b - 3 * a * B) / (2 * sqrt(A * A * A));

X = acos(T);

x1 = (-b - 2 * sqrt(A) * cos(X/3)) / (3 * a);

x2 = (-b + sqrt(A) * (cos(X/3) + sqrt(3) *sin(X/3))) / (3 * a);

x3 = (-b + sqrt(A) * (cos(X/3) - sqrt(3) *sin(X/3))) / (3 * a);

printf("方程有三個不相等的實根:x1 = %.3lf, x2 = %.3lf, x3 = %.3lf\n", x1, x2,

x3);

}

}

// “一元四次方程”的函數(shù)

void fun4()

{

float a, b, c, d, e; ?//存放方程的系數(shù)

long double A, B, C, D, E, F, delta; ?//存放判別式變量

long double x1, x2, x3, x4;?// 存放方程的根

long double X1, X2, y1, y2, y3, Y1, Y2, T, Z1, Z2, Z, W1, W2, X;

//存放中間變量

printf("請輸入方程的系數(shù):\n");

printf("a = ");

scanf("%f", &a);

printf("b = ");

scanf("%f", &b);

printf("c = ");

scanf("%f", &c);

printf("d = ");

scanf("%f", &d);

printf("e = ");

scanf("%f", &e);

//計算判別式

D = -(3 * b * b - 8 * a * c);

E = 3 * pow(b,4) + 16 * a * a * c * c - 16 * a * b * c + 16 * a * a

* b * d - 64 * pow(a,3) * e;

F = -(b * b * b - 4 * a * c + 8 * a * a * d);

A = D * D - 3 * E;

B = D * E - 9 * F;

C = E * E - 3 * D * F;

delta = B * B - 4 * A * C;

//D = E = F = 0 的情況

if( D == 0 && E == 0 && F == 0 )

{

x1 = -b / (4 * a);

printf("方程有一個四重根:x1 = x2 = x3 = x4 = %.3g\n", x1);

}

//A = B = C = 0 ,且 D != 0, E != 0, F != 0

的情況

else if( A == 0 && B == 0 && C == 0 && D !=

0 && E != 0 && F != 0 )

{

x1 = -b / (4 * a) - F / (4 * a * D);

x2 = -b / (4 * a) + 3 * F / (4 * a * D);

printf("方程有一個三重根:x1 = %.3g, x2 = x3 = x4 = %.3g\n", x1, x2);

}

//E = F = 0,且D != 0的情況

else if( E == 0 && F == 0 && D != 0 )

{

x1 = (-b + sqrt(-D)) / (4 * a);

x3 = (-b - sqrt(-D)) / (4 * a);

printf("方程有兩對重根:x1 = x2 = %.3g, x3 = x4 = %.3g\n", x1, x3);

}

//delta = 0 且A != 0的情況

else if( delta == 0 && A != 0 )

{

X1 = -D + B / A;

X2 = -B / (2 * A);

x1 = (-b + sqrt(X1) + sqrt(X2)) / (4 * a);

x2 = (-b + sqrt(X1) - sqrt(X2)) / (4 * a);

x3 = (-b - sqrt(X1)) / (4 * a);

printf("方程只有一對重根:x1 = %.3g, x2 = %.3g, x3 = x4 = %.3g\n", x1, x2,

x3);

}

//delta < 0的情況

else if( delta < 0 )

{

T = acos((2 * A * D - 3 * B) / (2 * sqrt(A * A * A)));

y1 = -(D + 2 * sqrt(A) * cos(T/3)) / 3;

y2 = -(D + 2 * sqrt(A) * cos((T + 2 * 3.14) / 3)) / 3;

y3 = -(D + 2 * sqrt(A) * cos((T + 2 * 3.14) / 3)) / 3;

x1 = (-b + sqrt(y1) + sqrt(y2) + sqrt(y3)) / (4 *

a);

x2 = (-b + sqrt(y1) - sqrt(y2) - sqrt(y3)) / (4 * a);

x3 = (-b - sqrt(y1) - sqrt(y2) + sqrt(y3)) / (4 * a);

x4 = (-b - sqrt(y1) + sqrt(y2) + sqrt(y3)) / (4 * a);

printf("方程有四個不同的實根:x1 = %.3g, x2 = %.3g, x3 = %.3g, x4 =

%.3g\n",x1, x2,?x3, x4);

}

//delta > 0 的情況

else if( delta > 0 )

{

Y1 = A * D + 1.5 * (-B + sqrt(delta));

Y2 = A * D - 1.5 * (-B - sqrt(delta));

Z1 = (-2 * D - pow(Y1,1/3) - pow(Y2,1/3)) / 6;

Z2 = sqrt(3) * (pow(Y1,1/3) - pow(Y2,1/3)) / 6;

Z = -(-D + pow(Y1,1/3) - pow(Y2,1/3)) / 3;

W1 = sqrt(2 *(Z1 + sqrt(Z1 * Z1 + Z2 * Z2)));

W2 = sqrt(2 *(-Z1 + sqrt(Z1 * Z1 + Z2 * Z2)));

x1 = (-b + sqrt(Z) + 2 * W1) / (4 * a);

x2 = (-b + sqrt(Z) - 2 * W1) / (4 * a);

X = (-b - sqrt(Z)) / (4 * a);

x3 = -W2 / (2 * a);

x4 = -x3;

printf("方程有一對實根和一對虛根:\n");

printf("實根為:x1 = %.3g, x2 = %.3g\n", x1,

x2);

printf("虛根為:x3 = %.3g + %.3gi, x4 = %.3g +

%.3gi\n", X, x3, X, x4);

}

}

總結(jié)

以上是生活随笔為你收集整理的编写c语言程序解一元一次方程,一元方程计算器1.0的代码(C语言实现)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。